توقع
عند كتابة الاختبارات، غالبًا ما تحتاج إلى التحقق من أن القيم تلبي شروطًا معينة. يوفر لك 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')])
toHaveComputedRole
يتحقق مما إذا كان العنصر له دور WAI-ARIA محسوب محدد. يمكن أيضًا استدعاؤه بمصفوفة كوسيط في حالة وجود تسميات مختلفة للعنصر.
الاستخدام
await browser.url('https://webdriver.io/')
const elem = await $('[aria-label="Skip to main content"]')
await expect(elem).toHaveComputedRole('region')
await expect(elem).toHaveComputedRole(expect.stringContaining('ion'))
الاستخدام
await browser.url('https://webdriver.io/')
const elem = await $('[aria-label="Skip to main content"]')
await expect(elem).toHaveComputedRole(['region', 'section'])
await expect(elem).toHaveComputedRole([expect.stringContaining('reg'), expect.stringContaining('sec')])
toHaveHref
يتحقق مما إذا كان عنصر الرابط له هدف رابط محدد.
الاستخدام
const link = await $('a')
await expect(link).toHaveHref('https://webdriver.io')
await expect(link).toHaveHref(expect.stringContaining('webdriver.io'))
toHaveLink
نفس toHaveHref.
الاستخدام
const link = await $('a')
await expect(link).toHaveLink('https://webdriver.io')
await expect(link).toHaveLink(expect.stringContaining('webdriver.io'))
toHaveId
يتحقق مما إذا كان للعنصر سمة id محددة.
الاستخدام
const elem = await $('#elem')
await expect(elem).toHaveId('elem')
toHaveText
يتحقق مما إذا كان للعنصر نص محدد. يمكن أيضًا استدعاؤه بمصفوفة كوسيط في حالة وجود نصوص مختلفة للعنصر.
الاستخدام
await browser.url('https://webdriver.io/')
const elem = await $('.container')
await expect(elem).toHaveText('Next-gen browser and mobile automation test framework for Node.js')
await expect(elem).toHaveText(expect.stringContaining('test framework for Node.js'))
await expect(elem).toHaveText(['Next-gen browser and mobile automation test framework for Node.js', 'Get Started'])
await expect(elem).toHaveText([expect.stringContaining('test framework for Node.js'), expect.stringContaining('Started')])
في حالة وجود قائمة من العناصر في الـ div أدناه:
<ul>
<li>Coffee</li>
<li>Tea</li>
<li>Milk</li>
</ul>
يمكنك التأكد منها باستخدام مصفوفة:
const elem = await $$('ul > li')
await expect(elem).toHaveText(['Coffee', 'Tea', 'Milk'])
toHaveHTML
يتحقق مما إذا كان للعنصر نص محدد. يمكن أيضًا استدعاؤه بمصفوفة كوسيط في حالة وجود نصوص مختلفة للعنصر.
الاستخدام
await browser.url('https://webdriver.io/')
const elem = await $('.hero__subtitle')
await expect(elem).toHaveHTML('<p class="hero__subtitle">Next-gen browser and mobile automation test framework for Node.js</p>')
await expect(elem).toHaveHTML(expect.stringContaining('Next-gen browser and mobile automation test framework for Node.js'))
await expect(elem).toHaveHTML('Next-gen browser and mobile automation test framework for Node.js', { includeSelectorTag: false })
الاستخدام
await browser.url('https://webdriver.io/')
const elem = await $('.hero__subtitle')
await expect(elem).toHaveHTML(['Next-gen browser and mobile automation test framework for Node.js', 'Get Started'], { includeSelectorTag: false })
await expect(elem).toHaveHTML([expect.stringContaining('automation test framework for Node.js'), expect.stringContaining('Started')], { includeSelectorTag: false })