توقع
عند كتابة الاختبارات، غالبًا ما تحتاج إلى التحقق من أن القيم تلبي شروطًا معينة. يوفر لك expect
الوصول إلى عدد من "المطابقات" التي تتيح لك التحقق من أشياء مختلفة على كائن browser
أو element
أو mock
.
الخيارات الافتراضية
خيارات الافتراضية أدناه مرتبطة بخيارات waitforTimeout
و waitforInterval
المحددة في التكوين.
قم بتعيين الخيارات أدناه فقط إذا كنت ترغب في الانتظار لمهلات محددة لتأكيداتك.
{
wait: 2000, // ميلي ثانية للانتظار حتى ينجح التوقع
interval: 100, // الفاصل الزمني بين المحاولات
}
إذا كنت ترغب في اختيار مهل زمنية وفترات مختلفة، فقم بتعيين هذه الخيارات على النحو التالي:
// wdio.conf.js
import { setOptions } from 'expect-webdriverio'
export const config = {
// ...
before () {
setOptions({ wait: 5000 })
},
// ...
}
خيارات المطابقة
يمكن لكل مطابقة أن تأخذ عدة خيارات تسمح لك بتعديل التأكيد:
خيارات الأمر
الاسم | النوع | التفاصيل |
---|---|---|
wait | number | الوقت بالميلي ثانية للانتظار حتى ينجح التوقع. الافتراضي: 3000 |
interval | number | الفاصل الزمني بين المحاولات. الافتراضي: 100 |
beforeAssertion | function | دالة يتم استدعاؤها قبل إجراء التأكيد |
afterAssertion | function | دالة يتم استدعاؤها بعد إجراء التأكيد تحتوي على نتائج التأكيد |
message | string | رسالة المستخدم لإضافتها قبل خطأ التأكيد |
خيارات النص
يمكن تطبيق هذا الخيار بالإضافة إلى خيارات الأمر عند التأكد من النصوص.
الاسم | النوع | التفاصيل |
---|---|---|
ignoreCase | boolean | تطبيق toLowerCase على كل من القيم الفعلية والمتوقعة |
trim | boolean | تطبيق trim على القيمة الفعلية |
replace | Replacer | Replacer[] | استبدال أجزاء من القيمة الفعلية التي تطابق النص/التعبير النمطي. يمكن أن يكون المستبدل نصًا أو دالة. |
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"]
مطابقات المتصفح
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'))
مطابقات العنصر
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 })
toBeClickable
يتحقق مما إذا كان من الممكن النقر على عنصر عن طريق استدعاء isClickable
على العنصر.
الاستخدام
const elem = await $('#elem')
await expect(elem).toBeClickable()
toBeDisabled
يتحقق مما إذا كان العنصر معطلاً عن طريق استدعاء isEnabled
على العنصر.
الاستخدام
const elem = await $('#elem')
await expect(elem).toBeDisabled()
// same as
await expect(elem).not.toBeEnabled()
toBeEnabled
يتحقق مما إذا كان العنصر ممكنًا عن طريق استدعاء isEnabled
على العنصر.
الاستخدام
const elem = await $('#elem')
await expect(elem).toBeEnabled()
// same as
await expect(elem).not.toBeDisabled()
toBeSelected
يتحقق مما إذا كان العنصر ممكنًا عن طريق استدعاء isSelected
على العنصر.
الاستخدام
const elem = await $('#elem')
await expect(elem).toBeSelected()
toBeChecked
نفس toBeSelected
.
الاستخدام
const elem = await $('#elem')
await expect(elem).toBeChecked()
toHaveComputedLabel
يتحقق مما إذا كان العنصر له تسمية WAI-ARIA محسوبة محددة. يمكن أيضًا استدعاؤه بمصفوفة كوسيط في حالة وجود تسميات مختلفة للعنصر.
الاستخدام
await browser.url('https://webdriver.io/')
const elem = await $('a[href="https://github.com/webdriverio/webdriverio"]')
await expect(elem).toHaveComputedLabel('GitHub repository')
await expect(elem).toHaveComputedLabel(expect.stringContaining('repository'))
الاستخدام
await browser.url('https://webdriver.io/')
const elem = await $('a[href="https://github.com/webdriverio/webdriverio"]')
await expect(elem).toHaveComputedLabel(['GitHub repository', 'Private repository'])
await expect(elem).toHaveComputedLabel([expect.stringContaining('GitHub'), expect.stringContaining('Private')])