Selenium [Java]: как я могу заставить его ждать, пока таблица не будет обновлена?

#java #selenium #selenium-webdriver

#java #selenium #selenium-webdriver

Вопрос:

Предположим, что у меня есть веб-страница с записями, отображаемыми в таблице (с несколькими столбцами). Теперь есть поле ввода поиска и кнопка поиска. Используя их, я ищу записи с идентификатором в таблице.

Я использую неявное ожидание, которое, кажется, работает нормально в большинстве случаев и терпит неудачу в этом сценарии :

  • Я создал страницу для загрузки всех данных в таблице после входа в систему с использованием неявного ожидания
  • Ввел идентификатор в поле ввода поиска и нажал кнопку поиска
  • Теперь я ожидаю только одну запись вместо всех записей, которые отображались в таблице до выполнения поиска

Кажется, что он не нашел достаточно времени для обновления таблицы и все еще показывает все записи, даже если я выполняю поиск с помощью (для столбцов идентификаторов в таблице):

 List<WebElement> idRows = driver.wait(<waittime>, <interval>).until(driver -> driver.findElement(By.id("column-id")));
 

Если я использую Thread.sleep() после нажатия кнопки поиска, все в порядке, поскольку я вижу, что таблица была обновлена с ожидаемым результатом. Тем не менее, я должен избегать использования thread.sleep .

Могу ли я получить какие-либо предложения о том, как я могу заставить его ждать, пока таблица не будет обновлена данными поиска?

Комментарии:

1. … Я ожидаю только одну запись вместо всех записей … как насчет поиска одной и той же записи с использованием критериев поиска из всех записей?

2. Пожалуйста, добавьте исходный код html или лучше укажите url.

Ответ №1:

Если вы знаете, что идентификатор, который вы ищете, уникален, в этом случае вы можете поступить следующим образом:

После нажатия search кнопки подождите, пока размер записей не станет равным 1

 wait.until(driver -> records.size() == 1);
 

В случае, если ваш поиск id не уникален, и после поиска вы можете увидеть несколько результатов, вы можете сделать это следующим образом:

Перед нажатием search кнопки вы можете получить размер записей

 int size = records.size();
 

После нажатия search кнопки вы можете дождаться увеличения размера записей:

 wait.until(driver -> records.size() < size);