0

我有一个不是“真实”复选框的复选框。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());
4

1 回答 1

1

您有句号/句号,空格应该在 XPath 中。

句点/句号仅适用于 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 开发者工具都可以用来执行 CSSXPath 选择器。因此,您可以查看问题出在 Selenium 还是您正在使用的选择器上。

于 2012-09-12T20:20:29.370 回答