#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);