如何计算与我的CSS选择器匹配的元素数量?

时间:2009-10-15 15:37:00

标签: selenium css-selectors selenium-rc

我正在尝试使用SeleniumRC来测试我的GWT应用程序,并尝试使用CSS选择器匹配元素。

我想计算以下HTML中已启用按钮的数量。

如果按钮位于<td>class="x-panel-btn-td ",则会启用该按钮,如果按钮位于<td>class="x-panel-btn-td x-hide-offsets",则会被停用。

所以基本上,我想要使用班级<td>检索所有x-panel-btn-td下的按钮数量。

<table cellspacing="0">
    <tbody>
    <tr>
        <td id="ext-gen3504" class="x-panel-btn-td ">
            <em unselectable="on">
                <button id="ext-gen3506" class="x-btn-text" type="button">OK</button>
            </em>
        </td>
        <td id="ext-gen3512" class="x-panel-btn-td x-hide-offsets">
            <em unselectable="on">
                <button id="ext-gen3506" class="x-btn-text" type="button">Yes</button>
            </em>
        </td>
        <td id="ext-gen3520" class="x-panel-btn-td">
            <em unselectable="on">
                <button id="ext-gen3506" class="x-btn-text" type="button">No</button>
            </em>
        </td>
        <td id="ext-gen3528" class="x-panel-btn-td x-hide-offsets">
            <em unselectable="on">
                <button id="ext-gen3506" class="x-btn-text" type="button">Cancel</button>
            </em>
        </td>
    </tr>
    </tbody>
</table>

6 个答案:

答案 0 :(得分:15)

据我所知,你不能使用CSS选择器,但是Selenium中有一个命令可以通过XPath进行计数。以下命令将验证是否有两个禁用按钮:

verifyXpathCount | //td[contains(@class, 'x-hide-offsets')]//button | 2

在Selenium RC(Java)中,这看起来更像是

assertEquals(selenium.getXpathCount("//td[contains(@class, 'x-hide-offsets')]//button"), 2);

答案 1 :(得分:12)

现在也在[{3}}中实现了这一点(不需要任何额外的Javascript魔法)因为谷歌仍然将这个问题作为最高结果链接,即使Selenium RC已被Webdriver取代,希望这可以节省一些时间。

示例java代码:

int locatorElementSize = driver.findElements(By.cssSelector("yourCSSLocator")).size();

答案 2 :(得分:8)

对于较新版本的Selenium,有一个函数Ge​​tCSSCount(字符串定位器)。只是觉得这个问题的更新会很有用

答案 3 :(得分:2)

这应该相对简单。您可以采用多种方式,但我建议您使用DefaultSelenium中的getEval(...)

写一些JavaScript:

  1. 通过id获取所有元素:ext-gen3506
  2. 遍历所有元素并检查是否已启用
  3. 如果已启用,则递增计数
  4. “返回”计数。
  5. 通常,getEval(...)将返回最后一个运行的语句的值...因此应该给你计数。

答案 4 :(得分:1)

由于Selenium是Firefox的一部分,后者支持Selectors API,因此可以使用如下测试来简化CSS定位器的计数匹配:

verifyEval | window.document.querySelectorAll("your#css > selector.here").length | 4

在这个例子中,当然,计数被验证为4。

答案 5 :(得分:0)

这是另一种解决方案,使用javascript,类似于关于Selector API / window.document.querySelectorAll的帖子:

http://blog.eviltester.com/2010/03/a-simple-getcsscount-helper-method-for-use-with-selenium-rc.html