如何使用Java使用Selenium WebDriver访问不可见的无序列表元素

时间:2015-06-07 20:12:13

标签: java select selenium selenium-webdriver html-lists

这是HTML代码:

<ul id="personalBar">
    <li id="upload" style="display:none;"></li>
    <li id="personal">
        <span class="translate"></span>
        <span id="userName">qaadmin</span>
        <div id="dropDownArrow"></div>
        <ul>
            <li id="pendingActivities" class="translate" onclick="eCommon.helper.viewAllPendingActivities()" translatekey="MANAGE_STORE">Manage Store</li>
            <li class="translate" onclick="eCommon.helper.outSourceViewReports()" translatekey="UM_REPORT_MENU">Reports</li>
            <li id="learnMore" class="translate" onclick="eCommon.helper.outSourceLearnMore()" translatekey="BANNER_THIRD_MSG">Learn more about einstein™</li>
            <li id="DownloadEinstein" class="translate" onclick="eCommon.helper.outSourceLearnMore()" translatekey="BANNER_FOURTH_MSG">Download the einstein™ World app.</li>
            <li class="translate" onclick="location.reload();" translatekey="CREATE_EINSTEIN_ACIVITIES">Create einstein™ Activities</li>
            <li class="translate" onclick="eCommon.helper.outSourceGetEinsteinActivities()" translatekey="GET_EINSTEIN_ACTIVITIES">Get einstein™ Activities</li>
            <li class="translate" onclick="eCommon.helper.outSourceManageYourEinsteinAccount()" translatekey="MANAGE_YOUR_EINSTEIN_ACCOUNT">Manage your einstein™ Account</li>
            <li id="logOut" class="translate" onclick="am.UserManagement.doLogOut(false)" translatekey="LOGOUT">Logout</li>
        </ul>
    </li>
</ul>  

列表中的项目数量因用户权限而异,因此列表中的每个元素编号都不固定。

列表通常是关闭的,只有通过点击它才会打开。 所以:

Select dropdown = new Select(driver.findElement(By.id("personalBar")));
dropdown.selectByVisibleText("Get einstein™ Activities");  

提出错误:

  

org.openqa.selenium.support.ui.UnexpectedTagNameException:元素应该是“select”但是“ul”

尝试时:

driver.findElement(By.xpath("//li[contains(text(),'Manage your einstein™ Account')][@class='translate']")).click();  

失败了:

  

org.openqa.selenium.ElementNotVisibleException:元素当前不可见,因此可能无法与

进行交互

3 个答案:

答案 0 :(得分:1)

以下应该有帮助 -

driver.findElement(By.id("personal")).findElement(By.id("dropDownArrow")).click();  
driver.findElement(By.xpath("//li[contains(text(),'Manage your einstein™ Account')][@class='translate']")).click();  

答案 1 :(得分:0)

首先,您无法使用ul -> li抽象来Select - 它旨在与select -> option一起使用。

第二种方法失败,因为您首先需要点击ul打开列表

WebElement personalList = driver.findElement(By.cssSelector("ul#personalBar li#personal ul"));
personalList.click();

personalList.findElement(By.xpath("//li[contains(text(),'Manage your einstein™ Account')][@class='translate']")).click();  

这是一般的想法 - 首先打开列表,然后点击一个项目 - 我可能在代码和细节方面不准确,因为我无法重现问题并测试提案。

答案 2 :(得分:-1)

如果有三个级联div,那么找到的代码就像这样:

首先按ID div找到主BodyContainer,然后按ID connectionParent找到无序列表,然后按ID divAddNewGroup_0找到列表,然后使用{{找到我需要的按钮(+) 1}}:

By.xpath