2016-10-12 131 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个字母的机场代码进行搜索,例如“(曼)”​​为曼彻斯特。这对每个机场都是独一无二的,但您可以使用任何独特的文字部分。