Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

ในบรรดา id, name, xpath และ css ควรใช้ตัวระบุตำแหน่งใด


ตัวระบุตำแหน่งแต่ละตัวมีความสำคัญบางอย่าง หากหน้ามีความไม่ซ้ำกัน

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