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`.
In Selenium WebDriver, Tìm phần tử và 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ử | 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. |


