FindElement bằng XPath trong Selenium

⚡ Tóm tắt thông minh

FindElement bằng XPath trong Selenium Lệnh `By` xác định duy nhất một phần tử web riêng lẻ trên trang, trong khi `FindElements` trả về một danh sách đầy đủ các phần tử phù hợp. Cả hai lệnh đều chấp nhận một đối tượng định vị `By` bao gồm các chiến lược `ID`, `Name`, `Class Name` và `XPath`.

  • Nguyên tắc cốt lõi: FindElement trả về WebElement đầu tiên khớp; FindElements trả về một danh sách được đánh số từ 0, giống như một mảng.
  • ⚠️ Xử lý ngoại lệ: Phương thức FindElement sẽ ném ra ngoại lệ NoSuchElementException khi không tìm thấy kết quả phù hợp, trong khi phương thức FindElements trả về một danh sách rỗng thay vì báo lỗi.
  • 🧭 Chiến lược định vị: Hãy chọn trong số các tùy chọn sau: ID, Tên, Tên lớp, Tên thẻ, Văn bản liên kết, Văn bản liên kết một phần và XPath.
  • 🧩 Tập trung thực hiện: Truyền một đối tượng By với giá trị định vị duy nhất để nhắm mục tiêu các phần tử một cách đáng tin cậy trong các tập lệnh WebDriver.
  • 🚀 Ứng dụng thực tế: Đang làm việc Java Các ví dụ minh họa việc nhấp vào nút chọn và lặp qua danh sách các phần tử trên trang demo.

FindElement bằng XPath trong Selenium

In Selenium WebDriver, Tìm phần tửTìm các phần tử Đây là các lệnh cốt lõi được sử dụng để định vị các phần tử web trên một trang trước khi bất kỳ hành động nào, chẳng hạn như nhấp chuột hoặc nhập văn bản, có thể được thực hiện trên chúng.

Tại sao bạn cần lệnh Find Element(s)?

Tương tác với một trang web yêu cầu người dùng phải định vị phần tử web trước. Lệnh Tìm Phần Tử được sử dụng để xác định duy nhất một phần tử web trong trang web, trong khi lệnh Tìm Nhiều Phần Tử được sử dụng để xác định một danh sách các phần tử web. Một phần tử có thể được xác định bằng nhiều cách khác nhau. chiến lược định vị chẳng hạn như ID, Tên, Tên lớp, Văn bản liên kết, Văn bản liên kết một phần, Tên thẻ và Xpath.

Cú pháp lệnh FindElement

Dưới đây là cú pháp của lệnh FindElement trong Selenium Trình điều khiển Web:

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

Lệnh FindElement nhận đối tượng By làm tham số và trả về một đối tượng duy nhất thuộc loại WebElement. Đối tượng By, đến lượt nó, có thể được sử dụng với nhiều chiến lược định vị khác nhau như ID, Name, Class Name, XPath, v.v.

Chiến lược định vị có thể là bất kỳ giá trị nào sau đây:

  • ID
  • Họ tên
  • Tên lớp
  • Tên thẻ
  • Text link
  • Văn bản liên kết một phần
  • Xpath

Giá trị định vị (Locator Value) là giá trị duy nhất dùng để xác định một phần tử web. Các nhà phát triển và người kiểm thử có trách nhiệm đảm bảo rằng các phần tử web có thể được xác định duy nhất bằng cách sử dụng các thuộc tính nhất định như ID hoặc Tên.

Ví dụ:

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

Ví dụ: Tìm phần tử trong Selenium

Ứng dụng demo sau đây được sử dụng để minh họa cách hoạt động của lệnh FindElement:

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

kịch bản:

Bước 1: Mở AUT

Bước 2: Tìm và nhấp vào nút chọn, sau đó nhấp vào nút Kiểm tra.

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();

}

}

Cú pháp lệnh FindElements

Khi bạn cần tìm tất cả các phần tử khớp với một bộ định vị chứ không chỉ phần tử đầu tiên, hãy sử dụng FindElements. Cú pháp của nó như sau:

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

Lệnh FindElements nhận đối tượng By làm tham số và trả về một danh sách các phần tử web. Nó trả về một danh sách rỗng nếu không tìm thấy phần tử nào bằng cách sử dụng chiến lược định vị và giá trị định vị đã cho.

Ví dụ:

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

Ví dụ: Tìm phần tử trong Selenium

Ứng dụng demo tương tự được sử dụng để minh họa cách FindElements lặp lại trên một danh sách các phần tử phù hợp.

kịch bản:

Bước 1: Mở URL cho Ứng dụng đang được thử nghiệm

Bước 2: Tìm nội dung của các nút chọn radio và in nó ra bảng điều khiển đầu ra.

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"));
    }
  }
}

Tìm phần tử so với Tìm các phần tử

Dưới đây là những điểm khác biệt chính giữa lệnh Find Element và Find Elements:

Tìm phần tử so với Tìm các phần tử trong Selenium

Tìm phần tử Tìm phần tử
Trả về phần tử web đầu tiên nếu tìm thấy nhiều phần tử web có cùng bộ định vị. Trả về danh sách các thành phần web
Ném ngoại lệ NoSuchElementException nếu không có phần tử nào khớp với chiến lược định vị. Trả về danh sách trống nếu không có thành phần web nào khớp với chiến lược định vị
Tìm phần tử bằng XPath chỉ tìm thấy một phần tử web duy nhất. Nó sẽ tìm một tập hợp các phần tử phù hợp với chiến lược định vị.
Không áp dụng Mỗi phần tử web được đánh số bắt đầu từ 0, giống như một mảng.

Câu Hỏi Thường Gặp

Sử dụng Selenium chờ đợi ngầm hoặc rõ ràng Vì vậy, trình điều khiển sẽ liên tục kiểm tra trang cho đến khi phần tử xuất hiện. Việc sử dụng WebDriverWait và các điều kiện mong đợi là phương pháp đáng tin cậy nhất cho các trang động, được điều khiển bằng AJAX.

ID là phương thức định vị nhanh nhất và đáng tin cậy nhất vì trình duyệt lập chỉ mục trực tiếp. Bộ chọn CSS thường nhanh hơn XPath, vì vậy hãy dành XPath cho những trường hợp không có ID, Tên hoặc Lớp duy nhất.

Đúng vậy. Các trợ lý kiểm thử dựa trên trí tuệ nhân tạo có thể phân tích DOM và tự động đề xuất các bộ định vị XPath hoặc CSS ổn định, giúp giảm thời gian kiểm tra thủ công. Review đã tạo ra các bộ định vị để đảm bảo tính duy nhất trước khi thêm chúng vào bộ kiểm thử sản xuất.

Các framework tự phục hồi sử dụng trí tuệ nhân tạo (AI) để phát hiện khi nào một bộ định vị bị lỗi sau khi thay đổi giao diện người dùng và tự động thay thế bằng phần tử phù hợp gần nhất. Điều này giúp giảm thiểu việc bảo trì kiểm thử do các thuộc tính phần tử thay đổi thường xuyên.

Tóm tắt bài viết này với: