گزینشگر ها (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...
دریافت بر اساس محتوا
loading...
loading...
دریافت بر اساس عنوان
loading...
loading...
دریافت با ویژگی alt
loading...
loading...
ویژگی Aria - Role
برای جست و جوی عناصر بر اساس ARIA Role، می توانید مستقیماً نقش عنصر را مانند [role=button]
به عنوان پارامتر انتخابگر مشخص کنید:
loading...
loading...
ویژگی ID
استراتژی مکان یاب "id" در پروتکل WebDriver پشتیبانی نمی شود، به جای آن باید از استراتژی های انتخابگر CSS یا xPath برای یافتن عناصر با استفاده از ID استفاده کرد.
با این حال برخی از درایورها (مثلاً Appium You.i Engine Driver) ممکن است همچنان از این انتخابگر پشتیبانی کنند.
نحوهای انتخابگر پشتیبانی شده فعلی برای ID عبارتند از:
//css locator
const button = await $('#someid')
//xpath locator
const button = await $('//*[@id="someid"]')
//id strategy
// Note: works only in Appium or similar frameworks which supports locator strategy "ID"
const button = await $('id=resource-id/iosname')
تابع JS
همچنین می توانید از توابع جاوا اسکریپت برای دریافت عناصر با استفاده از API های بومی وب استفاده کنید. البته، شما فقط می توانید این کار را در یک زمینه وب (به عنوان مثال، browser
، یا وب در تلفن همراه) انجام دهید.
ساختار HTML زیر را فرض کنید:
loading...
می توانید عنصر خواهر و برادر #elem
را به صورت زیر جستجو کنید:
loading...