XPath Chứa, Theo dõi Anh chị em, Tổ tiên & Selen VÀ / HOẶC

Mục lục:

Anonim

Nếu một XPath đơn giản không thể tìm thấy phần tử web phức tạp cho tập lệnh thử nghiệm của chúng ta, chúng ta cần sử dụng các hàm từ thư viện XPath 1.0. Với sự kết hợp của các hàm này, chúng ta có thể tạo XPath cụ thể hơn. Hãy thảo luận về 3 chức năng như vậy -

  1. Chứa đựng
  2. Anh chị em
  3. Tổ tiên
  4. Và HOẶC
  5. Cha mẹ
  6. Bắt đầu với
  7. Trục XPath

Hãy nghiên cứu chúng một cách chi tiết -

Những gì chứa () trong Selenium?

chứa () trong Selenium là một hàm trong biểu thức Xpath được sử dụng để tìm kiếm các phần tử web có chứa một văn bản cụ thể. Chúng ta có thể trích xuất tất cả các phần tử phù hợp với giá trị văn bản đã cho bằng cách sử dụng hàm chứa () XPath trên toàn bộ trang web. Chứa trong XPath có khả năng tìm phần tử có một phần văn bản.

Ví dụ. Ở đây chúng tôi đang tìm kiếm một anchor text .contains là 'SAP M'.

"// h4 / a [chứa (text (), 'SAP M')]"

LƯU Ý: Bạn có thể thực hành bài tập XPath sau trên http://demo.guru99.com/test/selenium-xpath.html này

Sibling trong Selenium Webdriver là gì?

Một anh chị em ruột trong Selenium Webdriver là một hàm dùng để lấy một yếu tố web mà là một anh chị em để các yếu tố phụ huynh. Nếu phần tử mẹ đã biết thì phần tử web có thể dễ dàng tìm thấy hoặc định vị có thể sử dụng thuộc tính anh chị em của biểu thức Xpath trong selenium webdriver.

Anh chị em trong XPath Ví dụ: Ở đây trên cơ sở phần tử anh chị em của 'a', chúng ta đang tìm thấy 'h4'

"// div [@ class = 'canvas- graph'] // a [@href = '/ Accounting.html'] [i [@ class = 'icon-usd']] / following-anh chị em :: h4"

Tổ tiên : Để tìm một phần tử trên cơ sở của phần tử mẹ, chúng ta có thể sử dụng thuộc tính tổ tiên của XPath.

Hãy hiểu 3 hàm này bằng cách sử dụng một ví dụ:

Các bước kiểm tra

Lưu ý: Kể từ ngày tạo hướng dẫn, Trang chủ của Guru99 đã được cập nhật, vì vậy hãy sử dụng trang demo thay thế để chạy thử nghiệm

  1. Truy cập http://demo.guru99.com/test/guru99home/
  2. Trong phần 'Một số khóa học phổ biến nhất của chúng tôi', hãy tìm kiếm tất cả các Phần tử Web là anh em của một WebElement có văn bản là 'SELENIUM'
  3. Chúng ta sẽ tìm phần tử bằng cách sử dụng hàm chứa văn bản XPath, hàm tổ tiên và hàm anh chị em.

SỬ DỤNG Chứa và XPath Sibling

nhập java.util.List;nhập java.util.concurrent.TimeUnit;nhập org.openqa.selenium.By;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.WebElement;nhập org.openqa.selenium.firefox.FirefoxDriver;nhập org.testng.annotations.Test;lớp công khai SiblingAndParentInXpath {@Kiểm trapublic void testSiblingAndParentInXpath () {Trình điều khiển WebDriver;String driverPath = "C: \\ geckodriver.exe";System.setProperty ("webdriver.gecko.driver", driverPath);driver = new FirefoxDriver ();driver.manage (). timeouts (). implicitWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Tìm kiếm phần tử bên trong 'Khóa học phổ biến' là anh chị em của điều khiển 'SELENIUM', Ở đây đầu tiên chúng ta sẽ tìm thấy một h2 có văn bản là '' Một vài khóa học phổ biến nhất của chúng tôi ', sau đó chúng ta chuyển đến phần tử mẹ của nó là một' div ', bên trong div này, chúng ta sẽ tìm thấy một liên kết có văn bản là' SELENIUM ', sau đó cuối cùng chúng ta sẽ tìm thấy tất cả các phần tử anh em của liên kết này (' SELENIUM ')Danh sách  dateBox = driver.findElements (By.xpath ("// h2 [chứa (text (), 'Một số khóa học phổ biến nhất của chúng tôi')] / parent :: div // div [// a [text () = 'SELENIUM']] / sau-anh-chị-em :: div [@ class = 'rt-grid-2 rt-omega'] "));// In tất cả phần tử là anh em của phần tử có tên là 'SELENIUM' trong 'Khóa học phổ biến'cho (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}trình điều khiển.close ();}}

Đầu ra sẽ như sau:

Tổ tiên trong Selenium Webdriver

Tổ tiên trong Selenium Webdriver là một hàm được sử dụng để tìm tổ tiên của một thành viên cụ thể tại lớp được chỉ định. Cấp độ tổ tiên được trả về hoặc cấp độ tổ tiên so với cấp độ của thành viên có thể được chỉ định rõ ràng. Nó trả về số lượng các bước phân cấp từ tổ tiên, định vị tổ tiên được chỉ định mà người dùng muốn.

Bây giờ, giả sử chúng ta cần Tìm kiếm Tất cả các phần tử trong phần 'Khóa học phổ biến' với sự trợ giúp của tổ tiên của anchor có văn bản là 'SELENIUM'

Ở đây truy vấn xpath của chúng ta sẽ giống như

"//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega '] / following-Anh-chị-em :: div"

Hoàn thành mã

nhập java.util.List;nhập java.util.concurrent.TimeUnit;nhập org.openqa.selenium.By;nhập org.openqa.selenium.Keys;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.WebElement;nhập org.openqa.selenium.firefox.FirefoxDriver;nhập org.testng.annotations.Test;lớp công khai AncestorInXpath {@Kiểm trapublic void testAncestorInXpath () {Trình điều khiển WebDriver = mới FirefoxDriver ();driver.manage (). timeouts (). implicitWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Tìm kiếm Tất cả các yếu tố trong phần 'Khóa học phổ biến'// với sự trợ giúp của tổ tiên của anchor có văn bản là 'SELENIUM'Danh sách  dateBox = driver.findElements (By.xpath ("// div [.// a [text () = 'SELENIUM']] / parent :: div [@ class = 'rt-grid-2 rt- omega '] / following-anh-chị-em :: div "));// In tất cả các phần tử có tên là 'SELENIUM' trong 'Khóa học phổ biến'cho (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}driver.quit ();}}

Đầu ra sẽ giống như-

Sử dụng VÀ và HOẶC

Bằng cách sử dụng AND và OR, bạn có thể đặt 2 điều kiện trong biểu thức XPath của chúng tôi.

  • Trong trường hợp AND, cả 2 điều kiện đều đúng thì chỉ nó mới tìm thấy phần tử.
  • Trong trường hợp OR bất kỳ một trong 2 điều kiện phải đúng thì chỉ nó tìm thấy phần tử.

Ở đây truy vấn XPath của chúng ta sẽ giống như

Xpath = // * [@ type = 'submit' HOẶC @ name = 'btnReset']
Xpath = // input [@ type = 'submit' và @ name = 'btnLogin']

Các bước kiểm tra:

  1. Truy cập http://demo.guru99.com/v1/
  2. Trong phần này, sẽ sử dụng trang demo trên để tìm kiếm phần tử có các chức năng khác nhau của XPath.

Bạn sẽ tìm thấy một phần tử sử dụng các trục AND và OR, cha, start-with và XPath

VÀ HOẶC Ví dụ

nhập org.openqa.selenium.By;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.WebElement;nhập org.openqa.selenium.chrome.ChromeDriver;hạng công khai AND_OR {public static void main (String [] args) {Trình điều khiển WebDriver;WebElement w, x;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = new ChromeDriver ();// Chạy chương trìnhdriver.get ("https://www.guru99.com/");// Tìm kiếm phần tử bằng OR trong xpathw = driver.findElement (By.xpath ("// * [@ type = 'submit' OR @ name = 'btnReset']"));// In văn bản của phần tửSystem.out.println (w.getText ());// Tìm kiếm phần tử bằng AND trong xpathx = driver.findElement (By.xpath ("// input [@ type = 'submit' and @ name = 'btnLogin']"));// In văn bản của phần tử được tìm kiếmSystem.out.println (x.getText ());// Đóng trình duyệtdriver.quit ();}}

Parent trong Selenium là gì?

Parent trong Selenium là một phương thức được sử dụng để truy xuất nút cha của nút hiện tại được chọn trong trang web. Nó rất hữu ích trong trường hợp bạn chọn một phần tử và cần lấy phần tử mẹ bằng cách sử dụng Xpath. Phương thức này cũng được sử dụng để lấy phụ huynh của phụ huynh.

Ở đây truy vấn XPath của chúng ta sẽ giống như

Xpath = // * [@ id = 'rt-feature'] // cha :: div

XPath sử dụng Parent

nhập org.openqa.selenium.By;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.WebElement;nhập org.openqa.selenium.chrome.ChromeDriver;lớp công khai Parent {public static void main (String [] args) {Trình điều khiển WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = new ChromeDriver ();// Chạy chương trìnhdriver.get ("https://www.guru99.com/");// Tìm kiếm phần tử bằng cách sử dụng PARENTw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // parent :: div"));// In văn bản của phần tử được tìm kiếmSystem.out.println (w.getText ());// Đóng trình duyệtdriver.quit ();}}

Bắt đầu với

Sử dụng chức năng Starts-with, bạn có thể tìm thấy phần tử có thuộc tính thay đổi động khi làm mới hoặc các hoạt động khác như nhấp, gửi, v.v.

Ở đây truy vấn XPath của chúng ta sẽ giống như

Xpath = // label [start-with (@ id, 'message')]

nhập org.openqa.selenium.By;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.WebElement;nhập org.openqa.selenium.chrome.ChromeDriver;lớp công khai StartsWith {public static void main (String [] args) {Trình điều khiển WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = new ChromeDriver ();// Chạy chương trìnhdriver.get ("https://www.guru99.com/");// Tìm kiếm phần tử bằng cách sử dụng start-withw = driver.findElement (By.xpath ("// label [start-with (@ id, 'message')]"));// In văn bản của phần tử được tìm kiếmSystem.out.println (w.getText ());// Đóng trình duyệtdriver.quit ();}}

Trục Xpath

Bằng cách sử dụng các trục XPath, bạn có thể tìm thấy các phần tử động và rất phức tạp trên một trang web. Các trục XPath chứa một số phương thức để tìm một phần tử. Ở đây, sẽ thảo luận về một vài phương pháp.

sau : Hàm này sẽ trả về phần tử ngay lập tức của thành phần cụ thể.

Ở đây truy vấn XPath của chúng ta sẽ giống như

Xpath = // * [@ type = 'text'] // following :: input

XPath sử dụng sau

nhập org.openqa.selenium.By;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.WebElement;nhập org.openqa.selenium.chrome.ChromeDriver;lớp công khai đang theo dõi {public static void main (String [] args) {Trình điều khiển WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = new ChromeDriver ();// Chạy chương trìnhdriver.get ("https://www.guru99.com/");// Tìm kiếm phần tử bằng cách sử dụng Phương thức sauw = driver.findElement (By.xpath ("// * [@ type = 'text'] // sau :: input"));// In văn bản của phần tử được tìm kiếmSystem.out.println (w.getText ());// Đóng trình duyệtdriver.quit ();}}

Preceding: Hàm này sẽ trả về phần tử đứng trước của phần tử cụ thể.

Ở đây truy vấn XPath của chúng ta sẽ giống như

Xpath = // * [@ type = 'submit'] // trước :: input

XPath sử dụng Preceding

nhập org.openqa.selenium.By;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.WebElement;nhập org.openqa.selenium.chrome.ChromeDriver;lớp công khai trước {public static void main (String [] args) {Trình điều khiển WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = new ChromeDriver ();// Chạy chương trìnhdriver.get ("https://www.guru99.com/");// Tìm kiếm phần tử bằng cách sử dụng phương thức trướcw = driver.findElement (By.xpath ("// * [@ type = 'submit'] // trước :: input"));// In phần tử được tìm kiếmSystem.out.println (w.getText ());// Đóng trình duyệtdriver.quit ();}}

d) Descendant: Hàm này sẽ trả về phần tử con của phần tử cụ thể.

Ở đây truy vấn XPath của chúng ta sẽ giống như

Xpath = // * [@ id = 'rt-feature'] // hậu duệ :: a

XPath sử dụng Descendant

nhập org.openqa.selenium.By;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.WebElement;nhập org.openqa.selenium.chrome.ChromeDriver;giai cấp công khai Hậu duệ {public static void main (String [] args) {Trình điều khiển WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = new ChromeDriver ();// Chạy chương trìnhdriver.get ("https://www.guru99.com/");// Tìm kiếm phần tử bằng cách sử dụng phương thức conw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // hậu duệ :: a"));// In phần tử được tìm kiếmSystem.out.println (w.getText ());// Đóng trình duyệtdriver.quit ();}}

Tóm lược

  • Có một số tình huống khi XPath thông thường không thể được sử dụng để tìm một phần tử. Trong tình huống như vậy, chúng ta cần các hàm khác với truy vấn xpath.
  • Có một số hàm XPath quan trọng như XPath chứa, cha mẹ, tổ tiên, anh chị em sau, v.v.
  • Với sự trợ giúp của các hàm này, bạn có thể tạo các biểu thức XPath phức tạp.