这是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:元素当前不可见,因此可能无法与
进行交互
答案 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