Сервис тестирования расширений VSCode
wdio-vscode-service является пакетом от третьих лиц, для получения дополнительной информации смотрите GitHub | npm
Протестировано на:
WebdriverIO сервис для тестирования расширений VSCode.
Этот сервис WebdriverIO позволяет легко тестировать ваши расширения VSCode от начала до конца в настольной IDE VSCode или как веб-расширение. Вам нужно только указать путь к вашему расширению, а сервис сделает все остальное:
- 🏗️ Установит VSCode (либо
stable
,insiders
или указанную версию) - ⬇️ Загрузит Chromedriver, соответствующий данной версии VSCode
- 🚀 Позволит вам получить доступ к API VSCode из ваших тестов
- 🖥️ Запустит VSCode с пользовательскими настройками (включая поддержку VSCode на Ubuntu, MacOS и Windows)
- 🌐 Или запустит VSCode с сервера для доступа из любого браузера для тестирования веб-расширений
- 📔 Предоставит готовые объекты страниц с локаторами, соответствующими вашей версии VSCode
Этот проект был вдохновлен проектом vscode-extension-tester, который основан на Selenium. Этот пакет берет идею и адаптирует ее для WebdriverIO.
Начиная с VSCode v1.86 требуется использовать webdriverio
v8.14 или новее для установки Chromedriver без необходимости дополнительной настройки. Если вам нужно тестировать более ранние версии VSCode, смотрите раздел Конфигурация Chromedriver ниже.
Установка
Чтобы инициировать новый проект WebdriverIO, выполните:
npm create wdio ./
Мастер установки проведет вас через процесс. Убедитесь, что вы выбрали TypeScript в качестве компилятора и не генерируйте объекты страниц, поскольку этот проект поставляется со всеми необходимыми объектами страниц. Затем убедитесь, что вы выбрали vscode
в списке сервисов:
Для получения дополнительной информации о том, как установить WebdriverIO
, пожалуйста, ознакомьтесь с до кументацией проекта.
Пример конфигурации
Чтобы использовать сервис, вам нужно добавить vscode
в список сервисов, опционально за которым следует объект конфигурации. Это заставит WebdriverIO загрузить указанные бинарные файлы VSCode и соответствующую версию Chromedriver:
// wdio.conf.ts
export const config = {
outputDir: 'trace',
// ...
capabilities: [{
browserName: 'vscode',
browserVersion: '1.86.0', // "insiders" или "stable" для последней версии VSCode
'wdio:vscodeOptions': {
extensionPath: __dirname,
userSettings: {
"editor.fontSize": 14
}
}
}],
services: ['vscode'],
/**
* Опционально определите путь, где WebdriverIO будет хранить все бинарные файлы VSCode, например:
* services: [['vscode', { cachePath: __dirname }]]
*/
// ...
};
Если вы определяете wdio:vscodeOptions
с любым другим значением browserName
кроме vscode
, например, chrome
, сервис будет обслуживать расширение как веб-расширение. Если вы тестируете в Chrome, дополнительный драйвер-сервис не требуется, например:
// wdio.conf.ts
export const config = {
outputDir: 'trace',
// ...
capabilities: [{
browserName: 'chrome',
'wdio:vscodeOptions': {
extensionPath: __dirname
}
}],
services: ['vscode'],
// ...
};
Примечание: при тестировании веб-расширений вы можете выбирать только между stable
или insiders
в качестве browserVersion
.
Настройка TypeScript
В вашем tsconfig.json
убедитесь, что вы добавили wdio-vscode-service
в список типов:
{
"compilerOptions": {
"types": [
"node",
"webdriverio/async",
"@wdio/mocha-framework",
"expect-webdriverio",
"wdio-vscode-service"
],
"target": "es2019",
"moduleResolution": "node",
"esModuleInterop": true
}
}
Использование
Затем вы можете использовать метод getWorkbench
для доступа к объектам страниц для локаторов, соответствующих вашей версии VSCode:
describe('WDIO VSCode Service', () => {
it('should be able to load VSCode', async () => {
const workbench = await browser.getWorkbench()
expect(await workbench.getTitleBar().getTitle())
.toBe('[Extension Development Host] - README.md - wdio-vscode-service - Visual Studio Code')
})
})
Доступ к API VSCode
Если вы хотите выполнить определенную автоматизацию через API VSCode, вы можете сделать это, запустив удаленные команды через пользовательскую команду executeWorkbench
. Эта команда позволяет удаленно выполнять код из вашего теста внутри среды VSCode и дает доступ к API VSCode. Вы можете передавать произвольные параметры в функцию, которые будут переданы в функцию. Объект vscode
всегда будет передан в качестве первого аргумента, за которым следуют параметры внешней функции. Обратите внимание, что вы не можете получить доступ к переменным вне области видимости функции, так как обратный вызов выполняется удаленно. Пример:
const workbench = await browser.getWorkbench()
await browser.executeWorkbench((vscode, param1, param2) => {
vscode.window.showInformationMessage(`I am an ${param1} ${param2}!`)
}, 'API', 'call')
const notifs = await workbench.getNotifications()
console.log(await notifs[0].getMessage()) // выводит: "I am an API call!"
Для полной документации по объектам страниц, проверьте документацию. Вы можете найти различные примеры использования в наборе тестов этого проекта.
Конфигурация
Через конфигурацию сервиса вы можете управлять версией VSCode, а также пользовательскими настройками для VSCode:
Опции сервиса
Опции сервиса - это параметры, необходимые для настройки тестовой среды.
cachePath
Определите путь кэша, чтобы избежать повторной загрузки пакетов VS Code. Это полезно для CI/CD, чтобы избежать повторной загрузки VSCode для каждого запуска теста.
Тип: string
По умолчанию: process.cwd()
Возможности VSCode (wdio:vscodeOptions
)
Для запуска тестов через VSCode вы должны определить vscode
как browserName
. Вы можете указать версию VSCode, предоставив возможность browserVersion
. Пользовательские опции VSCode затем определяются в пользовательской возможности wdio:vscodeOptions
. Доступны следующие опции:
binary
Путь к локально установленному VSCode. Если опция не указана, сервис загрузит VSCode на основе заданного browserVersion
(или stable
, если не указан).
Тип: string
extensionPath
Определите директорию расширения, которое вы хотите тестировать.
Тип: string
storagePath
Определите пользовательское расположение для VS Code для хранения всех данных. Это корень для внутренних директорий VS Code, таких как (частичный список)
- user-data-dir: Директория, где хранятся все пользовательские настройки (глобальные настройки), логи расширений и т.д.
- extension-install-dir: Директория, где установлены расширения VS Code.
Если не указано, используется временная директория.
Тип: string
userSettings
Определите пользовательские настройки, которые будут применены к VSCode.
Тип: Record<string, number | string | object | boolean>
По умолчанию: {}
workspacePath
Открывает VSCode для конкретного рабочего пространства. Если не указано, VSCode запускается без открытого рабочего пространства.
Тип: string