任何人都可以为我提供一个故障保护(ish)方法,用于从我正在练习的此页面上的下拉列表中选择文本吗?
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但是还没有能够使这些Selects能够使用常规的Selenium Select机制
答案 0 :(得分: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)”。这对每个机场都是独一无二的,但您可以使用文本的任何独特部分。