我有一个不是“真实”复选框的复选框。 CSS看起来像:
<li id="privileges:1" class="ui-tree-parent default" data-rowkey="1">
<div class="ui-tree-node ui-state-default" aria-checked="true" aria-selected="true" aria-expanded="true" role="treeitem">
<span class="ui-helper-clearfix ui-tree-node-content ui-corner-all ui-tree-selectable-node">
<span class="ui-tree-icon ui-icon ui-icon-triangle-1-s"></span>
<span></span>
<div class="ui-tree-checkbox ui-widget">
<div class="ui-tree-checkbox-box ui-widget ui-corner-all ui-state-default">
<span class="ui-tree-checkbox-icon ui-icon ui-icon-check"></span>
选中复选框后会出现最后一个跨度。
我的同事有以下代码,经过审核后似乎是黑魔法并且不应验证任何内容:
WebElement checkedBox = findElementByXpath("//li[@id='privileges:1']/div[@aria-checked='true']/span/div/div");
@SuppressWarnings("unused")
Boolean isChecked;
isChecked = checkedBox.findElement(By.xpath("//li[@id='privileges:1']/div[@aria-checked='true']/span/div/div")).isSelected();
使用Selenium2 / Webdriver检查验证复选框的最佳方法是什么?
这不起作用:
WebElement checkedBox = findElementByClass("//li[@id='privileges:1']/div/span/div/div/span[@class='ui-tree-checkbox-icon.ui-icon.ui-icon-check']");
assertTrue(checkedBox.isEnabled());
也不是:
WebElement checkedBox = findElementByClass("//li[@id='privileges:1']/div/span/div/div/span[@class='ui-tree-checkbox-icon.ui-icon.ui-icon-check']");
assertTrue(checkedBox.isDisplayed());
答案 0 :(得分:1)
你有句点/句点,空格应该在XPath中。
句点/ fullstop仅适用于CSS选择器。此外,您似乎正在使用By ClassName函数并传入XPath查询。我认为这只是一个错字。
这就是你所拥有的:
//li[@id='privileges:1']/div/span/div/div/span[@class='ui-tree-checkbox-icon.ui-icon.ui-icon-check']
应该是:
//li[@id='privileges:1']/div/span/div/div/span[@class='ui-tree-checkbox-icon ui-icon ui-icon-check']
提示以防您不知道:如果您打开Chrome开发者工具,请直接转到控制台,输入:
$x("//li[@id='privileges:1']/div/span/div/div/span[@class='ui-tree-checkbox-icon.ui-icon.ui-icon-check']")
你会看到它什么都不返回。
对此做同样的事情:
$x("//li[@id='privileges:1']/div/span/div/div/span[@class='ui-tree-checkbox-icon ui-icon ui-icon-check']")
它会返回一些东西。 Firebug和Chrome Developer工具都可用于执行CSS 和 XPath选择器。因此,您可以查看Selenium或您正在使用的选择器是否存在问题。