Hoppa till huvudinnehåll

Ramverk

WebdriverIO Runner har inbyggt stöd för Mocha, Jasmine, och Cucumber.js. Du kan också integrera det med tredjepartsramverk från öppen källkod, såsom Serenity/JS.

Integrera WebdriverIO med testramverk

För att integrera WebdriverIO med ett testramverk behöver du ett adapterpaket som finns tillgängligt på NPM. Observera att adapterpaketet måste installeras på samma plats där WebdriverIO är installerat. Så om du har installerat WebdriverIO globalt, se till att installera adapterpaketet globalt också.

Integrering av WebdriverIO med ett testramverk låter dig komma åt WebDriver-instansen med hjälp av den globala browser-variabeln i dina specfiler eller stegdefinitioner. Observera att WebdriverIO också tar hand om att instansiera och avsluta Selenium-sessionen, så du behöver inte göra det själv.

Använda Mocha​

Först, installera adapterpaketet från NPM:

npm install @wdio/mocha-framework --save-dev

Som standard tillhandahåller WebdriverIO ett påståendebibliotek som är inbyggt som du kan börja använda direkt:

describe('my awesome website', () => {
it('should do some assertions', async () => {
await browser.url('https://webdriver.io')
await expect(browser).toHaveTitle('WebdriverIO · Next-gen browser and mobile automation test framework for Node.js | WebdriverIO')
})
})

WebdriverIO stöder Mochas BDD (standard), TDD, och QUnit gränssnitt.

Om du vill skriva dina specifikationer i TDD-stil, ställ in ui-egenskapen i din mochaOpts-konfiguration till tdd. Nu bör dina testfiler skrivas så här:

suite('my awesome website', () => {
test('should do some assertions', async () => {
await browser.url('https://webdriver.io')
await expect(browser).toHaveTitle('WebdriverIO · Next-gen browser and mobile automation test framework for Node.js | WebdriverIO')
})
})

Om du vill definiera andra Mocha-specifika inställningar kan du göra det med mochaOpts-nyckeln i din konfigurationsfil. En lista över alla alternativ finns på Mocha-projektets webbplats.

Obs: WebdriverIO stöder inte den föråldrade användningen av done-callbacks i Mocha:

it('should test something', (done) => {
done() // kastar "done is not a function"
})

Mocha-alternativ​

Följande alternativ kan tillämpas i din wdio.conf.js för att konfigurera din Mocha-miljö. Obs: inte alla alternativ stöds, t.ex. kommer tillämpning av alternativet parallel att orsaka ett fel eftersom WDIO-testrunnern har sitt eget sätt att köra tester parallellt. Du kan skicka dessa ramverksalternativ som argument, t.ex.:

wdio run wdio.conf.ts --mochaOpts.grep "my test" --mochaOpts.bail --no-mochaOpts.checkLeaks

Detta kommer att skicka vidare följande Mocha-alternativ:

{
grep: ['my-test'],
bail: true
checkLeacks: false
}

Följande Mocha-alternativ stöds:

require​

Alternativet require är användbart när du vill lägga till eller utöka vissa grundläggande funktioner (WebdriverIO-ramverksalternativ).

Typ: string|string[]
Standard: []

compilers​

Använd de angivna modulerna för att kompilera filer. Kompilatorerna kommer att inkluderas före krav (WebdriverIO-ramverksalternativ).

Typ: string[]
Standard: []

allowUncaught​

Sprid ohanterade fel.

Typ: boolean
Standard: false

bail​

Avsluta efter första testmisslyckandet.

Typ: boolean
Standard: false

checkLeaks​

Kontrollera efter globala variabelläckor.

Typ: boolean
Standard: false

delay​

Fördröj exekvering av rot-suite.

Typ: boolean
Standard: false

fgrep​

Testfilter given sträng.

Typ: string
Standard: null

forbidOnly​

Tester markerade med only misslyckas i sviten.

Typ: boolean
Standard: false

forbidPending​

Väntande tester misslyckas i sviten.

Typ: boolean
Standard: false

fullTrace​

Full stackspårning vid misslyckande.

Typ: boolean
Standard: false

global​

Variabler som förväntas i globalt scope.

Typ: string[]
Standard: []

grep​

Testfilter given reguljärt uttryck.

Typ: RegExp|string
Standard: null

invert​

Invertera testfiltermatchningar.

Typ: boolean
Standard: false

retries​

Antal gånger att återförsöka misslyckade tester.

Typ: number
Standard: 0

timeout​

Tidsgränsvärde (i ms).

Typ: number
Standard: 30000

Använda Jasmine​

Först, installera adapterpaketet från NPM:

npm install @wdio/jasmine-framework --save-dev

Du kan sedan konfigurera din Jasmine-miljö genom att ställa in en jasmineOpts-egenskap i din konfiguration. En lista över alla alternativ finns på Jasmine-projektets webbplats.

Jasmine-alternativ​

Följande alternativ kan tillämpas i din wdio.conf.js för att konfigurera din Jasmine-miljö med hjälp av jasmineOpts-egenskapen. För mer information om dessa konfigurationsalternativ, kolla Jasmine-dokumentationen. Du kan skicka dessa ramverksalternativ som argument, t.ex.:

wdio run wdio.conf.ts --jasmineOpts.grep "my test" --jasmineOpts.failSpecWithNoExpectations --no-jasmineOpts.random

Detta kommer att skicka vidare följande Mocha-alternativ:

{
grep: ['my-test'],
bail: true
checkLeacks: false
}

Följande Jasmine-alternativ stöds:

defaultTimeoutInterval​

Standard tidsgräns för Jasmine-operationer.

Typ: number
Standard: 60000

helpers​

Array med filsökvägar (och glob-mönster) relativt till spec_dir att inkludera före jasmine specs.

Typ: string[]
Standard: []

requires​

Alternativet requires är användbart när du vill lägga till eller utöka viss grundläggande funktionalitet.

Typ: string[]
Standard: []

random​

Huruvida testexekveringsordningen ska randomiseras.

Typ: boolean
Standard: true

seed​

Frö att använda som bas för randomisering. Null gör att fröet bestäms slumpmässigt vid början av exekveringen.

Typ: Function
Standard: null

failSpecWithNoExpectations​

Huruvida testet ska misslyckas om det inte körde några förväntningar. Som standard rapporteras ett test som körde utan förväntningar som godkänt. Genom att ställa in detta till true rapporteras sådana test som misslyckade.

Typ: boolean
Standard: false

oneFailurePerSpec​

Huruvida test endast ska ha ett förväntningsfel.

Typ: boolean
Standard: false

specFilter​

Funktion att använda för att filtrera tester.

Typ: Function
Standard: (spec) => true

grep​

Kör endast tester som matchar denna sträng eller reguljärt uttryck. (Endast tillämpligt om ingen anpassad specFilter-funktion är inställd)

Typ: string|Regexp
Standard: null

invertGrep​

Om true inverterar det matchande tester och kör endast tester som inte matchar med uttrycket som används i grep. (Endast tillämpligt om ingen anpassad specFilter-funktion är inställd)

Typ: boolean
Standard: false

Använda Cucumber​

Först, installera adapterpaketet från NPM:

npm install @wdio/cucumber-framework --save-dev

Om du vill använda Cucumber, ställ in framework-egenskapen till cucumber genom att lägga till framework: 'cucumber' i konfigurationsfilen.

Alternativ för Cucumber kan anges i konfigurationsfilen med cucumberOpts. Kolla in hela listan med alternativ här.

För att snabbt komma igång med Cucumber, ta en titt på vårt cucumber-boilerplate projekt som kommer med alla stegdefinitioner du behöver för att komma igång, och du kan börja skriva funktionsfiler direkt.

Cucumber-alternativ​

Följande alternativ kan tillämpas i din wdio.conf.js för att konfigurera din Cucumber-miljö med hjälp av cucumberOpts-egenskapen:

Justera alternativ via kommandoraden

cucumberOpts, såsom anpassade tags för filtrering av tester, kan anges via kommandoraden. Detta görs genom att använda formatet cucumberOpts.{optionName}="value".

Till exempel, om du bara vill köra de tester som är taggade med @smoke, kan du använda följande kommando:

# När du bara vill köra tester som har taggen "@smoke"
npx wdio run ./wdio.conf.js --cucumberOpts.tags="@smoke"
npx wdio run ./wdio.conf.js --cucumberOpts.name="some scenario name" --cucumberOpts.failFast

Detta kommando ställer in alternativet tags i cucumberOpts till @smoke, vilket säkerställer att endast tester med denna tagg körs.

backtrace​

Visa full backtrace för fel.

Typ: Boolean
Standard: true

requireModule​

Kräv moduler innan du kräver supportfiler.

Typ: string[]
Standard: []
Exempel:

cucumberOpts: {
requireModule: ['@babel/register']
// eller
requireModule: [
[
'@babel/register',
{
rootMode: 'upward',
ignore: ['node_modules']
}
]
]
}

failFast​

Avbryt körningen vid första fel.

Typ: boolean
Standard: false

name​

Kör endast de scenarier vars namn matchar uttrycket (upprepningsbart).

Typ: RegExp[]
Standard: []

require​

Kräv filer som innehåller dina stegdefinitioner innan du kör funktioner. Du kan också ange en glob för dina stegdefinitioner.

Typ: string[]
Standard: [] Exempel:

cucumberOpts: {
require: [path.join(__dirname, 'step-definitions', 'my-steps.js')]
}

import​

Sökvägar till var din supportkod finns, för ESM.

Typ: String[]
Standard: [] Exempel:

cucumberOpts: {
import: [path.join(__dirname, 'step-definitions', 'my-steps.js')]
}

strict​

Misslyckas om det finns några odefinierade eller väntande steg.

Typ: boolean
Standard: false

tags​

Kör endast de funktioner eller scenarier med taggar som matchar uttrycket. Se Cucumber-dokumentationen för mer detaljer.

Typ: String
Standard: ``

timeout​

Tidsgräns i millisekunder för stegdefinitioner.

Typ: Number
Standard: 30000

retry​

Ange antalet gånger att återförsöka misslyckade testfall.

Typ: Number
Standard: 0

retryTagFilter​

Återförsök endast funktioner eller scenarier med taggar som matchar uttrycket (upprepningsbart). Detta alternativ kräver att '--retry' anges.

Typ: RegExp

language​

Standardspråk för dina funktionsfiler.

Typ: String
Standard: en

order​

Kör tester i definierad / slumpmässig ordning.

Typ: String
Standard: defined

format​

Namn och utdatafilsökväg för formatterare att använda. WebdriverIO stöder främst endast de Formatterare som skriver utdata till en fil.

Typ: string[]

formatOptions​

Alternativ som ska tillhandahållas till formatterare.

Typ: object

tagsInTitle​

Lägg till cucumber-taggar till funktions- eller scenarionamn.

Typ: Boolean
Standard: false

Observera att detta är ett @wdio/cucumber-framework-specifikt alternativ och inte känns igen av cucumber-js själv

ignoreUndefinedDefinitions​

Behandla odefinierade definitioner som varningar.

Typ: Boolean
Standard: false

Observera att detta är ett @wdio/cucumber-framework-specifikt alternativ och inte känns igen av cucumber-js själv

failAmbiguousDefinitions​

Behandla tvetydiga definitioner som fel.

Typ: Boolean
Standard: false

Observera att detta är ett @wdio/cucumber-framework-specifikt alternativ och inte känns igen av cucumber-js själv

tagExpression​

Kör endast de funktioner eller scenarier med taggar som matchar uttrycket. Se Cucumber-dokumentationen för mer detaljer.

Typ: String
Standard: ``

Observera att detta alternativ kommer att föråldras i framtiden. Använd tags-konfigurationsegenskapen istället

profile​

Ange profilen som ska användas.

Typ: string[]
Standard: []

Vänligen observera att endast specifika värden (worldParameters, name, retryTagFilter) stöds inom profiler, eftersom cucumberOpts har företräde. Se dessutom till att när du använder en profil, de nämnda värdena inte deklareras inom cucumberOpts.

Hoppa över tester i cucumber​

Observera att om du vill hoppa över ett test med hjälp av vanliga cucumber-testfiltreringsfunktioner som finns tillgängliga i cucumberOpts, kommer du att göra det för alla webbläsare och enheter som konfigurerats i funktionerna. För att kunna hoppa över scenarier endast för specifika funktionskombinationer utan att ha en session startad om det inte är nödvändigt, tillhandahåller webdriverio följande specifika taggsyntax för cucumber:

@skip([condition])

där condition är en valfri kombination av funktionsegenskaper med deras värden som när alla matchas med orsak kommer det taggade scenariot eller funktionen att hoppas över. Självklart kan du lägga till flera taggar till scenarier och funktioner för att hoppa över tester under flera olika förhållanden.

Du kan också använda '@skip'-anteckningen för att hoppa över tester utan att ändra `tagExpression'. I detta fall kommer de hoppade testerna att visas i testrapporten.

Här har du några exempel på denna syntax:

  • @skip eller @skip(): kommer alltid att hoppa över det taggade objektet
  • @skip(browserName="chrome"): testet kommer inte att köras mot chrome-webbläsare.
  • @skip(browserName="firefox";platformName="linux"): kommer att hoppa över testet i firefox över linux-körningar.
  • @skip(browserName=["chrome","firefox"]): taggade objekt kommer att hoppas över för både chrome- och firefox-webbläsare.
  • @skip(browserName=/i.*explorer/): funktioner med webbläsare som matchar det reguljära uttrycket kommer att hoppas över (som iexplorer, internet explorer, internet-explorer, ...).

Importera stegdefinitionshjälpare​

För att använda stegdefinitionshjälpare som Given, When eller Then eller hooks, måste du importera dem från @cucumber/cucumber, t.ex. så här:

import { Given, When, Then } from '@cucumber/cucumber'

Nu, om du redan använder Cucumber för andra typer av tester som inte är relaterade till WebdriverIO för vilka du använder en specifik version, måste du importera dessa hjälpare i dina e2e-tester från WebdriverIO Cucumber-paketet, t.ex.:

import { Given, When, Then, world, context } from '@wdio/cucumber-framework'

Detta säkerställer att du använder rätt hjälpare inom WebdriverIO-ramverket och låter dig använda en oberoende Cucumber-version för andra typer av testning.

Publicera rapport​

Cucumber tillhandahåller en funktion för att publicera dina testrapporter till https://reports.cucumber.io/, vilket kan styras antingen genom att ställa in flaggan publish i cucumberOpts eller genom att konfigurera miljövariabeln CUCUMBER_PUBLISH_TOKEN. När du använder WebdriverIO för testexekvering finns det dock en begränsning med denna metod. Den uppdaterar rapporterna separat för varje funktionsfil, vilket gör det svårt att se en samlad rapport.

För att övervinna denna begränsning har vi introducerat en löftesbaserad metod som kallas publishCucumberReport inom @wdio/cucumber-framework. Denna metod bör anropas i onComplete-hooken, vilket är den optimala platsen att anropa den. publishCucumberReport kräver inmatning av rapportkatalogen där cucumber-meddelanderapporter lagras.

Du kan generera cucumber message-rapporter genom att konfigurera alternativet format i dina cucumberOpts. Det rekommenderas starkt att tillhandahålla ett dynamiskt filnamn inom cucumber message-formatalternativet för att förhindra överskrivning av rapporter och säkerställa att varje testkörning registreras korrekt.

Innan du använder denna funktion, se till att ställa in följande miljövariabler:

  • CUCUMBER_PUBLISH_REPORT_URL: URL:en där du vill publicera Cucumber-rapporten. Om den inte tillhandahålls kommer standard-URL:en 'https://messages.cucumber.io/api/reports' att användas.
  • CUCUMBER_PUBLISH_REPORT_TOKEN: Auktoriseringstoken som krävs för att publicera rapporten. Om denna token inte är inställd kommer funktionen att avslutas utan att publicera rapporten.

Här är ett exempel på de nödvändiga konfigurationerna och kodexemplen för implementering:

import { v4 as uuidv4 } from 'uuid'
import { publishCucumberReport } from '@wdio/cucumber-framework';

export const config = {
// ... Andra konfigurationsalternativ
cucumberOpts: {
// ... Cucumber-alternativkonfiguration
format: [
['message', `./reports/${uuidv4()}.ndjson`],
['json', './reports/test-report.json']
]
},
async onComplete() {
await publishCucumberReport('./reports');
}
}

Observera att ./reports/ är katalogen där cucumber message-rapporter kommer att lagras.

Använda Serenity/JS​

Serenity/JS är ett ramverk med öppen källkod utformat för att göra acceptans- och regressionstestning av komplexa programvarusystem snabbare, mer samarbetsinriktad och lättare att skala.

För WebdriverIO-testsviter erbjuder Serenity/JS:

Serenity BDD Rapportexempel

Installera Serenity/JS​

För att lägga till Serenity/JS till ett befintligt WebdriverIO-projekt, installera följande Serenity/JS-moduler från NPM:

npm install @serenity-js/{core,web,webdriverio,assertions,console-reporter,serenity-bdd} --save-dev

Lär dig mer om Serenity/JS-moduler:

Konfigurera Serenity/JS​

För att aktivera integration med Serenity/JS, konfigurera WebdriverIO enligt följande:

wdio.conf.ts
import { WebdriverIOConfig } from '@serenity-js/webdriverio';

export const config: WebdriverIOConfig = {

// Tala om för WebdriverIO att använda Serenity/JS ramverk
framework: '@serenity-js/webdriverio',

// Serenity/JS konfiguration
serenity: {
// Konfigurera Serenity/JS att använda lämplig adapter för din testrunner
runner: 'cucumber',
// runner: 'mocha',
// runner: 'jasmine',

// Registrera Serenity/JS rapporteringstjänster, även kallade "stage crew"
crew: [
// Valfritt, skriv ut testexekveringsresultat till standardutdata
'@serenity-js/console-reporter',

// Valfritt, producera Serenity BDD-rapporter och levande dokumentation (HTML)
'@serenity-js/serenity-bdd',
[ '@serenity-js/core:ArtifactArchiver', { outputDirectory: 'target/site/serenity' } ],

// Valfritt, ta automatiskt skärmdumpar vid interaktionsfel
[ '@serenity-js/web:Photographer', { strategy: 'TakePhotosOfFailures' } ],
]
},

// Konfigurera din Cucumber-runner
cucumberOpts: {
// se Cucumber-konfigurationsalternativ nedan
},


// ... eller Jasmine-runner
jasmineOpts: {
// se Jasmine-konfigurationsalternativ nedan
},

// ... eller Mocha-runner
mochaOpts: {
// se Mocha-konfigurationsalternativ nedan
},

runner: 'local',

// Annan WebdriverIO-konfiguration
};

Lär dig mer om:

Producera Serenity BDD-rapporter och levande dokumentation​

Serenity BDD-rapporter och levande dokumentation genereras av Serenity BDD CLI, ett Java-program som laddas ner och hanteras av @serenity-js/serenity-bdd-modulen.

För att producera Serenity BDD-rapporter måste din testsvit:

  • ladda ner Serenity BDD CLI, genom att anropa serenity-bdd update som cachar CLI jar lokalt
  • producera mellanliggande Serenity BDD .json-rapporter, genom att registrera SerenityBDDReporter enligt konfigurationsinstruktionerna
  • anropa Serenity BDD CLI när du vill producera rapporten, genom att anropa serenity-bdd run

Mönstret som används av alla Serenity/JS Project Templates förlitar sig på att använda:

  • ett postinstall NPM-script för att ladda ner Serenity BDD CLI
  • npm-failsafe för att köra rapporteringsprocessen även om testsviten själv har misslyckats (vilket är precis när du behöver testrapporter som mest...).
  • rimraf som en bekvämlighetsmetod för att ta bort testrapporter som lämnats kvar från föregående körning
package.json
{
"scripts": {
"postinstall": "serenity-bdd update",
"clean": "rimraf target",
"test": "failsafe clean test:execute test:report",
"test:execute": "wdio wdio.conf.ts",
"test:report": "serenity-bdd run"
}
}

För att lära dig mer om SerenityBDDReporter, se:

Använda Serenity/JS Screenplay Pattern API:er​

Screenplay Pattern är en innovativ, användarcentrerad strategi för att skriva högkvalitativa automatiserade acceptanstester. Det styr dig mot en effektiv användning av abstraktionslager, hjälper dina testscenarier att fånga affärsjargongen i din domän, och uppmuntrar till goda test- och mjukvaruutvecklingsvanor i ditt team.

Som standard, när du registrerar @serenity-js/webdriverio som ditt WebdriverIO framework, konfigurerar Serenity/JS en standardcast av actors, där varje skådespelare kan:

Detta bör vara tillräckligt för att hjälpa dig komma igång med att introducera testscenarier som följer Screenplay Pattern även till en befintlig testsvit, till exempel:

specs/example.spec.ts
import { actorCalled } from '@serenity-js/core'
import { Navigate, Page } from '@serenity-js/web'
import { Ensure, equals } from '@serenity-js/assertions'

describe('My awesome website', () => {
it('can have test scenarios that follow the Screenplay Pattern', async () => {
await actorCalled('Alice').attemptsTo(
Navigate.to(`https://webdriver.io`),
Ensure.that(
Page.current().title(),
equals(`WebdriverIO · Next-gen browser and mobile automation test framework for Node.js | WebdriverIO`)
),
)
})

it('can have non-Screenplay scenarios too', async () => {
await browser.url('https://webdriver.io')
await expect(browser)
.toHaveTitle('WebdriverIO · Next-gen browser and mobile automation test framework for Node.js | WebdriverIO')
})
})

För att lära dig mer om Screenplay Pattern, kolla in:

Welcome! How can I help?

WebdriverIO AI Copilot