انتخابگرها
پروتکل WebDriver چندین استراتژی انتخابگر را برای پرس و جوی یک عنصر فراهم میکند. WebdriverIO آنها را ساده میکند تا انتخاب عناصر ساده باشد. لطفاً توجه داشته باشید که حتی اگر دستور برای پرس و جوی عناصر $
و $$
نامیده میشود، آنها هیچ ارتباطی با jQuery یا Sizzle Selector Engine ندارند.
در حالی که انتخابگرهای مختلفی در دسترس هستند، تنها تعداد کمی از آنها روشی انعطافپذیر برای یافتن عنصر مناسب ارائه میدهند. به عنوان مثال، با توجه به دکمه زیر:
<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') یا $('button=Submit') | ✅ همیشه | بهترین. شبیه به نحوه تعامل کاربر با صفحه است. توصیه میشود از فایلهای ترجمه فرانتاند خود استفاده کنید تا آزمونهای شما هرگز هنگام بهروزرسانی ترجمهها با خطا مواجه نشوند |
انتخابگر پرس و جوی CSS
اگر به گونه دیگری مشخص نشده باشد، WebdriverIO عناصر را با استفاده از الگوی انتخابگر CSS پرس و جو میکند، به عنوان مثال:
loading...
متن لینک
برای دریافت یک عنصر لنگر با متن خاصی در آن، متن را با علامت مساوی (=
) شروع کنید.
به عنوان مثال:
loading...
شما میتوانید این عنصر را با فراخوانی زیر پرس و جو کنید:
loading...
متن لینک جزئی
برای یافتن یک عنصر لنگر که متن قابل مشاهده آن به طور جزئی با مقدار جستجوی شما مطابقت دارد،
آن را با استفاده از *=
در جلوی رشته پرس و جو (مثلاً *=driver
) پرس و جو کنید.
شما میتوانید عنصر را از مثال بالا با فراخوانی زیر نیز پرس و جو کنید:
loading...
نکته: شما نمیتوانید چندین استراتژی انتخابگر را در یک انتخابگر ترکیب کنید. برای رسیدن به همان هدف، از چندین پرس و جوی عنصر زنجیرهای استفاده کنید، مثلاً:
const elem = await $('header h1*=Welcome') // کار نمی کند!!!
// به جای آن از این استفاده کنید
const elem = await $('header').$('*=driver')
عنصر با متن خاص
همین تکنیک را میتوان برای عناصر نیز به کار برد. علاوه بر این، امکان انجام تطبیق بدون توجه به حروف بزرگ و کوچک با استفاده از .=
یا .*=
در پرس و جو نیز وجود دارد.
به عنوان مثال، اینجا یک پرس و جو برای یک عنوان سطح 1 با متن "Welcome to my Page" است:
loading...
شما میتوانید این عنصر را با فراخوانی زیر پرس و جو کنید:
loading...
یا با استفاده از پرس و جوی متن جزئی:
loading...
همین موضوع برای نامهای id
و class
نیز صادق است:
loading...
شما میتوانید این عنصر را با فراخوانی زیر پرس و جو کنید:
loading...
نکته: شما نمیتوانید چندین استراتژی انتخابگر را در یک انتخابگر ترکیب کنید. برای رسیدن به همان هدف، از چندین پرس و جوی عنصر زنجیرهای استفاده کنید، مثلاً:
const elem = await $('header h1*=Welcome') // کار نمیکند!!!
// به جای آن از این استفاده کنید
const elem = await $('header').$('h1*=Welcome')
نام تگ
برای پرس و جوی یک عنصر با نام تگ خاص، از <tag>
یا <tag />
استفاده کنید.
loading...
شما میتوانید این عنصر را با فراخوانی زیر پرس و جو کنید:
loading...
ویژگی نام
برای پرس و جوی عناصر با ویژگی نام خاص، میتوانید از یک انتخابگر CSS3 معمولی یا استراتژی نام ارائه شده از JSONWireProtocol با ارسال چیزی مانند [name="some-name"] به عنوان پارامتر انتخابگر استفاده کنید:
loading...
loading...