Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Подскажите, как лучше сделать ожидание заданного количества элементов на странице

selenium
webdriver
java
Теги: #<Tag:0x00007f7b65667410> #<Tag:0x00007f7b656672d0> #<Tag:0x00007f7b65667190>

(Irina Melnik) #1

В тесте нужно проверять корректность удаления меток.
driver.findElements(By).size() не подойдет, так как сайт динамический и тесты будут фейлится.
Нашла вариант с использованием numberOfElementsToBe(By locator, java.lang.Integer number), но проблемы с реализацией. Возможно, кто-то встречался с подобной проблемой. Использую Selenium + Java + Testng


(Oleksii Ihnatiuk) #2

Опишите пожалуйста, что вам нужно проверять и когда. Спасибо.


#3

А какие конкретно проблемы с реализацией numberOfElementsToBe?

Можно использовать как-то так:

WebDriverWait wait = new WebDriverWait(driver, 30000);
wait.until(ExpectedConditions.numberOfElementsToBe(<твой локатор>, <ожидаемое количество элементов>));

(Джамал Зейналов) #4

Можно с помощью ожиданий в матчерах:

import static java.util.concurrent.TimeUnit.SECONDS;
import static org.hamcrest.MatcherAssert.assertThat;
import static ru.yandex.qatools.htmlelements.matchers.MatcherDecorators.should;
import static ru.yandex.qatools.htmlelements.matchers.MatcherDecorators.timeoutHasExpired;

int expSize = 10;
assertThat(list + " has correct size", list,
should(hasSize(expSize)).whileWaitingUntil(timeoutHasExpired(10000)));

Этот матчер будет 10 секунд ждать, пока не станет 10 элементов.


(Irina Melnik) #6

Очень большое спасибо, сейчас попробую!


(Nikita) #7

Первая проблема которая у вас есть, это отсутствие какой-то обёртки над Selenium’ом, сам Selenium низкоуровневая библиотека и нуждается в обёртках для удобства работы.

Посмотрите в сторону http://selenide.org/

С помощью этой библиотеки Ваша проблема решается так:
$$(locator).shouldHave(size(number));