Всем привет, нужна помощь.
Как обрабатывать неуспешный результат проверки.
Есть проверка:
assertEquals(driver.findElement(By.xpath("//*[@class='TEST']")).getText(),value)
Так как значение меняется после действий на сайте, API не всегда отрабатывает быстро и метод getText()
получает еще старые данные, соответственно тест падает.
Нужна помощь с реализацией повторной проверки, к примеру добавив таймаут? По аналогии метода isDisplayed()
таймаут которого выставляется с помощью implicitlyWait
Используйте ExpectedConditions
Например:
wait.until(ExpectedConditions.textToBePresentInElementLocated(By.xpath("//*[@class=‘TEST’]")), value));
Использовать waitUntill
WebElement element = driver.findElement(By.xpath("//*[@class=‘TEST’]"));
wait.until(webDriver -> element.getText().equals(“YOR TEXT”));
Еще так можно. но будет не столь лаконично
WebElement element;
int attempt = 0;
boolean textIsPresent = false;
while (attempt < 3 && !textIsPresent) {
attempt++;
element = driver.findElement(By.xpath("//*[@class=‘TEST’]"));
textIsPresent = element.getText().equals(“YOR TEXT”);
}
Владислав, что-то вы явно лишних переменных наделали, да while тут тоже не к месту, можно проще:
WebElement element;
for (int i = 0; i < 3; i++) {
element = driver.findElement(By.xpath("//*[@class=‘TEST’]"));
if (element.getText().equals("YOUR TEXT") break;
}
Или просто пользуйтесь JDI )
$(".TEST").has().text(value);
Встроенные асерты автоматически ждут результат в течении таймаута (по умолчанию 10 секунд)
https://jdi-docs.github.io/jdi-light/?java#text
Согласен, переменных намудрил, ваше исполнение проще и кода меньше,но идея была вобщем показать ТСу что можно через цикл, а уж как он его реализует это на его усмотрение.
Спасибо, за примеры.
Взял эту реализацию
wait.until(webDriver -> element.getText().equals(“YOR TEXT”));
Ещё можно одной строчкой wait.until(ExpectedConditions.textToBePresentInElement(WebElement,"String value"));