Как я могу подсчитать количество элементов, которые соответствуют моему селектору CSS?
Я пытаюсь использовать 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>
Ответы
Ответ 1
Насколько мне известно, вы не можете сделать это с помощью селекторов 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);
Ответ 2
В настоящее время это также реализовано (без необходимости использования дополнительной Javascript-магии) в API Selenium Webdriver. Поскольку Google по-прежнему ссылается на этот вопрос как лучший результат, хотя Selenium RC был заменен Webdriver, надеюсь, это сэкономит время.
Пример Java-кода:
int locatorElementSize = driver.findElements(By.cssSelector("yourCSSLocator")).size();
Ответ 3
С более новыми версиями Selenium существует функция GetCSSCount (локатор строк). Просто подумал, что обновление этого вопроса было бы полезно
Ответ 4
Это должно быть относительно просто. Вы можете сделать это несколькими способами, но я бы предложил использовать getEval(...)
в DefaultSelenium.
Напишите JavaScript, который:
- получает все элементы по id: ext-gen3506
- выполняет итерации по всем элементам и проверяет, включен ли он
- если он включен, увеличьте количество
- "вернуть" счет.
Как правило, getEval(...)
будет возвращать значение последнего оператора, который запускался... так что это должно дать вам счет.
Ответ 5
Поскольку Selenium является частью Firefox, а последний поддерживает API Selectors, можно упростить подсчет совпадений локатора CSS, используя такой тест:
verifyEval | window.document.querySelectorAll("your#css > selector.here").length | 4
В этом примере подсчет считается, конечно, равным 4.
Ответ 6
Здесь другое решение, использующее javascript, похоже на сообщение о Selector API/window.document.querySelectorAll:
http://blog.eviltester.com/2010/03/a-simple-getcsscount-helper-method-for-use-with-selenium-rc.html