如何处理隐藏的选择下拉菜单
Faced the situation when using Select class, selenium complains that "element not interactable".
driver.findElement(By.cssSelector("div.select")).click();
Select select = new Select(driver.findElement(By.id("phonePrefix")));
select.selectByIndex(5);
无论如何,我找到了一种通过循环列表并按文本选择来从下拉列表中选择元素的方法......
driver.findElement(By.cssSelector("div.select")).click();
WebElement drop = driver.findElement(By.cssSelector("select"));
List<WebElement> countryies = driver.findElements(By.cssSelector("ul[class='select-options'] li"));
for(WebElement i:countryies) {
System.out.println(i.getText());
if(i.getText().contains("+93 Afghanistan")) {
i.click();
break;
}
}
但问题是为什么我不能使用 Select 类和select.getFirstSelectedOption() 以及如何处理这个问题? Thnx
P.s 还尝试了一些显式等待。
driver.get("https://banking.idram.am/Account/login");
driver.findElement(By.cssSelector("div.select")).click();
wait.until(ExpectedConditions.elementToBeClickable(By.id("phonePrefix")));
Select select = new Select(driver.findElement(By.id("phonePrefix")));
select.selectByIndex(5);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
根据您使用 HTML 代码发布的图像,您应该以这种方式从下拉列表中选择项目:
如果使用 Selenium 3,请删除
Duration.ofXXX()
并直接将数值传递给构造函数。正如您从发布的代码片段中看到的,
Select
元素使用select-hidden
类来实现下拉菜单。因此,Selenium 不能与其相互作用。此应用程序使用的内容称为Bootstrap Dropdown。此外,确定使用哪一个(即 select 与 ul/li)的最简单方法是检查页面并选择其中一个选项。当您执行此操作时,它将转到li
元素而不是option
元素。Based on the image you posted with the HTML code, you should select the item from the dropdown in this manner:
If using Selenium 3, remove the
Duration.ofXXX()
and just pass the numeric values directly to the constructor.As you can see from the posted snippet,
Select
element is usingselect-hidden
class to implement the dropdown. Therefore, Selenium cannot interact with it. What this application is using is called a Bootstrap Dropdown. Also, the easiest way to figure out which one to use (i.e. select vs. ul/li) is by inspecting the page and select one of the options. When you do this, it goes to theli
element rather than to theoption
element.