2016-10-12 3 views
1

Может ли кто-нибудь предоставить мне отказоустойчивый метод (ish) для выбора текста из выпадающих списков на этой странице, на котором я занимаюсь?Невозможно выбрать вариант из раскрывающегося списка с помощью JavascrtptExecutor

https://www.club18-30.com/club18-30

В частности, 'от' и 'до' выпадающего аэропорта. Я использую следующий код:

public void selectWhereFrom(String query, String whereFromSelect) throws InterruptedException { 
    WebElement dropDownContainer = driver.findElement(By.xpath(departureAirportLocator)); 
    dropDownContainer.click(); 

    selectOption(query,whereFromSelect); 
} 

public void selectOption(String query, String option) { 
    String script = 
      "function selectOption(s) {\r\n" + 
        " var sel = document.querySelector(' " + query + "');\r\n" + 
        " for (var i = 0; i < sel.options.length; i++)\r\n" + 
        " {\r\n" + 
        "  if (sel.options[i].text.indexOf(s) > -1)\r\n" + 
        "  {\r\n" + 
        "   sel.options[i].selected = true;\r\n" + 
        "   break;\r\n" + 
        "  }\r\n" + 
        " }\r\n" + 
        "}\r\n" + 
        "return selectOption('" + option + "');"; 

    javaScriptExecutor(script); 
} 

Это, кажется, успешно заполнить окно с текстом, но когда я ударил «Поиск», то я получаю сообщение о том, нужно выбрать вариант, предлагая его не зарегистрировал выбор ?

я предпочел бы избежать JavaScriptExecutor, но не смогли сделать эти Выбирается работать с обычным Селен Выбор механизма

ответ

0

Я создал функцию для каждого выпадающего списка, один для установки аэропорт вылета и другой для установки аэропорт назначения. Я тестировал код ниже, и он работает.

Функции

public static void setDepartureAirport(String airport) 
{ 
    driver.findElement(By.cssSelector("div.departureAirport div.departurePoint")).click(); 
    String xpath = "//div[contains(@class, 'departurePoint')]//ul//li[contains(@class, 'custom-select-option') and contains(text(), '" 
      + airport + "')]"; 
    driver.findElement(By.xpath(xpath)).click(); 
} 

public static void setDestinationAirport(String airport) 
{ 
    driver.findElement(By.cssSelector("div.destinationAirport div.airportSelect")).click(); 
    String xpath = "//div[contains(@class, 'destinationAirport')]//ul//li[contains(@class, 'custom-select-option') and contains(text(), '" 
      + airport + "')]"; 
    driver.findElement(By.xpath(xpath)).click(); 
} 

и вы называете их, как

driver.get("https://www.club18-30.com/club18-30"); 
setDepartureAirport("(MAN)"); 
setDestinationAirport("(IBZ)"); 

Я хотел бы предложить вам использовать коды аэропортов 3 букв для поиска, например, «(MAN)» для Манчестера. Это будет уникально для каждого аэропорта, но вы можете использовать любую уникальную часть текста.

Смежные вопросы