Hoppa till huvudinnehåll

Runner

En runner i WebdriverIO organiserar hur och var tester körs när testrunner används. WebdriverIO stöder för närvarande två olika typer av runners: lokal runner och webbläsarrunner.

Local Runner

Local Runner initierar ditt ramverk (t.ex. Mocha, Jasmine eller Cucumber) inom en arbetsprocess och kör alla dina testfiler inom din Node.js-miljö. Varje testfil körs i en separat arbetsprocess per capability vilket möjliggör maximal samtidighet. Varje arbetsprocess använder en enda webbläsarinstans och kör därför sin egen webbläsarsession, vilket möjliggör maximal isolering.

Eftersom varje test körs i sin egen isolerade process är det inte möjligt att dela data mellan testfiler. Det finns två sätt att komma runt detta:

Om inget annat definieras i wdio.conf.js är Local Runner standardrunnern i WebdriverIO.

Install

För att använda Local Runner kan du installera den via:

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

Setup

Local Runner är standardrunnern i WebdriverIO så det finns inget behov av att definiera den i din wdio.conf.js. Om du vill ange den explicit kan du definiera den enligt följande:

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

Browser Runner

Till skillnad från Local Runner initierar och exekverar Browser Runner ramverket inom webbläsaren. Detta låter dig köra enhetstester eller komponenttester i en verklig webbläsare snarare än i en JSDOM som många andra testramverk.

Medan JSDOM är allmänt använd för testsyften, är det i slutändan inte en verklig webbläsare och du kan inte emulera mobila miljöer med den. Med denna runner möjliggör WebdriverIO för dig att enkelt köra dina tester i webbläsaren och använda WebDriver-kommandon för att interagera med element som renderas på sidan.

Här är en översikt över att köra tester inom JSDOM jämfört med WebdriverIOs Browser Runner

JSDOMWebdriverIO Browser Runner
1.Kör dina tester inom Node.js med en re-implementering av webbstandarder, särskilt WHATWG DOM och HTML StandardsKör dina tester i en verklig webbläsare och kör koden i en miljö som dina användare använder
2.Interaktioner med komponenter kan endast imiteras via JavaScriptDu kan använda WebdriverIO API för att interagera med element genom WebDriver-protokollet
3.Canvas-stöd kräver ytterligare beroenden och har begränsningarDu har tillgång till det riktiga Canvas API
4.JSDOM har vissa begränsningar och webbAPI:er som inte stödsAlla Web API:er stöds eftersom tester körs i en verklig webbläsare
5.Omöjligt att upptäcka fel mellan webbläsareStöd för alla webbläsare inklusive mobila webbläsare
6.Kan inte testa för element-pseudotillståndStöd för pseudotillstånd som :hover eller :active

Denna runner använder Vite för att kompilera din testkod och ladda den i webbläsaren. Den kommer med förinställningar för följande komponentramverk:

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

Varje testfil / testfilgrupp körs inom en enda sida, vilket innebär att mellan varje test laddas sidan om för att garantera isolering mellan tester.

Install

För att använda Browser Runner kan du installera den via:

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

Setup

För att använda Browser runner måste du definiera en runner-egenskap i din wdio.conf.js-fil, t.ex.:

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

Runner Options

Browser runner tillåter följande konfigurationer:

preset

Om du testar komponenter med ett av de nämnda ramverken ovan kan du definiera en förinställning som säkerställer att allt är konfigurerat direkt. Detta alternativ kan inte användas tillsammans med viteConfig.

Type: vue | svelte | solid | react | preact | stencil
Example:

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

viteConfig

Definiera din egen Vite-konfiguration. Du kan antingen skicka in ett anpassat objekt eller importera en befintlig vite.conf.ts-fil om du använder Vite.js för utveckling. Observera att WebdriverIO behåller anpassade Vite-konfigurationer för att konfigurera testmiljön.

Type: string or UserConfig or (env: ConfigEnv) => UserConfig | Promise<UserConfig>
Example:

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

export const {
// ...
runner: ['browser', { viteConfig }],
// or just:
runner: ['browser', { viteConfig: '../vites.config.ts' }],
// or use a function if your vite config contains a lot of plugins
// which you only want to resolve when value is read
runner: ['browser', {
viteConfig: () => ({
// ...
})
}],
// ...
}

headless

Om inställd på true kommer runnern att uppdatera capabilities för att köra tester headless. Som standard är detta aktiverat inom CI-miljöer där en CI-miljövariabel är inställd på '1' eller 'true'.

Type: boolean
Default: false, inställd på true om CI-miljövariabeln är satt

rootDir

Projektets rotmapp.

Type: string
Default: process.cwd()

coverage

WebdriverIO stöder testövervakning genom istanbul. Se Coverage Options för mer detaljer.

Type: object
Default: undefined

Coverage Options

Följande alternativ låter dig konfigurera kodtäckningsrapportering.

enabled

Aktiverar kodtäckningsinsamling.

Type: boolean
Default: false

include

Lista över filer som inkluderas i kodtäckning som glob-mönster.

Type: string[]
Default: [**]

exclude

Lista över filer som exkluderas i kodtäckning som glob-mönster.

Type: string[]
Default:

[
'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 över filändelser som rapporten ska inkludera.

Type: string | string[]
Default: ['.js', '.cjs', '.mjs', '.ts', '.mts', '.cts', '.tsx', '.jsx', '.vue', '.svelte']

reportsDirectory

Katalog att skriva kodtäckningsrapporten till.

Type: string
Default: ./coverage

reporter

Kodtäckningsrapportörer att använda. Se istanbul-dokumentationen för detaljerad lista över alla rapportörer.

Type: string[]
Default: ['text', 'html', 'clover', 'json-summary']

perFile

Kontrollera tröskelvärden per fil. Se lines, functions, branches och statements för de faktiska tröskelvärdena.

Type: boolean
Default: false

clean

Rensa kodtäckningsresultat innan tester körs.

Type: boolean
Default: true

lines

Tröskelvärde för rader.

Type: number
Default: undefined

functions

Tröskelvärde för funktioner.

Type: number
Default: undefined

branches

Tröskelvärde för grenar.

Type: number
Default: undefined

statements

Tröskelvärde för statements.

Type: number
Default: undefined

Limitations

När du använder WebdriverIO browser runner är det viktigt att notera att trådblockerade dialoger som alert eller confirm inte kan användas direkt. Detta beror på att de blockerar webbsidan, vilket innebär att WebdriverIO inte kan fortsätta kommunicera med sidan, vilket gör att exekveringen hänger sig.

I sådana situationer tillhandahåller WebdriverIO standardmockar med standardreturnerade värden för dessa API:er. Detta säkerställer att om användaren av misstag använder synkrona popup-webb-API:er, skulle exekveringen inte hänga sig. Det rekommenderas dock fortfarande att användaren mockar dessa webb-API:er för bättre upplevelse. Läs mer i Mocking.

Examples

Se till att kolla in dokumentationen kring komponenttestning och titta på exempelrepositoriet för exempel som använder dessa och andra ramverk.

Welcome! How can I help?

WebdriverIO AI Copilot