我需要单击Dropdown容器内的元素。我尝试了几次搜索,但是找不到正确的解决方案。 select方法不起作用,当没有ID,名称或类与其相关时,我仍然不知道如何使用选择器。这是HTML代码:
<a href="/account/settings/info"class="account-link">Account<span class="caret"></span></a>
<div class="account-dropdown__container">
<ul>
<li><a href="/account/settings/info" target="_self">Account</a></li>
<li><a href="/wedding-registry/invite" target="_self">Invite Friends</a></li>
<li><a href="/account/settings/credits" target="_self">Zola Store Credit</a></li>
<li><a href="/registry/settings/info" target="_self">Registry Settings</a></li>
<li><a href="/account/settings/orders" target="_self">Orders You've Placed</a></li>
<li><a>Log out</a></li>
</ul>
</div>
第一段代码是一个按钮,但是如果我将鼠标放在它上面,它将显示我正在谈论的Dropdown容器。如果我将鼠标放在其上而不单击,它将显示下拉列表的列表。 (而且我还想知道如何悬停元素以显示列表而不单击它,因为它是隐藏的。)
然后,我的问题是:如何单击注册表设置?
它没有ID,也没有类(尽管它在class account-dropdown__container
内)。我想我可以使用By.name("Registry Settings")
,但是除非打开下拉列表,否则它是不可见的,因此不会单击,并且会显示Css Selector not found
错误。想要帮助吗?谢谢!
此外,我在IntelliJ IDEA中使用Cucumber + Selenium + Java,其合成轴稍有变化,但是仍然与我在本论坛中发现的代码有所不同。因此,为什么我要为我的问题寻求具体的解决方案。
答案 0 :(得分:1)
您必须首先使下拉菜单可见。
就像在Selenium中一样,您不能仅将元素悬停,而必须一次完成所有操作。
检查以下内容:How to perform mouseover function in Selenium WebDriver using Java?
Actions action = new Actions(webdriver);
WebElement button = webdriver.findElement(By.class("account-link"));
action.moveToElement(button).moveToElement(webdriver.findElement(By.linkText("Registry Settings")).click().build().perform();
您可能需要等待一段时间才能显示下拉列表。我尚未测试过代码,您可能必须先对其进行修复。
答案 1 :(得分:0)
正如您提到的,将鼠标置于按钮上时,它将显示Dropdown容器。
可以在硒的帮助下自动进行相同操作:(我假设帐户是按钮)
Actions action = new Actions(driver);
action.moveToElement(driver.findElement(By.linkText("Account"))).build().perform();
现在您的下拉列表已展开或在UI中可见,并且您想单击注册表设置。由于下拉菜单不是使用 HTML 中可用的选择选项标签进行的。您不能使用硒中的选择类别。
您将必须将下拉列表中存在的所有元素存储到列表。然后根据某些条件,可以单击您的欲望元素。
代码:
List<WebElement> options = driver.findElements(By.cssSelector("div.account-dropdown__container ul li"));
for(WebElement option : options) {
if(option.getText().trim().contains("Registry Settings")) {
option.click();
}
}
希望这会有所帮助。