2016-11-04 2 views
0

일반적인 Selenium API 방법으로는 작동하지 않는 까다로운 선택 문제가 있습니다. 그래서 Javascript executor를 사용해야합니다. 지금까지 드롭 다운에서 옵션을 올바르게 선택할 수 없음 = 어디에서 왔습니까? 그리고 어떤 목적지?Javascript Executor를 사용하여 Select 태그에서 선택

아래 코드를 사용하면 '검색'을 클릭하면 페이지가 새로 고쳐집니다. 아마도 JS로 전달 된 CSS 선택기가 잘못 되었습니까? 시험

웹 사이트는 다음과 같습니다 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

자바 스크립트는 CssSelector 표현을 제외하고 거의 정확합니다. 대상 공항은 ".destinationAirport .custom-select"이고 도착 공항은 ".arrivalAirport .custom-select"이어야합니다. 그러나 js 함께 시도했지만 응용 프로그램을 클릭하면 단추를 클릭하면 오류가 표시됩니다. 따라서 GUI에서 값을 클릭하여 선택해야 할 수 있습니다. 아래 코드를 참조하십시오.

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

나는 최신 크롬과 파이어 폭스를 사용해 보았고 Java 8을 사용하여 페이지를 새로 고치고 검색하지 못했습니다. – Steerpike

관련 문제