2016-11-04 3 views
0

У меня возникли трудности с сложным выбором, который не будет работать с обычными методами Selenium api. Итак, я должен использовать Javascript-исполнителя. Я до сих пор не смог правильно выбрать параметры из раскрывающегося списка = Откуда? и Какое место назначения?Использование Javascript Executor для выбора из тега Select

С приведенным ниже кодом страница, кажется, обновляется, когда я нажимаю «Поиск». Может быть, селектор css, переданный JS, ошибочен?

Сайт тестируемый: https://club18-30.com/club18-30

private String whereFromText = "LGW" 
private String whereToText = "IBZ" 

    public void setDepartureAirport(String whereFromText) 
    selectOption(whereFromText); 
} 

    public void setDestinationAirport(String whereToText) { 
    selectOption(whereToText); 
} 

    public void submitSearchRequest() throws InterruptedException { 
    By searchButtonLocator = By.xpath(searchButtonLocatorPath); 
    click(searchButtonLocator); 

    By searchResultsLocator = By.xpath(searchResultsLocatorPath); 
    waitForIsDisplayed(searchResultsLocator, 180); 
} 


public void selectOption(String option) { 
    String script = 
      "function selectOption(s) {\r\n" + 
        " var sel = document.querySelector('.custom-select-options');\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); 
} 
+0

Ваше заявление запрашивает учетные данные. Не могли бы вы предоставить учетные данные или дать нам HTML? – Buaban

+0

@Buaban - нет учетных данных? Я не вижу учетных данных в любом месте – Steerpike

+0

Вы можете сохранить учетные данные, или ваш компьютер может находиться в том же домене, чтобы он автоматически аутентифицировался. – Buaban

ответ

0

Ваш JavaScript почти правильно, за исключением выражения CSSSelector. Это должно быть ".destinationAirport .custom-select" для аэропорта назначения и ".arrivalAirport .custom-select" для прибытия аэропорта. Тем не менее, я пробовал с js, но приложение показывает ошибку при нажатии кнопки отправки. Поэтому вам может потребоваться щелкнуть и выбрать значение в графическом интерфейсе. См. Код ниже:

String destination = "Glasgow - Scotland (GLA) United Kingdom"; 
String arrival = "Ibiza - Balearic Islands (IBZ) Spain"; 
driver.findElement(By.cssSelector(".destinationAirport .custom-select")).click(); 
driver.findElement(By.xpath("//*[contains(@class,'destinationAirport')]//li[text()='" + destination + "']")).click(); 
driver.findElement(By.cssSelector(".arrivalAirport .custom-select")).click(); 
driver.findElement(By.xpath("//*[contains(@class,'arrivalAirport')]//li[text()='" + arrival + "']")).click(); 
driver.findElement(By.cssSelector(".searchButton")).click(); 
+0

ОТВЕТСТВЕННОСТЬ за ответ. К сожалению, страница, кажется, обновляется после выбора аэропорта назначения и, следовательно, сценарий не работает. Не уверен, что еще попробовать! – Steerpike

+0

@Steerpike Этот скрипт хорошо работает на моей машине (jdk8, chrome). Какой браузер вы используете? – Buaban

+0

Я пробовал последние хромированные и firefox, а также используя Java 8, обновляет страницы и не удается найти – Steerpike