如何单击Selenium中的嵌套链接

时间:2019-02-15 17:53:03

标签: java selenium

我试图单击我网站上带有Selenium的链接,但找不到任何成功的方法。

我的链接(我想单击Mitarbeiterverwaltung)位于嵌套的HTML内,当您将鼠标悬停时,链接将被下拉。

我可以获取链接文本,但不能单击链接。

这是我的HTML

<div class="dropdownAdmin">
    <button class="dropbtnAdmin" th:text="#{konto}">
        <i class="fa fa-caret-down"></i>
    </button>
    <div class="dropdown-content-admin">
        <div sec:authorize="hasAuthority('ADMIN')">
            <a href="/mitarbeiterverwaltung">Mitarbeiterverwaltung</a>
            <a href="/registration" th:text="#{benutzerregistrierung}"></a>
                        </div>
            <a href="/passwordaenderung" th:text="#{passwort_aendern}"></a>
                <div>
                  <a href="javascript: document.logoutForm.submit()" > Sign out </a>
                  <form name="logoutForm" th:action="@{/logout}" method="post" th:hidden="true">
                      <input hidden type="submit" value="Logout"/>
                  </form>
            </div>
        </div>
    </div>

这是我最后一次尝试使用Java

driver.findElement(By.xpath(".//div[@class='dropdownAdmin']//div[@class='dropdown-content-admin']").linkText("Mitarbeiterverwaltung")).click();

这是另一种尝试,目的是证明我能够看到链接文本:

List<WebElement> link_list = driver.findElements(By.xpath(".//div[@class='dropdownAdmin']//div[@class='dropdown-content-admin']//a").name("mitarbeiterverwaltung"));
for (int i=0;i<link_list.size();i++) {
    WebElement element = link_list.get(i);
    String contents = element.getAttribute("innerHTML");
    System.out.println("Values from dropdown is : "+contents);
}

也许有人可以给我一个很好的提示,说明如何解决我的问题。

谢谢。

2 个答案:

答案 0 :(得分:1)

根据您的声明,您需要将鼠标悬停在下拉菜单上,然后单击特定文本。我尝试了一下,但是由于我没有正在测试的应用程序,请尝试以下代码让我知道是否工作。

Actions action=new Actions(driver);
WebElement element=driver.findElement(By.xpath("//div[@class='dropdown-content-admin']"));
action.moveToElement(element).build().perform();        
System.out.println(driver.findElement(By.xpath("//a[contains(text(), 'Mitarbeiterverwaltung')]")).getText());
driver.findElement(By.xpath("//a[contains(text(), 'Mitarbeiterverwaltung')]")).click();

答案 1 :(得分:0)

我现在能够解决我的问题。

我必须先遍历所有s,然后单击一下。

也许有一个较短的版本,但很抱歉,我不知道,目前这是可行的。

动作构建器=新的动作(驱动程序);

WebElement element=driver.findElement(By.xpath("//div[@class='dropdownAdmin']"));
builder.moveToElement(element).build().perform();
WebElement elementa=driver.findElement(By.xpath("//div[@class='dropdown-content-admin']"));
driver.findElement(By.xpath("//a[contains(text(), 'Mitarbeiterverwaltung')]")).click();

String title = driver.getTitle();
assertTrue(title.contains("Mitarbeiterverwaltung"));