گزینشگر ها (selectors)
پروتکل WebDriver چندین استراتژی گزینشگر برای درخواست یک عنصر فراهم می کند. WebdriverIO آنها را برای ساده نگه داشتن انتخاب عناصر ساده می کند. لطفاً توجه داشته باشید که با وجود اینکه دستور درخواست عناصر $
و $$
نامیده می شوند، آنها هیچ ارتباطی با jQuery یا موتور Sizzle Selector ندارند.
در حالی که انتخابکنندههای مختلف بسیار زیادی وجود دارد، تنها تعداد کمی از آنها راه مستحکم و انعطاف پذیری را برای یافتن عنصر مناسب ارائه میدهند. به عنوان مثال، دکمه زیر را در نظر بگیرید:
<button
id="main"
class="btn btn-large"
name="submission"
role="button"
data-testid="submit"
>
Submit
</button>
ما انجام دهید و انجام ندهید های زیر را برای انتخاب گزینشگر توصیه می کنیم:
گزینشگر | پیشنهاد | یادداشتها |
---|---|---|
$('button') | 🚨 هرگز | بدترین - بیش از حد عمومی، بدون زمینه. |
$('.btn.btn-large') | 🚨 هرگز | بد. وابسته به ظاهر. به شدت در معرض تغییر. |
$('#main') | ⚠️ با احتیاط | بهتر. اما همچنان با استایل یا شنوندگان رویداد JS همراه است. |
$(() => document.queryElement('button')) | ⚠️ با احتیاط | درخواست مؤثر، اما پیچیده برای نوشتن. |
$('button[name="submission"]') | ⚠️ با احتیاط | همراه با ویژگی name که دارای معنای HTML است. |
$('button[data-testid="submit"]') | ✅خوب | به ویژگی اضافی نیاز دارد که به a11y متصل نیست. |
$('aria/Submit') or $('button=Submit') | ✅ همیشه | بهترین. شبیه نحوه تعامل کاربر با صفحه است. It is recommended to use your frontend's translation files so your tests never fail when the translations are updated |
انتخابگر درخواست CSS
اگر غیر از این مشخص نشده باشد، WebdriverIO عناصر را با استفاده از الگوی انتخابگر CSS درخواست می کند، به عنوان مثال:
loading...
متن لینک
برای به دست آوردن یک عنصر انکر با یک متن خاص در آن، متنی را که با علامت تساوی (=
) شروع می شود درخواست کنید.
برای مثال:
loading...
می توانید این عنصر را با فراخوانی فرمان زیر درخواست کنید:
loading...
متن پیوند جزئی
برای یافتن یک عنصر انکر که متن قابل مشاهده آن تا حدی با مقدار جستجوی شما مطابقت دارد، با استفاده از *=
در جلوی رشته جستجو (به عنوان مثال *=driver
) آن را پرس و جو کنید.
شما می توانید عنصر مثال بالا را همچنین با فراخوانی فرمان زیر درخواست کنید:
loading...
نکته: شما نمیتوانید چند استراتژی انتخابگر را در یک انتخابگر ترکیب کنید. برای رسیدن به یک هدف، از درخواست های چند عنصر زنجیره ای استفاده کنید، به عنوان مثال:
const elem = await $('header h1*=Welcome') // doesn't work!!!
// use instead
const elem = await $('header').$('*=driver')
عنصر با متن خاص
The same technique can be applied to elements as well. Additionally, it is also possible to do a case-insensitive matching using .=
or .*=
within the query.
به عنوان مثال، در اینجا یک درخواست برای عنوان سطح 1 با متن "به صفحه من خوش آمدید" وجود دارد:
loading...
می توانید این عنصر را با فراخوانی فرمان زیر درخواست کنید:
loading...
یا با استفاده از درخواست بخشی از متن:
loading...
همین کار برای id
و نام کلاس
هم کار می کند:
loading...
می توانید این عنصر را با فراخوانی فرمان زیر درخواست کنید:
loading...
نکته: شما نمیتوانید چند استراتژی انتخابگر را در یک انتخابگر ترکیب کنید. برای رسیدن به یک هدف، از درخواست های چند عنصر زنجیره ای استفاده کنید، به عنوان مثال:
const elem = await $('header h1*=Welcome') // doesn't work!!!
// use instead
const elem = await $('header').$('h1*=Welcome')
نام برچسب
برای پرس و جو از یک عنصر با نام تگ خاص، از <tag>
یا <tag/>
استفاده کنید.
loading...
می توانید این عنصر را با فراخوانی فرمان زیر درخواست کنید:
loading...