2016-10-12 127 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個字母的機場代碼進行搜索,例如「(曼)」​​爲曼徹斯特。這對每個機場都是獨一無二的,但您可以使用任何獨特的文字部分。