Selenium RC: выбор элементов с помощью псевдокласса CSS :contains

Я хотел бы утверждать, что строка таблицы содержит данные, которые я ожидаю в двух разных таблицах.

Используя следующий 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)");

person Andrew    schedule 04.06.2010    source источник


Ответы (1)


Вероятно, это связано с ошибкой в ​​библиотеке селекторов CSS, используемой Selenium. В качестве обходного пути вы можете попробовать следующее:

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

Подробности об ошибке можно найти здесь: http://jira.openqa.org/browse/SEL -698

person Dave Hunt    schedule 05.06.2010
comment
Я исправил предложенный мной обходной путь, мне не хватало элемента tbody. - person Dave Hunt; 08.06.2010