ตัวระบุตำแหน่งแต่ละตัวมีความสำคัญบางอย่าง หากหน้ามีความไม่ซ้ำกัน
ค่าแอตทริบิวต์ เราควรใช้ก่อน อย่างไรก็ตาม หากไม่มีองค์ประกอบเฉพาะ เราควรใช้ตัวเลือก 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(); } }