Zum Hauptinhalt springen

Runner

Ein Runner in WebdriverIO orchestriert, wie und wo Tests ausgeführt werden, wenn der Testrunner verwendet wird. WebdriverIO unterstützt derzeit zwei verschiedene Arten von Runnern: lokaler Runner und Browser-Runner.

Local Runner​

Der Local Runner initiiert Ihr Framework (z.B. Mocha, Jasmine oder Cucumber) innerhalb eines Worker-Prozesses und führt alle Ihre Testdateien in Ihrer Node.js-Umgebung aus. Jede Testdatei wird in einem separaten Worker-Prozess pro Capability ausgeführt, was maximale Parallelität ermöglicht. Jeder Worker-Prozess verwendet eine einzelne Browser-Instanz und führt daher seine eigene Browser-Sitzung aus, was maximale Isolation ermöglicht.

Da jeder Test in seinem eigenen isolierten Prozess ausgeführt wird, ist es nicht möglich, Daten über Testdateien hinweg zu teilen. Es gibt zwei Möglichkeiten, dies zu umgehen:

Wenn in der wdio.conf.js nichts anderes definiert ist, ist der Local Runner der Standard-Runner in WebdriverIO.

Installation​

Um den Local Runner zu verwenden, können Sie ihn wie folgt installieren:

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

Einrichtung​

Der Local Runner ist der Standard-Runner in WebdriverIO, daher müssen Sie ihn nicht in Ihrer wdio.conf.js definieren. Wenn Sie ihn explizit festlegen möchten, können Sie ihn wie folgt definieren:

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

Browser Runner​

Im Gegensatz zum Local Runner initiiert und führt der Browser Runner das Framework innerhalb des Browsers aus. Dies ermöglicht es Ihnen, Unit-Tests oder Komponententests in einem echten Browser auszuführen, anstatt in einer JSDOM wie bei vielen anderen Test-Frameworks.

Während JSDOM für Testzwecke weit verbreitet ist, ist es letztendlich kein echter Browser, noch können Sie damit mobile Umgebungen emulieren. Mit diesem Runner ermöglicht WebdriverIO Ihnen, Ihre Tests einfach im Browser auszuführen und WebDriver-Befehle zu verwenden, um mit auf der Seite gerenderten Elementen zu interagieren.

Hier ist ein Überblick über die Ausführung von Tests in JSDOM im Vergleich zum WebdriverIO Browser Runner

JSDOMWebdriverIO Browser Runner
1.Führt Ihre Tests in Node.js aus und verwendet eine Reimplementierung von Webstandards, insbesondere der WHATWG DOM und HTML StandardsFührt Ihren Test in einem echten Browser aus und führt den Code in einer Umgebung aus, die Ihre Benutzer verwenden
2.Interaktionen mit Komponenten können nur über JavaScript imitiert werdenSie können die WebdriverIO API verwenden, um mit Elementen über das WebDriver-Protokoll zu interagieren
3.Canvas-Unterstützung erfordert zusätzliche Abhängigkeiten und hat EinschränkungenSie haben Zugriff auf die echte Canvas API
4.JSDOM hat einige Einschränkungen und nicht unterstützte Web-APIsAlle Web-APIs werden unterstützt, da Tests in einem echten Browser laufen
5.Unmöglich, Fehler browserübergreifend zu erkennenUnterstützung für alle Browser einschließlich mobiler Browser
6.Kann Elementpseudozustände nicht testenUnterstützung für Pseudozustände wie :hover oder :active

Dieser Runner verwendet Vite, um Ihren Testcode zu kompilieren und in den Browser zu laden. Er enthält Voreinstellungen für die folgenden Komponenten-Frameworks:

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

Jede Testdatei / Testdateigruppe läuft innerhalb einer einzelnen Seite, was bedeutet, dass zwischen jedem Test die Seite neu geladen wird, um die Isolation zwischen Tests zu gewährleisten.

Installation​

Um den Browser Runner zu verwenden, können Sie ihn wie folgt installieren:

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

Einrichtung​

Um den Browser Runner zu verwenden, müssen Sie eine runner-Eigenschaft in Ihrer wdio.conf.js-Datei definieren, z.B.:

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

Runner-Optionen​

Der Browser Runner ermöglicht folgende Konfigurationen:

preset​

Wenn Sie Komponenten mit einem der oben genannten Frameworks testen, können Sie ein Preset definieren, das sicherstellt, dass alles von Anfang an konfiguriert ist. Diese Option kann nicht zusammen mit viteConfig verwendet werden.

Typ: vue | svelte | solid | react | preact | stencil
Beispiel:

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

viteConfig​

Definieren Sie Ihre eigene Vite-Konfiguration. Sie können entweder ein benutzerdefiniertes Objekt übergeben oder eine bestehende vite.conf.ts-Datei importieren, wenn Sie Vite.js für die Entwicklung verwenden. Beachten Sie, dass WebdriverIO benutzerdefinierte Vite-Konfigurationen beibehält, um die Testumgebung einzurichten.

Typ: string oder UserConfig oder (env: ConfigEnv) => UserConfig | Promise<UserConfig>
Beispiel:

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

export const {
// ...
runner: ['browser', { viteConfig }],
// oder einfach:
runner: ['browser', { viteConfig: '../vites.config.ts' }],
// oder verwenden Sie eine Funktion, wenn Ihre Vite-Konfiguration viele Plugins enthält,
// die Sie nur auflösen möchten, wenn der Wert gelesen wird
runner: ['browser', {
viteConfig: () => ({
// ...
})
}],
// ...
}

headless​

Wenn auf true gesetzt, aktualisiert der Runner die Capabilities, um Tests im Headless-Modus auszuführen. Standardmäßig ist dies in CI-Umgebungen aktiviert, in denen eine CI-Umgebungsvariable auf '1' oder 'true' gesetzt ist.

Typ: boolean
Standard: false, auf true gesetzt, wenn die CI-Umgebungsvariable gesetzt ist

rootDir​

Projektstammverzeichnis.

Typ: string
Standard: process.cwd()

coverage​

WebdriverIO unterstützt die Berichterstattung über Testabdeckung durch istanbul. Weitere Details finden Sie unter Coverage-Optionen.

Typ: object
Standard: undefined

Coverage-Optionen​

Die folgenden Optionen ermöglichen die Konfiguration der Coverage-Berichterstattung.

enabled​

Aktiviert die Coverage-Erfassung.

Typ: boolean
Standard: false

include​

Liste der in die Coverage eingeschlossenen Dateien als Glob-Muster.

Typ: string[]
Standard: [**]

exclude​

Liste der von der Coverage ausgeschlossenen Dateien als Glob-Muster.

Typ: string[]
Standard:

[
'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​

Liste der Dateierweiterungen, die der Bericht enthalten sollte.

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

reportsDirectory​

Verzeichnis, in das der Coverage-Bericht geschrieben werden soll.

Typ: string
Standard: ./coverage

reporter​

Zu verwendende Coverage-Reporter. Siehe istanbul-Dokumentation für eine detaillierte Liste aller Reporter.

Typ: string[]
Standard: ['text', 'html', 'clover', 'json-summary']

perFile​

Überprüft Schwellenwerte pro Datei. Siehe lines, functions, branches und statements für die tatsächlichen Schwellenwerte.

Typ: boolean
Standard: false

clean​

Bereinigt Coverage-Ergebnisse vor dem Ausführen von Tests.

Typ: boolean
Standard: true

lines​

Schwellenwert für Zeilen.

Typ: number
Standard: undefined

functions​

Schwellenwert für Funktionen.

Typ: number
Standard: undefined

branches​

Schwellenwert für Branches.

Typ: number
Standard: undefined

statements​

Schwellenwert für Anweisungen.

Typ: number
Standard: undefined

Einschränkungen​

Bei der Verwendung des WebdriverIO Browser Runners ist es wichtig zu beachten, dass Thread-blockierende Dialoge wie alert oder confirm nicht nativ verwendet werden können. Dies liegt daran, dass sie die Webseite blockieren, was bedeutet, dass WebdriverIO nicht weiter mit der Seite kommunizieren kann, was dazu führt, dass die Ausführung hängen bleibt.

In solchen Situationen stellt WebdriverIO Standard-Mocks mit Standardrückgabewerten für diese APIs bereit. Dies stellt sicher, dass, wenn der Benutzer versehentlich synchrone Popup-Web-APIs verwendet, die Ausführung nicht hängen bleibt. Es wird jedoch empfohlen, dass der Benutzer diese Web-APIs für eine bessere Erfahrung mockt. Lesen Sie mehr unter Mocking.

Beispiele​

Schauen Sie sich unbedingt die Dokumentation zum Komponententesting an und werfen Sie einen Blick in das Beispiel-Repository für Beispiele, die diese und verschiedene andere Frameworks verwenden.

Welcome! How can I help?

WebdriverIO AI Copilot