Mỗi bộ định vị đều có một số ý nghĩa. Nếu trang chứa duy nhất
các giá trị thuộc tính, chúng ta nên sử dụng chúng trước. Tuy nhiên, nếu không có phần tử duy nhất, chúng ta nên sử dụng bộ chọn css vì nó hiệu quả hơn về mặt tốc độ.
Css cũng có một nhược điểm là chúng ta không thể duyệt từ nút con đến nút cha, nghĩa là chúng ta không thể đi lùi. Nhưng xpath cho phép tính năng này. Xpath là công cụ định vị phổ biến nhất trong Selenium và thực hiện chuyển tải thông qua các phần tử và thuộc tính DOM để xác định một đối tượng.
Một xpath được biểu diễn bằng hai cách là ‘/‘ và ‘//‘. Một dấu gạch chéo về phía trước có nghĩa là đường dẫn tuyệt đối. Ở đây xpath truyền trực tiếp từ cấp độ gốc sang cấp độ con trong DOM. Do đó, trong xpath tuyệt đối, chúng ta phải đi từ nút gốc đến đích.
Cú pháp -
driver.findElement(By.xpath("/html/body/div/input")).
Dấu gạch chéo ‘//‘ kép về phía trước có nghĩa là đường dẫn tương đối. Ở đây xpath tìm phần tử phù hợ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’]")).
Bạn nên sử dụng xpath tương đối hơn là xpath tuyệt đối. Trong xpath tuyệt đối, chúng ta cần chỉ định từ gốc đến phần tử mong muốn, vì vậy nếu bất kỳ thuộc tính nào và giá trị của nó bị thay đổi ở giữa, thì xpath của chúng ta sẽ không còn đúng nữa.
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(); } }