Проблема заключается в том, что мне нужно подождать порпеделенный элемент на странице с определенным timeout, но при невыполнении условия НЕ кидать ошибку, а вернуть результат boolean (что элемент не появился или появился)
Т е чисто с точки зрения логики должно быть что-то вроде этого, только более лаконично и без ошибки:
В вашем же коде и содержится решение)
Нужно убрать проверку shouldBe(visible) и просто вернуть is(visible)
shouldBe() всегда будет падать, если условие не выполнится и если исключение не перехватить.
public boolean checkFunc() {
return item.find(LOCATOR).is(visible);
}
Тут уже сложнее.
Я сам с похожим вопросом столкнулся, в моем проекте есть метод, проверяющий наличие элемента в DOMе страницы и практически аналогичный вашему:
public boolean checkFunc() {
return item.find(LOCATOR).exists();
}
только у меня обратная ситуация - мне не нужно ждать дефолтные 4 секунды, поскольку содержимое виджета появляется достаточно быстро, и дефолтное ожидание только замедляет тест.
Ответа на этот вопрос у меня пока нет. Пробовал в методе менять значение таймаута перед поиском элемента и затем менять его обратно к дефолтному:
Однако этот способ не сработал – метод как ждал четыре секунды, так и продолжает ждать. Да и сам по себе он не очень хорош – если таймаут поменяется, то он поменяется для всех тестов, бегущих параллельно, там, где это может быть не нужно. Да и выглядит он как костыль, откровенно говоря.
Может быть, кто-то из более опытных коллег подключится и даст ответ на наш с вами вопрос.
Самое простое, но не факт, что самое корректное , на мой взгляд - написать свой метод, который будет ждать n секунд и проверять размер массива, полученного с помощью findElements.
И добавить проверку на время, по истечении которого будет обязательно падать.