Подтвердить что ты не робот

Как я могу подсчитать количество элементов, которые соответствуют моему селектору 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>
4b9b3361

Ответ 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.