FindElement بواسطة XPath في Selenium

⚡ ملخص ذكي

FindElement بواسطة XPath في Selenium يُحدد الأمر `FindElements` عنصرًا واحدًا على صفحة ويب بشكل فريد، بينما يُعيد قائمة كاملة بالعناصر المطابقة. يقبل كلا الأمرين كائن مُحدد موقع `By` الذي يشمل مُعرف العنصر (ID)، والاسم (Name)، واسم الفئة (Class Name)، واستراتيجيات XPath.

  • المبدأ الأساسي: تُرجع الدالة FindElement أول عنصر ويب مطابق؛ بينما تُرجع الدالة FindElements قائمة مفهرسة من الصفر، مثل المصفوفة.
  • ⚠️ معالجة الاستثناء: تقوم الدالة FindElement برمي استثناء NoSuchElementException عندما لا يوجد تطابق، بينما تقوم الدالة FindElements بإرجاع قائمة فارغة بدلاً من الفشل.
  • 🧭 استراتيجيات تحديد المواقع: اختر من بين المعرف، والاسم، واسم الفئة، واسم الوسم، ونص الرابط، ونص الرابط الجزئي، وXPath.
  • 🧩 التركيز على التنفيذ: قم بتمرير كائن By مع قيمة محدد موقع فريدة لاستهداف العناصر بشكل موثوق في نصوص WebDriver البرمجية.
  • 🚀 تطبيق عملي: العمل Java توضح الأمثلة كيفية النقر على زر الاختيار وتكرار قائمة العناصر في صفحة تجريبية.

FindElement بواسطة XPath في Selenium

In Selenium WebDriver، البحث عن عنصر و البحث عن العناصر هي الأوامر الأساسية المستخدمة لتحديد موقع عناصر الويب على الصفحة قبل تنفيذ أي إجراء عليها، مثل النقر أو إدخال نص.

لماذا تحتاج إلى أمر البحث عن العنصر (العناصر)؟

يتطلب التفاعل مع صفحة ويب من المستخدم تحديد موقع عنصر الويب أولاً. يُستخدم أمر "البحث عن عنصر" لتحديد عنصر ويب واحد بشكل فريد داخل صفحة الويب، بينما يُستخدم أمر "البحث عن عناصر" لتحديد قائمة من عناصر الويب. يمكن تحديد عنصر باستخدام عدة طرق. استراتيجيات تحديد المواقع مثل المعرّف، والاسم، واسم الفئة، ونص الرابط، ونص الرابط الجزئي، واسم الوسم، و كسباث.

بناء جملة الأمر FindElement

فيما يلي صيغة أمر FindElement في Selenium برنامج تشغيل الويب:

WebElement elementName = driver.findElement(By.LocatorStrategy("LocatorValue"));

يأخذ الأمر FindElement الكائن By كمعامل، ويعيد كائنًا واحدًا من نوع WebElement. ويمكن استخدام الكائن By بدوره مع استراتيجيات تحديد المواقع المختلفة، مثل المعرّف، والاسم، واسم الفئة، وXPath، وغيرها.

يمكن أن تكون استراتيجية تحديد الموقع أيًا من القيم التالية:

  • ID
  • الاسم
  • اسم الفصل
  • اسم العلامة
  • رابط نصي
  • نص ارتباط جزئي
  • كسباث

قيمة المُحدِّد هي القيمة الفريدة التي يُمكن من خلالها تحديد عنصر الويب. تقع على عاتق المطورين والمختبرين مسؤولية التأكد من إمكانية تحديد عناصر الويب بشكل فريد باستخدام خصائص معينة مثل المعرّف أو الاسم.

على سبيل المثال:

WebElement loginLink = driver.findElement(By.linkText("Login"));

مثال: ابحث عن العنصر في Selenium

يُستخدم تطبيق العرض التوضيحي التالي لعرض أمر FindElement أثناء العمل:

https://demo.guru99.com/test/ajax.html

السيناريو:

الخطوة 1 : افتح AUT

الخطوة 2 : ابحث عن زر الاختيار وانقر عليه، ثم انقر على زر التحقق.

package com.sample.stepdefinitions;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class NameDemo {

public static void main(String[] args) {
// TODO Auto-generated method stub

System.setProperty("webdriver.chrome.driver", "D:\\3rdparty\\chrome\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();

driver.get("https://demo.guru99.com/test/ajax.html");

// Find the radio button for “No” using its ID and click on it
driver.findElement(By.id("no")).click();

//Click on Check Button
driver.findElement(By.id("buttoncheck")).click();

}

}

بناء جملة الأمر FindElements

عندما تحتاج إلى كل عنصر يطابق محدد الموقع بدلاً من العنصر الأول فقط، استخدم دالة FindElements. فيما يلي صيغتها:

List<WebElement> elementName = driver.findElements(By.LocatorStrategy("LocatorValue"));

يأخذ الأمر FindElements الكائن By كمعامل، ويعيد قائمة بعناصر الويب. ويعيد قائمة فارغة إذا لم يتم العثور على أي عناصر باستخدام استراتيجية تحديد الموقع وقيمة الموقع المحددة.

على سبيل المثال:

List<WebElement> listOfElements = driver.findElements(By.xpath("//div"));

مثال: البحث عن العناصر في Selenium

يتم استخدام نفس التطبيق التجريبي لإظهار كيفية تكرار FindElements على قائمة من العناصر المطابقة.

السيناريو:

الخطوة 1 : فتح URL للتطبيق قيد الاختبار

الخطوة 2 : ابحث عن نص أزرار الاختيار واطبعه على وحدة الإخراج

package com.sample.stepdefinitions;

import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class NameDemo {

public static void main(String[] args) {

    System.setProperty("webdriver.chrome.driver", "X://chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    driver.get("https://demo.guru99.com/test/ajax.html");
    List<WebElement> elements = driver.findElements(By.name("name"));
    System.out.println("Number of elements:" +elements.size());

    for (int i=0; i<elements.size();i++){
      System.out.println("Radio button text:" + elements.get(i).getAttribute("value"));
    }
  }
}

البحث عن عنصر مقابل البحث عن عناصر

فيما يلي الاختلافات الرئيسية بين أوامر البحث عن عنصر والبحث عن عناصر:

البحث عن عنصر مقابل البحث عن عناصر في Selenium

البحث عن العنصر البحث عن العناصر
يُعيد هذا الأمر أول عنصر ويب إذا تم العثور على عناصر ويب متعددة بنفس المحدد. إرجاع قائمة بعناصر الويب
يُطلق الاستثناء NoSuchElementException إذا لم تكن هناك عناصر مطابقة لاستراتيجية تحديد الموقع إرجاع قائمة فارغة إذا لم تكن هناك عناصر ويب مطابقة لاستراتيجية محدد المواقع
لن يعثر البحث عن عنصر باستخدام XPath إلا على عنصر ويب واحد. سيجد مجموعة من العناصر التي تتطابق مع استراتيجية تحديد الموقع
غير قابل للتطبيق يتم فهرسة كل عنصر من عناصر الويب برقم يبدأ من 0، تمامًا مثل المصفوفة.

الأسئلة الشائعة

استعمل Selenium الانتظار الضمني أو الصريح لذا، يقوم برنامج التشغيل باستطلاع الصفحة حتى يظهر العنصر. وتُعدّ عمليات الانتظار الصريحة باستخدام WebDriverWait والشروط المتوقعة الطريقة الأكثر موثوقية للصفحات الديناميكية التي تعتمد على تقنية AJAX.

يُعدّ المعرّف (ID) أسرع وأكثر أدوات تحديد المواقع موثوقيةً لأن المتصفحات تفهرسه مباشرةً. وبشكل عام، تكون مُحدِّدات CSS أسرع من XPath، لذا يُنصح باستخدام XPath في الحالات التي لا يتوفر فيها معرّف أو اسم أو فئة فريدة.

نعم. يمكن لمساعدي الاختبار المدعومين بالذكاء الاصطناعي تحليل DOM واقتراح محددات XPath أو CSS مستقرة تلقائيًا، مما يقلل من وقت الفحص اليدوي. Revقم بمراجعة محددات المواقع التي تم إنشاؤها للتأكد من تفردها قبل إضافتها إلى مجموعات اختبار الإنتاج.

تستخدم أطر العمل ذاتية الإصلاح الذكاء الاصطناعي لاكتشاف متى يتعطل محدد الموقع بعد تغيير واجهة المستخدم، وتستبدله تلقائيًا بأقرب عنصر مطابق. هذا يقلل من صيانة الاختبارات الناتجة عن تغيير سمات العناصر بشكل متكرر.

تلخيص هذه التدوينة بـ: