ادعا (Assertion)
تسترانر WDIO دارای یک کتابخانه ادعا داخلی است که به شما امکان میدهد ادعاهای قدرتمندی روی جنبههای مختلف مرورگر یا عناصر درون برنامه (وب) خود انجام دهید. این کتابخانه، عملکرد Jests Matchers را با تطبیقدهندههای اضافی که برای آزمایش e2e بهینهسازی شدهاند، گسترش میدهد، به عنوان مثال:
const $button = await $('button')
await expect($button).toBeDisplayed()
یا
const selectOptions = await $$('form select>option')
// make sure there is at least one option in select
await expect(selectOptions).toHaveChildren({ gte: 1 })
برای لیست کامل، به مستندات API expect مراجعه کنید.
مهاجرت از Chai
Chai و expect-webdriverio میتوانند همزیستی داشته باشند، و با برخی تنظیمات جزئی، انتقال روان به expect-webdriverio امکانپذیر است. اگر به WebdriverIO v6 ارتقا دادهاید، به صورت پیشفرض به تمام ادعاهای expect-webdriverio
دسترسی خواهید داشت. این بدان معناست که به صورت سراسری هر کجا که از expect
استفاده میکنید، یک ادعای expect-webdriverio
را فراخوانی میکنید. البته، مگر اینکه injectGlobals
را روی false
تنظیم کرده باشید یا به صراحت expect
سراسری را برای استفاده از Chai بازنویسی کرده باشید. در این حالت، بدون وارد کردن صریح بسته expect-webdriverio در جایی که به آن نیاز دارید، به هیچ یک از ادعاهای expect-webdriverio دسترسی نخواهید داشت.
این راهنما نمونههایی از نحوه مهاجرت از Chai را نشان میدهد، چه در حالتی که به صورت محلی بازنویسی شده باشد و چه در حالتی که به صورت سراسری بازنویسی شده باشد.
محلی
فرض کنید Chai به صورت صریح در یک فایل وارد شده است، مثلاً:
// 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')
})
})
برای مهاجرت این کد، import مربوط به Chai را حذف کنید و به جای آن از متد جدید ادعای expect-webdriverio یعنی 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
});
});
اگر میخواهید از هر دو Chai و expect-webdriverio در یک فایل استفاده کنید، import مربوط به 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 assertion
})
});
describe('Other element', () => {
it('should not be displayed', async () => {
await expectWDIO($("#element")).not.toBeDisplayed(); // expect-webdriverio assertion
})
})
سراسری
فرض کنید 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 assertion
});
});
describe('Other element', () => {
it('should not be displayed', async () => {
await expectWdio($("#element")).not.toBeDisplayed(); // expect-webdriverio assertion
});
});
برای مهاجرت، به تدریج هر ادعای Chai را به expect-webdriverio منتقل کنید. هنگامی که تمام ادعاهای Chai در سراسر پایه کد جایگزین شدند، هوک "before" را میتوان حذف کرد. یک جستجو و جایگزینی سراسری برای جایگزین کردن تمام نمونههای wdioExpect
با expect
مهاجرت را تکمیل خواهد کرد.