Как отправить текст в окно поиска, которое использует автозаполнение в Selen Webdriver - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь забронировать рейс с помощью этого сайта https://www.phptravels.net/

есть текстовое поле, в котором вы можете начать вводить аэропорт отправления вашего рейса, оно предлагает вам подсказку для автозаполнения, которую я не могу найти, даже когда я использовал 'проверитьelement 'в текстовом поле. Это найденный мной xpath:

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

enter image description here

Я получаю следующую ошибку:

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

Есть идеи, как найти элемент textbox?

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

На веб-странице https://www.phptravels.net/ нажмите на вкладку РЕЙСЫ и отправьте последовательность символов в пример окна поиска Пуна . Вы можете использовать следующее решение:

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");
0 голосов
/ 30 ноября 2018

Код ниже может использоваться для выбора первого предложенного значения в поле поиска автозаполнения.

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);
0 голосов
/ 30 ноября 2018

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, я рекомендую вам прочитать о явное ожидание .

Используя явное ожидание, ваш код будет выглядеть так:

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...