Перейти до основного вмісту

Твердження

Тестовий запускач WDIO містить вбудовану бібліотеку тверджень, яка дозволяє вам робити потужні твердження щодо різних аспектів браузера або елементів у вашому (веб) додатку. Вона розширює функціональність Засобів зіставлення Jest додатковими, оптимізованими для е2е тестування матчерами, наприклад:

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

або

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

// переконайтесь, що в селекторі є принаймні один варіант
await expect(selectOptions).toHaveChildren({ gte: 1 })

Повний список дивіться у документації API expect.

М'які твердження

WebdriverIO за замовчуванням включає м'які твердження з expect-webdriver(5.2.0). М'які твердження дозволяють вашим тестам продовжувати виконання навіть коли твердження не виконується. Всі помилки збираються та повідомляються в кінці тесту.

Використання

// Ці твердження не викликатимуть помилку одразу при невдачі
await expect.soft(await $('h1').getText()).toEqual('Basketball Shoes');
await expect.soft(await $('#price').getText()).toMatch(/\d+/);

// Звичайні твердження все одно викликають помилку одразу
await expect(await $('.add-to-cart').isClickable()).toBe(true);

Міграція з Chai

Chai та expect-webdriverio можуть співіснувати, і з деякими незначними налаштуваннями можна досягти плавного переходу на expect-webdriverio. Якщо ви оновилися до WebdriverIO v6, тоді за замовчуванням ви матимете доступ до всіх тверджень з expect-webdriverio одразу. Це означає, що глобально, де б ви не використовували expect, ви викликатимете твердження expect-webdriverio. Це відбувається, якщо ви не встановили injectGlobals як false або явно не перевизначили глобальний expect для використання Chai. У такому випадку ви не матимете доступу до жодних тверджень expect-webdriverio без явного імпорту пакету expect-webdriverio там, де він вам потрібен.

Цей посібник покаже приклади того, як мігрувати з Chai, якщо його було перевизначено локально, і як мігрувати з Chai, якщо його було перевизначено глобально.

Локально

Припустимо, Chai було явно імпортовано в файл, наприклад:

// myfile.js - початковий код
import { expect as expectChai } from 'chai'

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

Щоб мігрувати цей код, видаліть імпорт Chai і використовуйте новий метод твердження expect-webdriverio toHaveUrl замість нього:

// myfile.js - мігрований код
describe('Homepage', () => {
it('should assert', async () => {
await browser.url('./')
await expect(browser).toHaveUrl('/login') // новий метод API expect-webdriverio https://webdriver.io/docs/api/expect-webdriverio.html#tohaveurl
});
});

Якщо ви хочете використовувати і Chai, і expect-webdriverio в одному файлі, ви зберігаєте імпорт Chai, а expect за замовчуванням буде твердженням expect-webdriverio, наприклад:

// 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
})
});

describe('Other element', () => {
it('should not be displayed', async () => {
await expectWDIO($("#element")).not.toBeDisplayed(); // твердження expect-webdriverio
})
})

Глобально

Припустимо, expect був глобально перевизначений для використання Chai. Щоб використовувати твердження expect-webdriverio, нам потрібно глобально встановити змінну у хуку "before", наприклад:

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

Тепер Chai та expect-webdriverio можуть використовуватися разом. У вашому коді ви використовуватимете твердження Chai та expect-webdriverio таким чином:

// myfile.js
describe('Element', () => {
it('should be displayed', async () => {
const isDisplayed = await $("#element").isDisplayed()
expect(isDisplayed).to.equal(true); // твердження Chai
});
});

describe('Other element', () => {
it('should not be displayed', async () => {
await expectWdio($("#element")).not.toBeDisplayed(); // твердження expect-webdriverio
});
});

Для міграції ви поступово переходите від кожного твердження Chai до expect-webdriverio. Після того, як всі твердження Chai буде замінено по всій кодовій базі, хук "before" можна видалити. Глобальний пошук і заміна всіх екземплярів wdioExpect на expect завершить міграцію.

Welcome! How can I help?

WebdriverIO AI Copilot