Przejdź do głównej treści

Testowanie rozszerzeń VS Code

WebdriverIO pozwala na płynne testowanie rozszerzeń VS Code od początku do końca w środowisku IDE VS Code Desktop lub jako rozszerzenie internetowe. Wystarczy podać ścieżkę do rozszerzenia, a framework zajmie się resztą. Dzięki wdio-vscode-service wszystko jest obsługiwane i znacznie więcej:

  • 🏗️ Instalacja VSCode (stabilna, insiders lub określona wersja)
  • ⬇️ Pobieranie Chromedriver specyficznego dla danej wersji VSCode
  • 🚀 Umożliwia dostęp do API VSCode z poziomu testów
  • 🖥️ Uruchamianie VSCode z niestandardowymi ustawieniami użytkownika (w tym wsparcie dla VSCode na Ubuntu, MacOS i Windows)
  • 🌐 Lub udostępnianie VSCode z serwera, aby umożliwić dostęp z dowolnej przeglądarki do testowania rozszerzeń internetowych
  • 📔 Tworzenie obiektów stron z lokalizatorami dopasowanymi do twojej wersji VSCode

Rozpoczęcie pracy​

Aby zainicjować nowy projekt WebdriverIO, uruchom:

npm create wdio@latest ./

Kreator instalacji przeprowadzi Cię przez proces. Upewnij się, że wybierzesz opcję "VS Code Extension Testing", gdy zostaniesz zapytany o rodzaj testów, następnie zachowaj ustawienia domyślne lub zmodyfikuj je według własnych preferencji.

Przykładowa konfiguracja​

Aby korzystać z usługi, musisz dodać vscode do listy usług, opcjonalnie wraz z obiektem konfiguracyjnym. To sprawi, że WebdriverIO pobierze określone pliki binarne VSCode i odpowiednią wersję Chromedriver:

// wdio.conf.ts
export const config = {
outputDir: 'trace',
// ...
capabilities: [{
browserName: 'vscode',
browserVersion: '1.71.0', // "insiders" lub "stable" dla najnowszej wersji VSCode
'wdio:vscodeOptions': {
extensionPath: __dirname,
userSettings: {
"editor.fontSize": 14
}
}
}],
services: ['vscode'],
/**
* opcjonalnie możesz zdefiniować ścieżkę, w której WebdriverIO przechowuje
* pliki binarne VSCode i Chromedriver, np.:
* services: [['vscode', { cachePath: __dirname }]]
*/
// ...
};

Jeśli zdefiniujesz wdio:vscodeOptions z inną wartością browserName niż vscode, np. chrome, usługa udostępni rozszerzenie jako rozszerzenie internetowe. Jeśli testujesz na Chrome, nie jest wymagana dodatkowa usługa sterownika, np.:

// wdio.conf.ts
export const config = {
outputDir: 'trace',
// ...
capabilities: [{
browserName: 'chrome',
'wdio:vscodeOptions': {
extensionPath: __dirname
}
}],
services: ['vscode'],
// ...
};

Uwaga: podczas testowania rozszerzeń internetowych możesz wybierać tylko między stable lub insiders jako browserVersion.

Konfiguracja TypeScript​

W pliku tsconfig.json upewnij się, że dodałeś wdio-vscode-service do listy typów:

{
"compilerOptions": {
"types": [
"node",
"webdriverio/async",
"@wdio/mocha-framework",
"expect-webdriverio",
"wdio-vscode-service"
],
"target": "es2020",
"moduleResolution": "node16"
}
}

Użycie​

Możesz użyć metody getWorkbench, aby uzyskać dostęp do obiektów stron dla lokalizatorów pasujących do wybranej wersji 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')
})
})

Stamtąd możesz uzyskać dostęp do wszystkich obiektów stron, używając odpowiednich metod obiektów stron. Dowiedz się więcej o wszystkich dostępnych obiektach stron i ich metodach w dokumentacji obiektów stron.

Dostęp do API VSCode​

Jeśli chcesz wykonać określoną automatyzację za pomocą API VSCode, możesz to zrobić, uruchamiając zdalne polecenia za pomocą niestandardowego polecenia executeWorkbench. To polecenie umożliwia zdalne wykonanie kodu z testu wewnątrz środowiska VSCode i dostęp do API VSCode. Możesz przekazać dowolne parametry do funkcji, które zostaną następnie przekazane do funkcji. Obiekt vscode będzie zawsze przekazywany jako pierwszy argument, a następnie parametry funkcji zewnętrznej. Pamiętaj, że nie możesz uzyskać dostępu do zmiennych poza zakresem funkcji, ponieważ callback jest wykonywany zdalnie. Oto przykład:

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()) // wyświetla: "I am an API call!"

Pełna dokumentacja obiektów stron znajduje się w dokumentacji. Możesz znaleźć różne przykłady użycia w zestawie testów tego projektu.

Więcej informacji​

Możesz dowiedzieć się więcej o konfigurowaniu wdio-vscode-service i jak tworzyć niestandardowe obiekty stron w dokumentacji usługi. Możesz również obejrzeć poniższy wykład Christiana Bromanna na temat Testing Complex VSCode Extensions With the Power of Web Standards:

Welcome! How can I help?

WebdriverIO AI Copilot