在id、name、xpath和css中,应该使用哪个定位器?
javascriptweb development
每个定位器都有一定的意义。如果页面包含唯一的
属性值,我们应该首先使用它们。但是,如果没有唯一的元素,我们应该使用css选择器,因为它在速度方面更有效。
Css还有一个缺点,我们不能从子节点遍历到父节点,这意味着我们不能向后移动。但xpath允许这个特性。Xpath是Selenium中最常见的定位器,它通过遍历DOM元素和属性来识别对象。
xpath用两种方式表示,即‘/‘和‘//‘。正向单斜杠表示绝对路径。这里xpath在DOM中从父节点直接遍历到子节点。因此,在绝对 xpath 中,我们必须从根节点移动到目标。
语法 −
driver.findElement(By.xpath("/html/body/div/input")).
双正向 ‘// ‘斜杠表示相对路径。此处 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(); } }