يحتوي XPath على: نص، واسم شقيق وأسلاف في Selenium
🚀 ملخص ذكي
يحتوي XPath على، شقيق، وسلف في Selenium تمكين تحديد دقيق لعناصر الويب باستخدام العلاقات المنظمة وأنماط النص. تُحسّن وظائف XPath هذه موثوقية الأتمتة ومرونتها وسهولة صيانتها في تسلسلات DOM المعقدة.

ما الذي يحتوي عليه XPath؟
يحتوي XPath هي دالة ضمن تعبير XPath، تُستخدم للبحث عن عناصر الويب التي تحتوي على نص معين. يمكننا أن نستنتجtracيُستخدم الأمر `contains()` في XPath للبحث عن جميع العناصر التي تطابق قيمة النص المُعطى في صفحة الويب. تتيح دالة `contains()` في XPath إمكانية العثور على العنصر حتى مع وجود جزء من النص.
مثال - يحتوي على نص
نحن هنا نبحث عن مرساة تحتوي على نص مثل 'SAP م.
"//h4/a[contains(text(),'SAP M')]"
ملاحظة: يمكنك ممارسة تمرين XPath التالي على هذا https://demo.guru99.com/test/selenium-xpath.html
إذا كان ملف كسباث إذا لم نتمكن من العثور على عنصر ويب معقد لنص الاختبار، فسنحتاج إلى استخدام دوال مكتبة XPath 1.0. باستخدام هذه الدوال، يمكننا إنشاء XPath أكثر تحديدًا.
👉 سجل مجانًا للبث المباشر Selenium مشروع الاختبار
متابعة الأخ في XPath
A أخوي في Selenium برنامج تشغيل الويب دالة تُستخدم لجلب عنصر ويب شقيق للعنصر الرئيسي. إذا كان العنصر الرئيسي معروفًا، يُمكن العثور على عنصر الويب بسهولة، مما يُتيح استخدام سمة الشقيق لتعبير XPath في Selenium برنامج تشغيل الويب.
الأخوة في مثال XPath:
هنا، على أساس العنصر الشقيق لـ 'a' نجد 'h4'
"//div[@class='canvas- graph']//a[@href='/accounting.html'][i[@class='icon-usd']]/following-sibling::h4"
سلف:للعثور على عنصر على أساس العنصر الأصلي، يمكننا استخدام سمة الأسلاف في XPath.
دعونا نفهم هذه الوظائف الثلاث باستخدام مثال -
خطوات الاختبار:
ملاحظة: منذ تاريخ إنشاء البرنامج التعليمي، الصفحة الرئيسية لـ Guruتم تحديث الإصدار 99، لذا استخدم الموقع التجريبي بدلاً من ذلك لإجراء الاختبارات.
- انتقل إلى البرنامج المساعد في التأليف https://demo.guru99.com/test/guru99home/
- في قسم "بعض دوراتنا الأكثر شعبية"، ابحث عن جميع عناصر الويب الشقيقة لعنصر ويب نصه "SELENIUM"
- سنقوم بالبحث عن العناصر باستخدام وظائف النص XPath التي تحتوي على النص والأسلاف والأخوة.
الاستخدام يحتوي على نص وXPath Sibling
import java.time.Duration;
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;
import org.openqa.selenium.chrome.ChromeOptions;
import org.testng.annotations.Test;
// If you prefer WebDriverManager (optional):
// import io.github.bonigarcia.wdm.WebDriverManager;
public class SiblingAndParentInXpath_Chrome {
@Test
public void testSiblingAndParentInXpath() {
// === Option A: Use local ChromeDriver binary path ===
// Update this path to your chromedriver location:
System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe");
// === Option B: Use WebDriverManager (uncomment next line and remove Option A lines) ===
// WebDriverManager.chromedriver().setup();
ChromeOptions options = new ChromeOptions();
// Add any flags you need, e.g. headless:
// options.addArguments("--headless=new");
WebDriver driver = new ChromeDriver(options);
try {
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
driver.manage().window().maximize();
driver.get("https://demo.guru99.com/test/guru99home/");
// Find all siblings (divs) next to the 'SELENIUM' tile within
// the "A few of our most popular courses" section.
// Steps encoded in XPath:
// 1) Locate the H2 that contains the section title
// 2) Move to its parent DIV
// 3) Inside it, locate the link with text 'SELENIUM'
// 4) From the SELENIUM tile's parent DIV, get following sibling tiles
List<WebElement> dateBox = driver.findElements(By.xpath(
"//h2[contains(., 'A few of our most popular courses')]/parent::div" +
"//a[normalize-space(.)='SELENIUM']/parent::div" +
"/following-sibling::div[contains(@class,'rt-grid-2')]"
));
// Print the text of each sibling element
for (WebElement el : dateBox) {
System.out.println(el.getText());
}
} finally {
driver.quit();
}
}
}
سيكون الإخراج مثل:
XPath السلف في Selenium
XPath السلف في Selenium دالة تُستخدم للعثور على سلف عنصر معين في طبقة محددة. يمكن تحديد مستوى السلف المراد إرجاعه، أو مستوى السلف بالنسبة لمستوى العنصر، بشكل صريح. تُرجع الدالة عدد الخطوات الهرمية من السلف، مما يُحدد السلف المحدد الذي يريده المستخدم.
الآن، لنفترض أننا بحاجة إلى البحث عن جميع العناصر في قسم "الدورة التدريبية الشائعة" بمساعدة سلف المرساة الذي يكون نصه "SELENIUM"
هنا سيكون استعلام xpath الخاص بنا مثل
"//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega']/following-sibling::div"
اكتملت Code
import java.time.Duration;
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;
import org.openqa.selenium.chrome.ChromeOptions;
import org.testng.annotations.Test;
public class AncestorInXpath_Chrome {
@Test
public void testAncestorInXpath() {
// Set path to your ChromeDriver executable
System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
WebDriver driver = new ChromeDriver(options);
try {
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
driver.manage().window().maximize();
driver.get("https://demo.guru99.com/test/guru99home/");
// Search all elements in 'Popular course' section
// using the ancestor of the 'SELENIUM' link
List <WebElement> dateBox = driver.findElements(
By.xpath("//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega']/following-sibling::div")
);
// Print all sibling elements of the 'SELENIUM' tile
for (WebElement element : dateBox) {
System.out.println(element.getText());
}
} finally {
driver.quit();
}
}
}
سيبدو الإخراج مثل-
باستخدام AND وOR
من خلال استخدام AND وOR، يمكنك وضع شرطين في تعبير XPath الخاص بنا.
- في حالة AND، يجب أن يكون كلا الشرطين صحيحين، وعندها فقط يتم العثور على العنصر.
- في حالة OR، يجب أن يكون أي من الشرطين صحيحًا، وعندها فقط سيتم العثور على العنصر.
هنا، سيكون استعلام XPath الخاص بنا مثل
Xpath=//*[@type='submit' OR @name='btnReset']
Xpath=//input[@type='submit' and @name='btnLogin']
خطوات الاختبار:
- انتقل إلى البرنامج المساعد في التأليف https://demo.guru99.com/
- في هذا القسم، سنستخدم موقع العرض التوضيحي أعلاه للبحث عن عناصر ذات وظائف مختلفة لـ XPath.
ستجد عنصرًا يستخدم محاور AND وOR والأصل والبدء بـ وXPath
و أو مثال
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class AND_OR {
public static void main(String[] args) {
WebDriver driver;
WebElement w,x;
System.setProperty("webdriver.chrome.driver","E://Selenium//Selenium_Jars//chromedriver.exe");
driver= new ChromeDriver();
// Launch the application
driver.get("https://www.guru99.com/");
//Search element using OR in the xpath
w=driver.findElement(By.xpath("//*[@type='submit' OR @name='btnReset']"));
//Print the text of the element
System.out.println(w.getText());
//Search element using AND in the xpath
x=driver.findElement(By.xpath("//input[@type='submit' and @name='btnLogin']"));
//Print the text of the searched element
System.out.println(x.getText());
//Close the browser
driver.quit();
}
}
XPath الأصل في Selenium
الوالد في Selenium هي طريقة تُستخدم لاسترجاع العقدة الأصلية للعقدة الحالية المحددة في صفحة الويب. وهي مفيدة جدًا في الحالات التي تحدد فيها عنصرًا وتحتاج إلى الحصول عليه باستخدام XPath. تُستخدم هذه الطريقة أيضًا للحصول على العنصر الأصلي للعقدة الأصلية.
هنا، سيكون استعلام XPath الخاص بنا مثل
Xpath=//*[@id='rt-feature']//parent::div
XPath باستخدام الأصل
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class Parent {
public static void main(String[] args) {
WebDriver driver;
WebElement w;
System.setProperty("webdriver.chrome.driver","E://Selenium//Selenium_Jars//chromedriver.exe");
driver= new ChromeDriver();
// Launch the application
driver.get("https://www.guru99.com/");
//Search the element by using PARENT
w=driver.findElement(By.xpath("//*[@id='rt-feature']//parent::div"));
//Print the text of the searched element
System.out.println(w.getText());
//Close the browser
driver.quit();
}
}
ابدا ب
باستخدام وظيفة Starts-with، يمكنك العثور على العنصر الذي تتغير سماته ديناميكيًا عند التحديث أو العمليات الأخرى مثل النقر والإرسال وما إلى ذلك.
هنا سيكون استعلام XPath الخاص بنا مثل
Xpath=//label[starts-with(@id,'message')]
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class StartsWith {
public static void main(String[] args) {
WebDriver driver;
WebElement w;
System.setProperty("webdriver.chrome.driver","E://Selenium//Selenium_Jars//chromedriver.exe");
driver= new ChromeDriver();
// Launch the application
driver.get("https://www.guru99.com/");
//Search the element by using starts-with
w=driver.findElement(By.xpath("//label[starts-with(@id,'message')]"));
//Print the text of the searched element
System.out.println(w.getText());
//Close the browser
driver.quit();
}
}
محاور Xpath
باستخدام محاور XPath، يمكنك العثور على العناصر الديناميكية والمعقدة للغاية على صفحة الويب. تحتوي محاور XPath على عدة طرق للعثور على عنصر. هنا، سنناقش بعض الطرق.
متابعيك: ستعيد هذه الوظيفة العنصر المباشر للمكون المعين.
هنا سيكون استعلام XPath الخاص بنا مثل
Xpath=//*[@type='text']//following::input

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class Following {
public static void main(String[] args) {
WebDriver driver;
WebElement w;
System.setProperty("webdriver.chrome.driver","E://Selenium//Selenium_Jars//chromedriver.exe");
driver= new ChromeDriver();
// Launch the application
driver.get("https://www.guru99.com/");
//Search the element by using Following method
w=driver.findElement(By.xpath("//*[@type='text']//following::input"));
//Print the text of the searched element
System.out.println(w.getText());
//Close the browser
driver.quit();
}
}
السابق: ستعيد هذه الوظيفة العنصر السابق للعنصر المعين.
هنا سيكون استعلام XPath الخاص بنا مثل
Xpath= //*[@type='submit']//preceding::input
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class Preceding {
public static void main(String[] args) {
WebDriver driver;
WebElement w;
System.setProperty("webdriver.chrome.driver","E://Selenium//Selenium_Jars//chromedriver.exe");
driver= new ChromeDriver();
// Launch the application
driver.get("https://www.guru99.com/");
//Search the element by using preceding method
w=driver.findElement(By.xpath("//*[@type='submit']//preceding::input"));
//Print the searched element
System.out.println(w.getText());
//Close the browser
driver.quit();
}
}
d) تنازلي: ستعيد هذه الوظيفة العنصر السليل للعنصر المعين.
هنا سيكون استعلام XPath الخاص بنا مثل
Xpath= //*[@id='rt-feature']//descendant::a
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class Descendant {
public static void main(String[] args) {
WebDriver driver;
WebElement w;
System.setProperty("webdriver.chrome.driver","E://Selenium//Selenium_Jars//chromedriver.exe");
driver= new ChromeDriver();
// Launch the application
driver.get("https://www.guru99.com/");
//Search the element by using descendant method
w=driver.findElement(By.xpath("//*[@id='rt-feature']//descendant::a"));
//Print the searched element
System.out.println(w.getText());
//Close the browser
driver.quit();
}
}









