Selenium RC:使用CSS选择元素:包含伪类

时间:2010-06-04 18:52:01

标签: css selenium phpunit selenium-rc

我想声明一个表行包含我期望在两个不同表中的数据。

使用以下HTML作为示例:

<table>
    <tr>
        <th>Table 1</th>
    </tr>
    <tr>
        <td>Row 1 Col 1</td>
        <td>Row 1 Col 2</td>
    </tr>
</table>

<table>
    <tr>
        <th>Table 2</th>
    </tr>
    <tr>
        <td>Row 1 Col 1</td>
        <td>different data</td>
    </tr>
</table>

以下断言通过:

$this->assertElementPresent('css=table:contains(Table 1)');

但是,这个没有:

$this->assertElementPresent('css=table:contains(Table 1) tr:contains(Row 1 Col 1)');

最后,我需要能够测试表行中的两列都包含我期望的数据:

$this->assertElementPresent('css=table:contains(Table 1) tr:contains(Row 1 Col 1):contains(Row 1 Col 2)');
$this->assertElementPresent('css=table:contains(Table 2) tr:contains(Row 1 Col 1):contains(different data)');

我做错了什么?我怎样才能做到这一点?

更新

在尝试选择后代时,听起来问题是Selenium中的一个错误。

我能够让这个工作的唯一方法是在桌子上添加一个额外的标识符,这样我就能分辨出我正在使用的那个:

/* HTML */
<table id="table-1">

/* PHP */
$this->assertElementPresent("css=#table-1 tr:contains(Row 1 Col 1):contains(Row 1 Col 2)");

1 个答案:

答案 0 :(得分:1)

这可能是由于Selenium使用的CSS选择器库中的一个错误。作为解决方法,您可能需要尝试以下操作:

css=table:contains(Table 1) > tbody tr:contains(Row 1 Col 1)

可在此处找到错误的详细信息:http://jira.openqa.org/browse/SEL-698