Zum Hauptinhalt springen

Assertion

Der WDIO Testrunner verfügt über eine integrierte Assertion-Bibliothek, mit der Sie aussagekräftige Assertionen zu verschiedenen Aspekten des Browsers oder von Elementen in Ihrer (Web-)Anwendung erstellen können. Es erweitert die Funktionalität von Jests Matchers um zusätzliche, für e2e-Tests optimierte Matcher, z.B.:

const $button = await $('button')
await expect($button).toBeDisplayed()

oder

const selectOptions = await $$('form select>option')

// make sure there is at least one option in select
await expect(selectOptions).toHaveChildren({ gte: 1 })

Die vollständige Liste finden Sie im expect-API-Dokument.

Migration von Chai

Chai und Expect-Webdriverio können nebeneinander existieren, und mit einigen geringfügigen Anpassungen kann ein reibungsloser Übergang zu Expect-Webdriverio erreicht werden. Wenn Sie auf WebdriverIO v6 aktualisiert haben, haben Sie standardmäßig Zugriff auf alle Zusicherungen von Expect-WebdriverIO out of the Box. Das bedeutet, dass Sie überall dort, wo Sie erwarten verwenden, eine Expect-Webdriverio Assertion aufrufen würden. Es sei denn, Sie setzen injectGlobals auf false oder haben explizit die globale expect Variable überschrieben. In diesem Fall hätten Sie keinen Zugriff auf „expect-webdriverio“, ohne das Paket explizit dort zu importieren, wo Sie es benötigen.

Dieser Leitfaden zeigt Beispiele für die Migration von Chai, wenn es lokal überschrieben wurde, und für die Migration von Chai, wenn es global überschrieben wurde.

Lokal

Angenommen, Chai wurde explizit in eine Datei importiert, z.B.:

// myfile.js - original code
import { expect as expectChai } from 'chai'

describe('Homepage', () => {
it('should assert', async () => {
await browser.url('./')
expectChai(await browser.getUrl()).to.include('/login')
})
})

Um diesen Code zu migrieren, entfernen Sie den Chai-Import und verwenden Sie stattdessen die neue Expect-Webdriverio-Assertion-Methode toHaveUrl:

// myfile.js - migrated code
describe('Homepage', () => {
it('should assert', async () => {
await browser.url('./')
await expect(browser).toHaveUrl('/login') // new expect-webdriverio API method https://webdriver.io/docs/api/expect-webdriverio.html#tohaveurl
});
});

Wenn Sie sowohl Chai als auch Expect-Webdriverio in derselben Datei verwenden möchten, würden Sie den Chai-Import beibehalten und expect würde standardmäßig die Erwartungs-Webdriverio-Assertion verwenden, z.B.:

// myfile.js
import { expect as expectChai } from 'chai'
import { expect as expectWDIO } from '@wdio/globals'

describe('Element', () => {
it('should be displayed', async () => {
const isDisplayed = await $("#element").isDisplayed()
expectChai(isDisplayed).to.equal(true); // Chai assertion
})
});

describe('Other element', () => {
it('should not be displayed', async () => {
await expectWDIO($("#element")).not.toBeDisplayed(); // expect-webdriverio assertion
})
})

Global

Angenommen erwartet, dass global überschrieben wurde, um Chai zu verwenden. Um Expect-Webdriverio-Assertionen zu verwenden, müssen wir global eine Variable im „Before“-Hook setzen, z.B.:

// wdio.conf.js
before: async () => {
await import('expect-webdriverio');
global.wdioExpect = global.expect;
const chai = await import('chai');
global.expect = chai.expect;
}

Jetzt können Chai und Expect-WebdriverIO nebeneinander verwendet werden. In Ihrem Code würden Sie Chai- und Expect-Webdriverio-Assertionen wie folgt verwenden, z. B.:

// myfile.js
describe('Element', () => {
it('should be displayed', async () => {
const isDisplayed = await $("#element").isDisplayed()
expect(isDisplayed).to.equal(true); // Chai assertion
});
});

describe('Other element', () => {
it('should not be displayed', async () => {
await expectWdio($("#element")).not.toBeDisplayed(); // expect-webdriverio assertion
});
});

Um zu migrieren, würden Sie jede Chai-Assertion langsam zu „expect-webdriverio“ umschreiben. Sobald alle Chai-Assertionen in der gesamten Codebasis ersetzt wurden, kann der "Before"-Hook gelöscht werden. Ein globales Suchen und Ersetzen zum Ersetzen aller Instanzen von wdioExpect bis erwartet wird dann die Migration abschließen.

Welcome! How can I help?

WebdriverIO AI Copilot