Сервис тестирования расширений 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()