Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Nên dùng locator nào: id, name, xpath hay css trong Selenium?


Mỗi locator đều có ý nghĩa riêng. Nếu trang chứa giá trị thuộc tính duy nhất, chúng ta nên dùng chúng trước. Tuy nhiên nếu không có phần tử duy nhất, nên dùng css selector vì nó hiệu quả hơn về tốc độ.

Css cũng có nhược điểm là không thể duyệt từ nút con đến nút cha (không thể đi ngược lại). Nhưng XPath cho phép tính năng này. XPath là locator phổ biến nhất trong Selenium và thực hiện duyệt qua các phần tử và thuộc tính DOM để xác định đối tượng.

XPath được biểu diễn bằng hai cách là '/' và '//'. Dấu gạch chéo đơn nghĩa là đường dẫn tuyệt đối. Ở đây XPath duyệt trực tiếp từ cha đến con trong DOM. Vậy trong XPath tuyệt đối, chúng ta phải đi từ nút gốc đến nút đích.

Cú pháp:

driver.findElement(By.xpath("/html/body/div/input")).

Dấu gạch chéo kép '//' nghĩa là đường dẫn tương đối. Ở đây XPath tìm phần tử khớp ở mọi góc của DOM. Nó không có điểm bắt đầu cụ thể.

Cú pháp:

driver.findElement(By.xpath("//input[@name=’Tutorial’]")).

Luôn khuyến khích dùng XPath tương đối thay vì tuyệt đối. Với XPath tuyệt đối, cần chỉ định từ gốc đến phần tử mong muốn nên nếu bất kỳ thuộc tính giá trị nào thay đổi ở giữa, XPath sẽ không còn chính xác.

Ví dụ

import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import java.util.concurrent.TimeUnit; public class TextMatch {    public static void main(String[] args) {       System.setProperty("webdriver.chrome.driver",    "C:\\Users\\ghs6kor\\Desktop\\Java\\chromedriver.exe");       WebDriver driver = new ChromeDriver();       String url = " https://www.tutorialspoint.com/questions/index.php";       driver.get(url);       driver.manage().window().maximize();       driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);       //identifying element with xpath       driver.findElement(By.xpath("//input[@class=’gsc-input’]")).click();       driver.close();    } }