در اتوماسیونِ Selenium، اگر عناصر توسط Locatorهای عمومی مانند id, class, name و غیره، پیدا نشدند، آنگاه نوبت XPath است که برای پیدا کردن یک عنصر در صفحه وب مورد استفاده قرار گیرد.
در این قسمت از آموزش، ما در مورد XPath و عبارات مختلف XPath، برای یافتن عناصر پیچیده(Complex) یا دینامیک(که Attributeهای آن به صورت دینامیک در Refresh و یا دیگر عملیاتها تغییر میکنند) صحبت خواهیم کرد.
XPath چیست؟
XPath به عنوان XML Path تعریف شده است، که در حقیقت یک زبان یا سینتکس برای یافتن هر عنصر در صفحه وب، با استفاده از عبارات XML Path است. XPath برای پیدا کردن محل هر عنصر در یک صفحه وب با استفاده از ساختار HTML DOM مورد بهرهبرداری قرار میگیرد. فرمت اصلی XPath در تصویر زیر تشریح شده است.
سینتکس برای XPath
XPath حاوی مسیر عنصر واقع شده در صفحه وب است. سنتکس استاندارد برای ایجاد XPath به صورت زیر است:
Xpath=//tagname[@attribute=’value’]
- //: انتخاب گره یا Node فعلی.
- Tagname :Tagname گره خاص.
- @: انتخاب Attribute
- Attribute: نام مشخصه گره.
- Value: مقدار Attribute.
برای پیدا کردن دقیق عنصر در صفحات وب، انواع مختلفی از Locatorها وجود داردو
در لیست زیر ابتدا XPath Locatorها و سپس عناصری که در صفحه وب پیدا میکنند ارائه شده است:
- ID: برای پیدا کردن عنصر، توسط ID مربوط به عنصر
- Classname: برای پیدا کردن عنصر توسط Classname مربوط به عنصر
- Name: برای پیدا کردن عنصر توسط نام عنصر
- Link text: برای پیدا کردن عنصر با متن موجود در لینک
- XPath: XPath مورد نیاز برای پیدا کردن عنصر دینامیک و عبور از میان عناصر مختلف صفحه وب
- CSS Path: نیز عناصر بدون نام، Class یا ID را مکانیابی میکند.
انواع XPath
دو نوع XPath وجود دارد:
- Absolute XPath(مطلق)
- Relative XPath(نسبی)
Absolute XPath
این یک روش مستقیم برای پیدا کردن عنصر است، اما اشکال XPath مطلق این است که اگر هر گونه تغییر در مسیر عنصر وجود داشته باشد، XPath شکست خواهد خورد.
ویژگی کلیدی XPath این است که با یک (/)Forward Slash منفرد آغاز میشود، بدین معنی که شما میتوانید عنصر را از گره ریشه(Root Node) انتخاب کنید.
در زیر نمونهای از یک عبارت XPath مطلق از عنصر، در صفحه پایین نشان داده شده است.
Absolute XPath:
html/body/div[1]/section/div[1]/div/div/div/div[1]/div/div/div/div/div[3]/div[1]/div/h4[1]/b
Relative XPath
برای Xpath نسبی، مسیر از وسط ساختار HTML DOM شروع میشود. در اینجا XPath با استفاده از دو خط اسلش(//) آغاز میشود، بدین معنا که میتواند عنصر را در هر نقطه از صفحه وب جستجو کند.
شما میتوانید از وسط ساختار HTML DOM شروع کنید و نیازی به نوشتن XPath طولانی نیست.
در زیر نمونهای از عبارت XPath نسبی از یک عنصر در صفحه زیر ارائه شده است. این فرمت رایج مورد استفاده برای پیدا کردن عنصر از طریق یک XPath نسبی است.
Relative xpath: //*[@class=’featured-box’]//*[text()=’Testing’]
XPath Axes(محور XPath) چیست؟
محورهای XPath گرههای مختلف در سند XML از Context Node فعلی را جستجو میکنند. محورهای XPath متدهایی هستند که برای پیدا کردن عناصر دینامیک استفاده میشوند، که در غیر آن صورت با روش XPath معمولی بدون داشتن ID , Classname, Name و دیگر موارد امکان پذیر نیست.
متدهای محور(Axes) برای پیدا کردن آن دست از عناصری، که به طور دینامیک در زمان Refresh یا دیگر عملیاتها تغییر میکنند، استفاده میشود. معمولا چند متد محور در Selenium Webdriver مانند child, parent, ancestor, sibling, preceding, self و غیره استفاده میشوند.
استفاده از عناصر دینامیک و Complex(پیچیده) XPath Handling در Selenium
۱- Basic XPath
عبارت XPath، گرهها یا لیستی از گرهها را براساس Attributeهایی مانند ID , Name, Classname و غیره از سند XML به صورت زیر نشان میدهد.
Xpath=//input[@name=’uid’]
در اینجا لینکی برای دسترسی به این صفحه وجود دارد.
برخی از عبارات Basic XPath:
Xpath=//input[@type=’text’]
Xpath= //label[@id=’message23′]
Xpath= //input[@value=’RESET’]
Xpath=//*[@class=’barone’]
Xpath=//a[@href=’http://demo.guru99.com/’]
Xpath= //img[@src=’//cdn.guru99.com/images/home/java.png’]
۲- ()Contains:
()Contains یک متد مورد استفاده در عبارت XPath است. هنگامی که Value هر Attribute به طور دینامیک تغییر میکند(به عنوان مثال، اطلاعات Login) استفاده میشود.
این Attribute دارای توانایی یافتن عنصر با یک متن جزئی است که در مثال زیر نشان داده شده است.
در این مثال، ما سعی کردیم عنصر را فقط با استفاده از Text Value جزیی از Attribute شناسایی نماییم. در عبارت XPath پایین مقدار جزیی ‘sub’ به جای دکمه Submit(ارسال) استفاده شده است. میتوان مشاهده کرد که عنصر با موفقیت یافت میشود.
Value کامل مربوط به ‘Type’ برابر ‘submit’ است، اما در این مثال فقط از مقدار جزیی ‘sub’ استفاده شد.
Xpath=//*[contains(@type,’sub’)]
مقدار کامل ‘Name’ برابر با ‘btnLogin’ است، اما از مقدار جزیی ‘btn’ استفاده شده است..
Xpath=//*[contains(@name,’btn’)]
در عبارت فوق، ما ‘name’ را به عنوان یک Attribute و ‘btn’ را به عنوان یک مقدار جزئی در تصویر زیر نشان دادهایم. این عبارت ۲ عنصر(LOGIN و RESET) را به دلیل اینکه ویژگی ‘name’ آنها با ‘btn’ آغاز شده است را نیز پیدا میکند.
به طور مشابه، در عبارت زیر، ‘ID’ را به عنوان یک Attribute و ‘message’ را به عنوان یک مقدار جزئی در نظر گرفتهایم. این عبارت ۲ عنصر(‘User-ID must not be blank’ و ‘Password must not be blank’) را پیدا میکند. علت این امر این است که ویژگی ‘name’ آنها با ‘Message’ آغاز شده است.
Xpath=//*[contains(@id,’message’)]
در عبارت زیر هم، ما ‘text’ مربوط به لینک را به عنوان یک Attribute و ‘here’ را به عنوان یک مقدار جزئی در تصویر زیر نشان دادهایم. این عبارت لینک(‘here’) را پیدا میکند، چرا که این لینک متن ‘here’ را نشان میدهد.
Xpath=//*[contains(text(),’here’)]
Xpath=//*[contains(@href,’guru99.com’)]
این یک آموزش طولانی مدت است. بنابراین قسمتهای بعدی به محض آماده شدن علاوه بر اینکه در صفحه Home وبسایت اطلاعرسانی خواهد شد، به صورت دستهبندی شده از اینجا نیز در دسترس است.
vaghean tozihateton binazir bood
ممنونم از مبحث عالی تون
لطفا ادامه این بحث بزارید.