Сервіс Тестування Розширень VSCode
wdio-vscode-service є пакетом сторонніх розробників, для отримання додаткової інформації відвідайте GitHub | npm
Протестовано на:
Сервіс WebdriverIO для тестування розширень VSCode.
Цей сервіс WebdriverIO дозволяє безперешкодно тестувати ваші розширення VSCode від початку до кінця в настільному середовищі VSCode IDE або як веб-розширення. Вам потрібно лише вказати шлях до вашого розширення, і сервіс зробить решту, а саме:
- 🏗️ Встановлення 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!"
Для повної документації об'єктів сторінок перегляньте документацію. Ви можете знайти різні приклади використання в наборі тестів цього проекту.