Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.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
Java 如何将文本发送到SeleniumWebDriver中使用autocomplete的搜索框_Java_Selenium_Selenium Webdriver_Webdriver_Webdriverwait - Fatal编程技术网

Java 如何将文本发送到SeleniumWebDriver中使用autocomplete的搜索框

Java 如何将文本发送到SeleniumWebDriver中使用autocomplete的搜索框,java,selenium,selenium-webdriver,webdriver,webdriverwait,Java,Selenium,Selenium Webdriver,Webdriver,Webdriverwait,我正在尝试使用此网站预订航班 有一个文本框,您可以开始键入您的航班始发地机场,它为您提供自动完成建议,即使在文本框上使用“inspect element”时,我也找不到该建议这是我找到的xpath: driver.findElement(By.xpath("//*[@id=\"select2-drop\"]/div/input")).click(); 我得到以下错误: Unable to locate element: {"method":"xpath","selector":"//*[@i

我正在尝试使用此网站预订航班

有一个文本框,您可以开始键入您的航班始发地机场,它为您提供自动完成建议,即使在文本框上使用“inspect element”时,我也找不到该建议这是我找到的xpath:

driver.findElement(By.xpath("//*[@id=\"select2-drop\"]/div/input")).click();

我得到以下错误:

Unable to locate element: {"method":"xpath","selector":"//*[@id="select2-drop"]/div/input"}

知道如何定位textbox元素吗

网站的HTML有点棘手。 您的输入
/*[@id='select2-drop']/div/input
是“隐藏的”(从html和selenium的角度)

您需要单击特定元素:
/*[@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);
(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");
如果您想编写更好的Selenium代码,我建议您阅读

使用显式等待,您的代码将如下所示:

//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);
(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());

}
//键入输入后,等待以确保已加载建议列表。
List List=driver.findElements(By.xpath(“/*[@id='select2-drop']/ul/li/div”);
用于(WebElement辅助:列表){
System.out.println(aux.getText());
}

网站的HTML有点棘手。
您的输入
/*[@id='select2-drop']/div/input
是“隐藏的”(从html和selenium的角度)

您需要单击特定元素:
/*[@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);
(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");
如果您想编写更好的Selenium代码,我建议您阅读

使用显式等待,您的代码将如下所示:

//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);
(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());

}
//键入输入后,等待以确保已加载建议列表。
List List=driver.findElements(By.xpath(“/*[@id='select2-drop']/ul/li/div”);
用于(WebElement辅助:列表){
System.out.println(aux.getText());
}

在网页
https://www.phptravels.net/
要单击FLIGHTS选项卡并将字符序列发送到搜索框示例Pune,您可以使用以下解决方案:

driver.get("https://www.phptravels.net/");
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//span[contains(.,'Flights')]"))).click();
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//span[@class='select2-chosen' and contains(.,'Enter City Or Airport')]")))click();
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='select2-search']/input[@class='select2-input select2-focused']"))).sendKeys("Pune");

在网页
https://www.phptravels.net/
要单击FLIGHTS选项卡并将字符序列发送到搜索框示例Pune,您可以使用以下解决方案:

driver.get("https://www.phptravels.net/");
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//span[contains(.,'Flights')]"))).click();
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//span[@class='select2-chosen' and contains(.,'Enter City Or Airport')]")))click();
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='select2-search']/input[@class='select2-input select2-focused']"))).sendKeys("Pune");

下面的代码可用于选择自动完成搜索框中的第一个建议值

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);

下面的代码可用于选择自动完成搜索框中的第一个建议值

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);


在找到文本框之前,请等待几秒钟,等待页面加载完成。我已经等待了,我可以看到获得文本框的页面,但仍然找不到元素。@tupacshakur网站有点棘手。你可以阅读我的答案来了解到底发生了什么,如果你不明白什么,请毫不犹豫地在那里留下评论。是的,我不知道如何定位元素以使其可见。当然,我有几件事需要理解:1。如何定位元素以使其可见?2.如何在开始键入名称时选择第一个选项,并选择自动完成建议的第一个匹配项?请等待几秒钟,以便页面加载完成,然后才能找到文本框。我已经等待了几秒钟,可以看到获得文本框的页面,但仍然找不到元素。@tupacshakur网站有点棘手。你可以阅读我的答案来了解到底发生了什么,如果你不明白什么,请毫不犹豫地在那里留下评论。是的,我不知道如何定位元素以使其可见。当然,我有几件事需要理解:1。如何定位元素以使其可见?2.当开始键入名称并选择自动完成建议的第一个选项时,如何选择第一个选项?谢谢Daniel,但我指的是“航班”选项卡,而不是酒店。@tupacshakur请查看我的更新答案并告诉我状态。谢谢!这正如预期的那样工作,但我不理解您放置的xpath,xpath字符串中包含什么?在开始键入机场名称时,您如何选择第一个建议?谢谢Daniel,但我指的是“航班”选项卡,而不是酒店。@tupacshakur查看我的更新答案,并让我知道状态。谢谢!这正如预期的那样工作,但我不理解您放置的xpath,xpath字符串中包含什么?当开始键入机场名称时,您如何选择第一个建议?是的,我不知道如何定位元素以使其可见。当然,我有几件事需要理解:1。如何定位元素以使其可见?2.当开始键入名称并选择自动完成建议的第一次出现时,如何选择第一个选项?好的,我尝试了一些方法,最终了解了如何操作。这是一个提高selenium webdriver技能的好网站!我尝试做的是,在我完成航班搜索后,我希望能够使用“driver.findelements(by.xpath(“”)”将所有搜索结果存储到一个列表中。我该怎么做@KunLun@tupacshakur看看我的新编辑。如果有什么不清楚的地方,你想谈谈,你可以在聊天室的链接上留言,我会在我可以的时候回答(只需定期检查)。是的,我不知道如何定位元素以使其可见。当然,我有几件事要了解:1.如何定位元素以使其可见?2.如何在开始键入名称时选择第一个选项并选择自动完成建议的第一个匹配项?好的,我尝试了一些方法,最终了解了如何做吧。这是一个提高selenium webdriver技能的好网站!我尝试做的是在完成航班搜索后,我希望能够使用“driver.findelements”将所有搜索结果存储到列表中(