【发布时间】:2017-10-30 22:20:39
【问题描述】:
我是一名学习 selenium 的学生,并试图设置一个与目标文档位于同一行的复选框(通过打勾)。以下是该行的外观:
<span><input>Checkbox</input></span> - <span>_lblDocumentCategoryDescription</span> - <span>_lblDocumentdescription</span>
每一行都包含该行的复选框、类别和说明。我提供了描述,需要在行的开头设置相应的复选框。
虽然我有一个可行的解决方案,但我正在寻找一种更好的方法,因为我的方法非常慢,而且我可以多次调用它,从而加剧了缓慢。有问题的页面有 315 个固定的不同文档,可能会添加(到合并和打印功能)。我通常添加至少 3 行所以需要运行搜索
我目前正在使用 xpath 进行搜索,因为我对 CSS 的了解有限,而且似乎遍历 DOM(没有 :parent?)并不容易,除非使用一些我试图避免的 JavaScript。我读过执行 JS 不能正确模拟用户,所以我猜 xpath 是解决方案?
据我所知,必须有一个更快/更好/更有效的解决方案,我希望其他人可能会找到更好的解决方案?
这是我目前使用的:
方法调用 CPTools,setStupidCheckbox("转租附录", true);
方法:
public CPTools setStupidCheckbox(String documentToPrint, Boolean onIfTrue) {
this.log.trace("Starting: setStupidCheckbox; parameter: documentToPrint " + documentToPrint);
String xpathForCheckboxes = "/ancestor::tr//input";
try {
String xpathForDocumentDescriptions = String.format("//span[contains(text(), '%s')]", documentToPrint);
tools.waitForElement(By.xpath(xpathForDocumentDescriptions), 2);
if (driver.findElement(By.xpath(xpathForDocumentDescriptions)).isDisplayed()) {
driver.findElementByXPath(xpathForDocumentDescriptions + xpathForCheckboxes).click();
}
} catch (org.openqa.selenium.NoSuchElementException | ElementNotVisibleException e) {
}
this.log.trace("Ending: setStupidCheckbox");
return this;
}
这是表格行的完整 xpath(id 的动态部分是 _ctl316):
<tr class="DataGridCellData">
<td class="DataGridCellDataCenterAligned">
<span class="DataLabel"><input id="ctl01_PageBody_grdDocument_ctl316_chkSelect" name="ctl01$PageBody$grdDocument$ctl316$chkSelect" onclick="javascript:uiHelper.GridCellCheck(this, 'chkAllSelect');" type="checkbox"></span>
</td><td>
<span id="ctl01_PageBody_grdDocument_ctl316_lblDocumentCategoryDescription">Approval Form</span>
</td><td align="left">
<span id="ctl01_PageBody_grdDocument_ctl316_lblDocumentdescription">Sublease Addendum</span>
</td><td align="center">
</td>
</tr>
提前感谢您提供任何可能的帮助。
【问题讨论】:
-
你想得到哪个元素?
-
“//input[contains(@onclick, 'chkAllSelect')]”怎么样?
-
抱歉我的问题含糊不清 - 我正在尝试检查复选框,但其中有 315 个 - 我知道的唯一参考是文档描述范围中将出现的文本(转租附录)。
-
@TarunLalwani - 感谢您的评论 - 但是 xpath 将选择第一个复选框,因为所有 315 都具有相同的 onclick。
-
文本
Approval Form或Sublease Addendum是否与复选框相关?您的单元格的文本是否不同?
标签: selenium xpath selenium-webdriver internet-explorer-11