انتظار
هنگام نوشتن تستها، اغلب نیاز دارید که مقادیر را با شرایط خاصی بررسی کنید. expect
به شما امکان دسترسی به تعدادی "matcher" را میدهد که به شما امکان میدهد چیزهای مختلف را روی browser
، یک element
یا شیء mock
اعتبارسنجی کنید.
گزینههای پیشفرض
این گزینههای پیشفرض در زیر به گزینههای waitforTimeout
و waitforInterval
که در تنظیمات قرار داده شدهاند متصل هستند.
فقط در صورتی که میخواهید برای تاییدات خود زمان انتظار خاصی را تنظیم کنید، گزینههای زیر را تنظیم کنید.
{
wait: 2000, // ms to wait for expectation to succeed
interval: 100, // interval between attempts
}
اگر میخواهید زمانهای انتظار و فواصل متفاوتی را انتخاب کنید، این گزینهها را به این شکل تنظیم کنید:
// wdio.conf.js
import { setOptions } from 'expect-webdriverio'
export const config = {
// ...
before () {
setOptions({ wait: 5000 })
},
// ...
}
گزینههای Matcher
هر matcher میتواند چندین گزینه داشته باشد که به شما امکان میدهد تایید را تغییر دهید:
گزینههای دستور
نام | نوع | جزئیات |
---|---|---|
wait | number | زمان به میلیثانیه برای انتظار برای موفقیت انتظار. پیشفرض: 3000 |
interval | number | فاصله بین تلاشها. پیشفرض: 100 |
beforeAssertion | function | تابعی که قبل از انجام تایید فراخوانی میشود |
afterAssertion | function | تابعی که پس از انجام تایید فراخوانی میشود و شامل نتایج تایید است |
message | string | پیام کاربر برای اضافه کردن قبل از خطای تایید |
گزینههای رشته
این گزینه علاوه بر گزینههای دستور هنگامی که رشتهها تایید میشوند میتواند استفاده شود.
نام | نوع | جزئیات |
---|---|---|
ignoreCase | boolean | اعمال toLowerCase به هر دو مقدار واقعی و مورد انتظار |
trim | boolean | اعمال trim به مقدار واقعی |
replace | Replacer | Replacer[] | جایگزینی بخشهایی از مقدار واقعی که با رشته/RegExp مطابقت میکنند. جایگزین میتواند یک رشته یا یک تابع باشد. |
containing | boolean | انتظار میرود مقدار واقعی شامل مقدار مورد انتظار باشد، در غیر این صورت برابری دقیق. |
asString | boolean | ممکن است برای اجبار به تبدیل مقدار خاصیت به رشته مفید باشد |
atStart | boolean | انتظار میرود مقدار واقعی با مقدار مورد انتظار شروع شود |
atEnd | boolean | انتظار میرود مقدار واقعی با مقدار مورد انتظار پایان یابد |
atIndex | number | انتظار میرود مقدار واقعی در شاخص معین دارای مقدار مورد انتظار باشد |
گزینههای عددی
این گزینه میتواند علاوه بر گزینههای دستور هنگامی که اعداد تایید میشوند اعمال شود.
نام | نوع | جزئیات |
---|---|---|
eq | number | برابر |
lte | number | کمتر یا مساوی |
gte | number | بزرگتر یا مساوی |
مدیریت موجودیتهای HTML
یک موجودیت HTML یک قطعه متن ("رشته") است که با یک علامت و (&) شروع میشود و با نقطه ویرگول (;) پایان مییابد. موجودیتها اغلب برای نمایش کاراکترهای رزرو شده (که در غیر این صورت به عنوان کد HTML تفسیر میشوند) و کاراکترهای نامرئی (مانند فضاهای بدون شکست، مانند
) استفاده میشوند.
برای یافتن یا تعامل با چنین عنصری از معادل یونیکد موجودیت استفاده کنید. به عنوان مثال:
<div data="Some Value">Some Text</div>
const myElem = await $('div[data="Some\u00a0Value"]')
await expect(myElem).toHaveAttribute('data', 'div[Some\u00a0Value')
await expect(myElem).toHaveText('Some\u00a0Text')
میتوانید تمام مراجع یونیکد را در مشخصات HTML پیدا کنید.
نکته: یونیکد به حروف بزرگ و کوچک حساس نیست، بنابراین هر دو \u00a0
و \u00A0
کار میکنند. برای یافتن عنصر در بازرسی مرورگر، u
را از یونیکد حذف کنید، مثلاً: div[data="Some\00a0Value"]
Matchers مرورگر
toHaveUrl
بررسی میکند که آیا مرورگر در یک صفحه خاص است.
استفاده
await browser.url('https://webdriver.io/')
await expect(browser).toHaveUrl('https://webdriver.io')
استفاده
await browser.url('https://webdriver.io/')
await expect(browser).toHaveUrl(expect.stringContaining('webdriver'))
toHaveTitle
بررسی میکند که آیا وبسایت دارای عنوان خاصی است.
استفاده
await browser.url('https://webdriver.io/')
await expect(browser).toHaveTitle('WebdriverIO · Next-gen browser and mobile automation test framework for Node.js')
await expect(browser).toHaveTitle(expect.stringContaining('WebdriverIO'))
toHaveClipboardText
بررسی میکند که آیا مرورگر متن خاصی در کلیپبورد خود ذخیره کرده است.
استفاده
import { Key } from 'webdriverio'
await browser.keys([Key.Ctrl, 'a'])
await browser.keys([Key.Ctrl, 'c'])
await expect(browser).toHaveClipboardText('some clipboard text')
await expect(browser).toHaveClipboardText(expect.stringContaining('clipboard text'))
Matchers عنصر
toBeDisplayed
تابع isDisplayed
را روی عنصر داده شده فراخوانی میکند.
استفاده
const elem = await $('#someElem')
await expect(elem).toBeDisplayed()
toExist
تابع isExisting
را روی عنصر داده شده فراخوانی میکند.
استفاده
const elem = await $('#someElem')
await expect(elem).toExist()
toBePresent
مشابه با toExist
.
استفاده
const elem = await $('#someElem')
await expect(elem).toBePresent()
toBeExisting
مشابه با toExist
.
استفاده
const elem = await $('#someElem')
await expect(elem).toBeExisting()
toBeFocused
بررسی میکند که آیا عنصر فوکوس دارد. این تایید فقط در بستر وب کار میکند.
استفاده
const elem = await $('#someElem')
await expect(elem).toBeFocused()
toHaveAttribute
بررسی میکند که آیا یک عنصر دارای یک صفت خاص با مقدار مشخص است.
استفاده
const myInput = await $('input')
await expect(myInput).toHaveAttribute('class', 'form-control')
await expect(myInput).toHaveAttribute('class', expect.stringContaining('control'))
toHaveAttr
مشابه با toHaveAttribute
.
استفاده
const myInput = await $('input')
await expect(myInput).toHaveAttr('class', 'form-control')
await expect(myInput).toHaveAttr('class', expect.stringContaining('control'))
toHaveElementClass
بررسی میکند که آیا یک عنصر دارای یک نام کلاس واحد است. میتواند همچنین با یک آرایه به عنوان پارامتر فراخوانی شود وقتی عنصر میتواند چندین نام کلاس داشته باشد.
استفاده
const myInput = await $('input')
await expect(myInput).toHaveElementClass('form-control', { message: 'Not a form control!' })
await expect(myInput).toHaveElementClass(['form-control' , 'w-full'], { message: 'not full width' })
await expect(myInput).toHaveElementClass(expect.stringContaining('form'), { message: 'Not a form control!' })
toHaveElementProperty
بررسی میکند که آیا یک عنصر دارای یک خاصیت خاص است.
استفاده
const elem = await $('#elem')
await expect(elem).toHaveElementProperty('height', 23)
await expect(elem).not.toHaveElementProperty('height', 0)
toHaveValue
بررسی میکند که آیا یک عنصر ورودی دارای یک مقدار خاص است.
استفاده
const myInput = await $('input')
await expect(myInput).toHaveValue('admin-user', { ignoreCase: true })
await expect(myInput).toHaveValue(expect.stringContaining('user'), { ignoreCase: true })