如何在SeleniumWebDriver中使用xpath单击元素?(通常对我有效,但对这个特定url无效)
我正在尝试使用如何在SeleniumWebDriver中使用xpath单击元素?(通常对我有效,但对这个特定url无效),selenium,xpath,webdriver,Selenium,Xpath,Webdriver,我正在尝试使用xpath 通常它适用于所有URL。。但是对于这个特定的url,无论我尝试什么,我都无法使用selenium webdriver单击输入字段 Webdriver加载页面,但不会单击元素。 这就是我迄今为止所尝试的:(这是一个使用SeleniumWebDriver实现测试自动化的java项目) 我试图首先使用xpath单击div元素,因为只有我得到了输入字段。 然后尝试使用xpath将“Toronto”发送到输入字段 欢迎提供任何帮助或建议 这里,id是动态更改的。因此,您需要使用其
xpath
通常它适用于所有URL。。但是对于这个特定的url,无论我尝试什么,我都无法使用
selenium webdriver
单击输入字段
Webdriver加载页面,但不会单击元素。这就是我迄今为止所尝试的:(这是一个使用SeleniumWebDriver实现测试自动化的java项目) 我试图首先使用
xpath
单击div元素
,因为只有我得到了输入字段。然后尝试使用
xpath
将“Toronto”发送到输入字段
欢迎提供任何帮助或建议 这里,id是动态更改的。因此,您需要使用其他unqiue引用查找元素,并且需要将
searchfield1
的Xpath定位器更改为//div[@class='search-form-internal']//div[@data placeholder='From?
]
searchfield2
元素可以使用name属性找到。在发送密钥之前,您需要执行清除操作。因为,一些数据已预先填充在源字段中
最佳做法是在加载URL后添加一些等待,以完成页面加载
工作代码:
driver.get("https://www.kayak.com/flights");
WebDriverWait wait=new WebDriverWait(driver,20);
wait.until(ExpectedConditions.titleContains("Flights"));
WebElement searchfield1 = driver.findElement(By.xpath("//div[@class='search-form-inner']//div[@data-placeholder='From?']"));
searchfield1.click();
wait.until(ExpectedConditions.visibilityOfElementLocated(By.name("origin")));
WebElement searchfield2 = driver.findElement(By.name("origin"));
searchfield2.clear();
searchfield2.sendKeys("Toronto");
您的定位器
/*[@id='c5NwV-origin-airport']
不返回匹配项,而/*[包含(@id'-origin-airport')]
返回16个匹配项。您要将密钥发送给哪一个?同样地,/*[@id='c5NwV-origin-airport-display']
也不会为我返回匹配项。这显然是一个动态创建的ID,您需要使用其他信息缩小定位器的范围。@Bill Hileman这是我第一次处理动态ID,谢谢您的帮助。这正是我要找的。@Bill Hileman,当我选择16种可能性中的第一种时,它会正确单击, Thanks@Nimalkrishna字体很高兴知道这有帮助!
driver.get("https://www.kayak.com/flights");
WebDriverWait wait=new WebDriverWait(driver,20);
wait.until(ExpectedConditions.titleContains("Flights"));
WebElement searchfield1 = driver.findElement(By.xpath("//div[@class='search-form-inner']//div[@data-placeholder='From?']"));
searchfield1.click();
wait.until(ExpectedConditions.visibilityOfElementLocated(By.name("origin")));
WebElement searchfield2 = driver.findElement(By.name("origin"));
searchfield2.clear();
searchfield2.sendKeys("Toronto");