Przejdź do głównej treści

Runner

Runner w WebdriverIO orkiestruje jak i gdzie testy są uruchamiane podczas korzystania z testrunner. WebdriverIO obecnie obsługuje dwa różne typy runnerów: lokalny i przeglądarkowy.

Local Runner​

Local Runner inicjuje twój framework (np. Mocha, Jasmine lub Cucumber) w procesie roboczym i uruchamia wszystkie pliki testowe w środowisku Node.js. Każdy plik testowy jest uruchamiany w osobnym procesie roboczym dla każdej funkcjonalności, co pozwala na maksymalną współbieżność. Każdy proces roboczy wykorzystuje pojedynczą instancję przeglądarki i dlatego uruchamia własną sesję przeglądarki, zapewniając maksymalną izolację.

Ponieważ każdy test jest uruchamiany we własnym izolowanym procesie, nie jest możliwe udostępnianie danych między plikami testowymi. Istnieją dwa sposoby obejścia tego:

Jeśli nic innego nie jest zdefiniowane w wdio.conf.js, Local Runner jest domyślnym runnerem w WebdriverIO.

Instalacja​

Aby korzystać z Local Runner, możesz go zainstalować za pomocą:

npm install --save-dev @wdio/local-runner

Konfiguracja​

Local Runner jest domyślnym runnerem w WebdriverIO, więc nie ma potrzeby definiowania go w wdio.conf.js. Jeśli chcesz go jawnie ustawić, możesz zdefiniować go w następujący sposób:

// wdio.conf.js
export const {
// ...
runner: 'local',
// ...
}

Browser Runner​

W przeciwieństwie do Local Runner, Browser Runner inicjuje i wykonuje framework wewnątrz przeglądarki. Pozwala to na uruchamianie testów jednostkowych lub testów komponentów w rzeczywistej przeglądarce, a nie w JSDOM, jak wiele innych frameworków testowych.

Podczas gdy JSDOM jest szeroko stosowany do celów testowania, to ostatecznie nie jest prawdziwą przeglądarką, ani nie można za jego pomocą emulować środowisk mobilnych. Dzięki temu runnerowi WebdriverIO umożliwia łatwe uruchamianie testów w przeglądarce i korzystanie z poleceń WebDriver do interakcji z elementami renderowanymi na stronie.

Oto przegląd uruchamiania testów w JSDOM vs. WebdriverIOs Browser Runner

JSDOMWebdriverIO Browser Runner
1.Uruchamia testy w Node.js korzystając z reimplementacji standardów sieciowych, zwłaszcza standardów WHATWG DOM i HTMLWykonuje testy w rzeczywistej przeglądarce i uruchamia kod w środowisku, z którego korzystają Twoi użytkownicy
2.Interakcje z komponentami mogą być tylko imitowane za pomocą JavaScriptMożesz używać WebdriverIO API do interakcji z elementami przez protokół WebDriver
3.Obsługa Canvas wymaga dodatkowych zależności i ma ograniczeniaMasz dostęp do prawdziwego Canvas API
4.JSDOM ma pewne zastrzeżenia i nieobsługiwane API internetoweWszystkie API internetowe są obsługiwane, ponieważ testy działają w rzeczywistej przeglądarce
5.Niemożliwe jest wykrycie błędów między przeglądarkamiObsługa wszystkich przeglądarek, w tym przeglądarek mobilnych
6.Nie może testować stanów pseudoelementówObsługa stanów pseudo, takich jak :hover lub :active

Ten runner używa Vite do kompilacji kodu testowego i ładowania go w przeglądarce. Zawiera gotowe ustawienia dla następujących frameworków komponentów:

  • React
  • Preact
  • Vue.js
  • Svelte
  • SolidJS
  • Stencil

Każdy plik testowy / grupa plików testowych działa w ramach pojedynczej strony, co oznacza, że między każdym testem strona jest przeładowywana, aby zagwarantować izolację między testami.

Instalacja​

Aby korzystać z Browser Runnera, możesz go zainstalować za pomocą:

npm install --save-dev @wdio/browser-runner

Konfiguracja​

Aby używać Browser runnera, musisz zdefiniować właściwość runner w pliku wdio.conf.js, np.:

// wdio.conf.js
export const {
// ...
runner: 'browser',
// ...
}

Opcje Runnera​

Browser runner pozwala na następujące konfiguracje:

preset​

Jeśli testujesz komponenty przy użyciu jednego z wymienionych powyżej frameworków, możesz zdefiniować preset, który zapewnia, że wszystko jest skonfigurowane od razu. Ta opcja nie może być używana razem z viteConfig.

Typ: vue | svelte | solid | react | preact | stencil
Przykład:

wdio.conf.js
export const {
// ...
runner: ['browser', {
preset: 'svelte'
}],
// ...
}

viteConfig​

Zdefiniuj własną konfigurację Vite. Możesz przekazać niestandardowy obiekt lub zaimportować istniejący plik vite.conf.ts, jeśli używasz Vite.js do rozwoju. Pamiętaj, że WebdriverIO zachowuje niestandardowe konfiguracje Vite do konfiguracji harnessu testowego.

Typ: string lub UserConfig lub (env: ConfigEnv) => UserConfig | Promise<UserConfig>
Przykład:

wdio.conf.ts
import viteConfig from '../vite.config.ts'

export const {
// ...
runner: ['browser', { viteConfig }],
// lub po prostu:
runner: ['browser', { viteConfig: '../vites.config.ts' }],
// lub użyj funkcji jeśli twoja konfiguracja vite zawiera dużo wtyczek
// które chcesz rozwiązać tylko wtedy, gdy wartość jest odczytywana
runner: ['browser', {
viteConfig: () => ({
// ...
})
}],
// ...
}

headless​

Jeśli ustawione na true, runner zaktualizuje możliwości, aby uruchomić testy w trybie headless. Domyślnie jest to włączone w środowiskach CI, gdzie zmienna środowiskowa CI jest ustawiona na '1' lub 'true'.

Typ: boolean
Domyślnie: false, ustawione na true jeśli zmienna środowiskowa CI jest ustawiona

rootDir​

Katalog główny projektu.

Typ: string
Domyślnie: process.cwd()

coverage​

WebdriverIO obsługuje raportowanie pokrycia testowego przez istanbul. Zobacz Opcje pokrycia aby uzyskać więcej szczegółów.

Typ: object
Domyślnie: undefined

Opcje pokrycia​

Następujące opcje pozwalają skonfigurować raportowanie pokrycia.

enabled​

Włącza zbieranie pokrycia.

Typ: boolean
Domyślnie: false

include​

Lista plików włączonych do pokrycia jako wzorce glob.

Typ: string[]
Domyślnie: [**]

exclude​

Lista plików wykluczonych z pokrycia jako wzorce glob.

Typ: string[]
Domyślnie:

[
'coverage/**',
'dist/**',
'packages/*/test{,s}/**',
'**/*.d.ts',
'cypress/**',
'test{,s}/**',
'test{,-*}.{js,cjs,mjs,ts,tsx,jsx}',
'**/*{.,-}test.{js,cjs,mjs,ts,tsx,jsx}',
'**/*{.,-}spec.{js,cjs,mjs,ts,tsx,jsx}',
'**/__tests__/**',
'**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*',
'**/.{eslint,mocha,prettier}rc.{js,cjs,yml}',
]

extension​

Lista rozszerzeń plików, które raport powinien zawierać.

Typ: string | string[]
Domyślnie: ['.js', '.cjs', '.mjs', '.ts', '.mts', '.cts', '.tsx', '.jsx', '.vue', '.svelte']

reportsDirectory​

Katalog, do którego zostanie zapisany raport pokrycia.

Typ: string
Domyślnie: ./coverage

reporter​

Reportery pokrycia do użycia. Zobacz dokumentację istanbul dla szczegółowej listy wszystkich reporterów.

Typ: string[]
Domyślnie: ['text', 'html', 'clover', 'json-summary']

perFile​

Sprawdź progi dla każdego pliku. Zobacz lines, functions, branches i statements dla faktycznych progów.

Typ: boolean
Domyślnie: false

clean​

Wyczyść wyniki pokrycia przed uruchomieniem testów.

Typ: boolean
Domyślnie: true

lines​

Próg dla linii.

Typ: number
Domyślnie: undefined

functions​

Próg dla funkcji.

Typ: number
Domyślnie: undefined

branches​

Próg dla gałęzi.

Typ: number
Domyślnie: undefined

statements​

Próg dla instrukcji.

Typ: number
Domyślnie: undefined

Ograniczenia​

Korzystając z WebdriverIO browser runner, ważne jest, aby pamiętać, że blokujące dialogi, takie jak alert lub confirm, nie mogą być używane natywnie. Dzieje się tak, ponieważ blokują one stronę internetową, co oznacza, że WebdriverIO nie może kontynuować komunikacji ze stroną, powodując zawieszenie wykonania.

W takich sytuacjach WebdriverIO dostarcza domyślne zaślepki z domyślnymi zwracanymi wartościami dla tych API. Zapewnia to, że jeśli użytkownik przypadkowo użyje synchronicznych wyskakujących internetowych API, wykonanie nie zawiesi się. Zaleca się jednak, aby użytkownik zaślepiał te internetowe API dla lepszego doświadczenia. Przeczytaj więcej w Mockowanie.

Przykłady​

Koniecznie sprawdź dokumentację dotyczącą testowania komponentów i zajrzyj do repozytorium przykładów w poszukiwaniu przykładów korzystających z tych i różnych innych frameworków.

Welcome! How can I help?

WebdriverIO AI Copilot