ตัวระบุตำแหน่งแต่ละตัวมีความสำคัญบางอย่าง หากหน้ามีความไม่ซ้ำกัน
ค่าแอตทริบิวต์ เราควรใช้ก่อน อย่างไรก็ตาม หากไม่มีองค์ประกอบเฉพาะ เราควรใช้ตัวเลือก css เนื่องจากจะมีประสิทธิภาพมากกว่าในแง่ของความเร็ว
Css ยังมีข้อเสียที่เราไม่สามารถข้ามจากโหนดลูกไปยังโหนดหลักได้ ซึ่งหมายความว่าเราไม่สามารถเดินทางย้อนกลับได้ แต่ xpath อนุญาตคุณลักษณะนี้ Xpath เป็นตัวระบุตำแหน่งที่พบบ่อยที่สุดใน Selenium และทำการสำรวจผ่านองค์ประกอบและแอตทริบิวต์ของ DOM เพื่อระบุวัตถุ
xpath ถูกแสดงด้วยสองวิธีคือ '/' และ '//' สแลชเดียวไปข้างหน้าหมายถึงเส้นทางที่แน่นอน ที่นี่ xpath ลัดเลาะจากพาเรนต์ถึงลูกใน DOM ดังนั้นใน xpath แบบสัมบูรณ์ เราจึงต้องเดินทางจากโหนดรูทไปยังเป้าหมาย
ไวยากรณ์ −
driver.findElement(By.xpath("/html/body/div/input")). double forward '//' เครื่องหมายทับหมายถึงเส้นทางสัมพัทธ์ ที่นี่ xpath พบองค์ประกอบที่ตรงกันในทุกมุมของ DOM มันไม่มีจุดเริ่มต้นเฉพาะ
ไวยากรณ์ −
driver.findElement(By.xpath("//input[@name=’Tutorial’]")). ขอแนะนำให้ใช้ xpath แบบสัมพัทธ์เสมอ แทนที่จะใช้ xpath แบบสัมบูรณ์ ใน xpath แบบสัมบูรณ์ เราจำเป็นต้องระบุจากรูทไปยังองค์ประกอบที่ต้องการ ดังนั้นหากมีการเปลี่ยนแปลงแอตทริบิวต์ใดๆ และค่าของมันในระหว่างนั้น xpath ของเราจะไม่ถูกต้องอีกต่อไป
ตัวอย่าง
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();
}
}