Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SeleniumWebDriver中使用xpath单击元素?(通常对我有效,但对这个特定url无效)_Selenium_Xpath_Webdriver - Fatal编程技术网

如何在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");