我想声明一个表行包含我期望在两个不同表中的数据。
使用以下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)");
答案 0 :(得分:1)
这可能是由于Selenium使用的CSS选择器库中的一个错误。作为解决方法,您可能需要尝试以下操作:
css=table:contains(Table 1) > tbody tr:contains(Row 1 Col 1)
可在此处找到错误的详细信息:http://jira.openqa.org/browse/SEL-698