【问题标题】:Unable to click sub menu with Link attribute in Selenium Webdriver无法在 Selenium Webdriver 中单击具有链接属性的子菜单
【发布时间】:2015-08-18 11:33:14
【问题描述】:

我是 Selenium webdriver 的新手。我的网站有一个带有更多子菜单的菜单按钮。可以通过将鼠标悬停在菜单按钮上或单击它来访问子菜单按钮。各种组合我都试过了,到现在都没有成功。源码是:

div class="divAPOAppMenu">
<ul id="projectDashboardMenu" class="sf-menu sf-js-enabled sf-arrows">
   <li>
   <li class="">
   <a class="sf-with-ul" href="#">Manage Assessment</a>
   <ul style="display: none;">
   <li>
       <a id="btnAddAssessment">
       <img style="height: 20px; width: 20px; float: left; margin-right: 5px; border: none;" src="../../Images/AddIcons.png" alt="">
       New Assessment
       </a>
       </li>

我正在尝试单击带有“新评估”文本的子菜单:

Actions action=new Actions(driver);
WebElement moveToManageAssessmnt = driver.findElement(By.linkText("Manage Assessment"));
action.moveToElement(moveToManageAssessmnt).moveToElement(driver.findElement(By.linkText("New Assessment"))).click().perform();

这行不通。 我也尝试过使用:

driver.findElement(By.linkText("Manage Assessment")).click();
driver.findElement(By.linkText("New Assessment")).click();

对于如何继续,我束手无策,没有可用的指导。有人可以建议我如何单击子菜单按钮吗?任何形式的帮助将不胜感激!提前谢谢!!!

【问题讨论】:

    标签: selenium selenium-webdriver


    【解决方案1】:

    这样试试

    Actions mouseAction = new Actions(driver);
        mouseAction.moveToElement(driver.findElement(By.linkText("Manage Assessment")).perform();
        mouseAction.moveToElement(driver.findElement(By.linkText("New Assessment")).click().perform();
    

    【讨论】:

    • 非常感谢!这行得通。我还必须添加一个明确的等待。谢谢您的帮助 !!! :)
    • 接受适当的答案,因为它会帮助别人
    【解决方案2】:

    试试这个:

    driver.FindElement(By.Xpath("//ul[contains(@id, 'projectDashboardMenu')]/a[contains(text(), 'Manage Assessment']").click();
    

    【讨论】:

    • 感谢 Mystia 的输入。另一方面,您能否告诉我是否有一些很好的定位 Xpath 的教程,因为我还没有完全理解这个概念!
    • @Cerberus 有一个名为 firepath 的附加组件,可用于查找 xpath。
    • 感谢山塔努!我目前在 Firefox 上使用 Xpath Checker。我想更深入地了解绝对和相对 xpath 以及语法。到目前为止,我遇到的材料并没有太大帮助!
    【解决方案3】:

    您刚刚了解到(无意中)Selenium 不会(默认情况下,您可以通过谷歌搜索解决方法)与用户不可见的WebElement 进行交互。所以......你不能点击子菜单,直到你用悬停来显示它。我编写了一个悬停元素的函数来处理第一部分。

    public static void hoverElement(WebDriver driver, WebElement element)
    {
        Actions builder = new Actions(driver);
        builder.moveToElement(element).perform();
    }
    

    悬停后,您应该能够单击所需的元素。

    hoverElement(driver, driver.findElement(By.linkText("Manage Assessment")));
    driver.findElement(By.linkText("New Assessment")).click();
    

    【讨论】:

    • 哦对了!!该死 !这对我来说应该很明显!这是常识!!非常感谢杰夫! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多