گزینشگر ها (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') | ✅ همیشه | بهترین. شبیه نحوه تعامل کاربر با صفحه است. |
انتخابگر درخواست CSS
اگر غیر از این مشخص نشده باشد، WebdriverIO عناصر را با استفاده از الگوی انتخابگر CSS درخواست می کند، به عنوان مثال:
loading...
متن لینک
برای به دست آوردن یک عنصر انکر با یک متن خاص در آن، متنی را که با علامت تساوی (=
) شروع می شود درخواست کنید.
برای مثال:
loading...
می توانید این عنصر را با فراخوانی فرمان زیر درخواست کنید:
loading...
متن پیوند جزئی
برای یافتن یک عنصر انکر که متن قابل مشاهده آن تا حدی با مقدار جستجوی شما مطابقت دارد، با استفاده از *=
در جلوی رشته جستجو (به عنوان مثال *=driver
) آن را پرس و جو کنید.
شما می توانید عنصر مثال بالا را همچنین با فراخوانی فرمان زیر درخواست کنید:
loading...
نکته: شما نمیتوانید چند استراتژی انتخابگر را در یک انتخابگر ترکیب کنید. برای رسیدن به یک هدف، از درخواست های چند عنصر زنجیره ای استفاده کنید، به عنوان مثال:
const elem = await $('header h1*=Welcome') // doesn't work!!!
// use instead
const elem = await $('header').$('*=driver')
عنصر با متن خاص
همین تکنیک را می توان برای عناصر نیز به کار برد.
به عنوان مثال، در اینجا یک درخواست برای عنوان سطح 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...
ویژگی نام
برای جستوجوی عناصر با ویژگی نام خاص، میتوانید از یک انتخابگر معمولی CSS3 یا استراتژی نام ارائه شده از JSONWireProtocol با ارسال چیزی مانند [name="some-name"] به عنوان پارامتر انتخابگر استفاده کنید:
loading...
loading...
نکته: این استراتژی انتخابگر منسوخ شده است و فقط در مرورگرهای قدیمی که توسط پروتکل JSONWireProtocol یا با استفاده از Appium اجرا می شوند کار می کند.
xPath
امکان درخواست از عناصر از طریق یک xPath خاص نیز وجود دارد.
انتخابگر xPath دارای قالبی مانند //body/div[6]/div[1]/span[1]
است.
loading...
می توانید پاراگراف دوم را با فرمان زیر درخواست کنید:
loading...
میتوانید از xPath برای پیمایش درخت DOM به بالا و پایین استفاده کنید:
loading...
انتخابگر نام دسترسی پذیری
عناصر را با نام دسترسی پذیری آنها جستجو کنید. نام دسترسی پذیری چیزی است که توسط یک صفحه خوان هنگامی که بر آن عنصر تمرکز میشود، اعلام می شود. مقدار نام دسترسی پذیری می تواند محتوای بصری یا متن پنهان باشد.
شما می توانید در مورد این انتخابگر در پست بلاگ ما بیشتر بخوانید
دریافت توسط aria-label
loading...
loading...
دریافت توسط aria-labelledby
loading...
loading...