我正在尝试使用此网站https://www.phptravels.net/
预订航班有一个文本框,您可以开始输入航班始发机场,它会为您提供自动完成建议,即使我在文本框中使用了“检查元素”,我也无法找到它,这是我发现的xpath:
driver.findElement(By.xpath("//*[@id=\"select2-drop\"]/div/input")).click();
我遇到以下错误:
Unable to locate element: {"method":"xpath","selector":"//*[@id="select2-drop"]/div/input"}
任何想法如何找到textbox元素?
答案 0 :(得分:2)
网站的HTML有点棘手。
您的输入//*[@id='select2-drop']/div/input
是“隐藏的”(HTML和硒的观点)。
您需要单击特定元素://*[@id='flights']/form/div[1]
以使其“可见”。
所以您的代码必须像这样:
//After click on FLIGHTS...
driver.findElement(By.xpath("//*[@id='flights']/form/div[1]")).click();
Thread.sleep(2*1000);
driver.findElement(By.xpath("//*[@id='select2-drop']/div/input")).sendKeys("Moon");
Thread.sleep(2*1000);
如果您想编写更好的Selenium代码,建议您阅读explicit wait。
使用显式等待,您的代码将如下所示:
(new WebDriverWait(driver, 10)).until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@id='flights']/form/div[1]"))).click();
(new WebDriverWait(driver, 10)).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id='select2-drop']/div/input")).sendKeys("Moon");
看起来更糟,但是更好。
编辑1
要获取建议列表:
//after type in input, put a wait to be sure the suggestion list is loaded.
List<WebElement> list = driver.findElements(By.xpath("//*[@id='select2-drop']/ul/li/div"));
for(WebElement aux : list) {
System.out.println(aux.getText());
}
答案 1 :(得分:0)
在网页GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer());
上单击航班标签,并将字符序列发送到搜索框示例 Pune ,您可以使用以下解决方案:< / p>
https://www.phptravels.net/
答案 2 :(得分:0)
下面的代码可用于在自动完成搜索框中选择第一个建议值。
new WebDriverWait(driver,
20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='select2-
search']/input[@class='select2-input select2-focused']"))).sendKeys(Keys.ArrowDown);
new WebDriverWait(driver,
20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='select2-
search']/input[@class='select2-input select2-focused']"))).sendKeys(Keys.Enter);