Явное ожидание работает только при наличии неявного ожидания.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Явное ожидание работает только при наличии неявного ожидания.

Сообщение Anonymous »

У меня есть проект автоматизации на Java, в котором используются Cucumber, JUnit 5 и Selenium. Я автоматизирую некоторые тесты пользовательского интерфейса для веб-приложения. Недавно я проводил рефакторинг своего кода и избавился от множества функций Sleep(), чтобы использовать ожидания Selenium. У меня уже было настроено неявное ожидание в объекте ChromeOptions в моем классе менеджера веб-драйверов. Затем я добавил в свой код несколько явных ожиданий и избавился от неявного ожидания, поскольку смешивать два типа ожиданий не рекомендуется.
Но теперь мои исполнения совершенно непоследовательны. Сценарий завершается в случайное время, обычно до истечения моего тайм-аута в 60 секунд, и ошибка заключается в том, что элемент не найден (я почти уверен, что мои локаторы верны). И это становится еще более странным, потому что если я добавлю неявное ожидание обратно в код и запущу сценарий с двумя типами ожидания, все будет работать нормально. Оба моих ожидания настроены с тайм-аутом 60 секунд.
Мое неявное ожидание (среди других вариантов):

Код: Выделить всё

chromeOptions.addArguments("--start-maximized");
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL);
chromeOptions.setExperimentalOption("prefs", prefs);
chromeOptions.setImplicitWaitTimeout(Duration.ofSeconds(60));
chromeOptions.setExperimentalOption("useAutomationExtension", false);
chromeOptions.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
Мои явные ожидания (по одному для каждого действия по клику в реализации, с использованием шаблона объектной модели страницы):

Код: Выделить всё

Wait wait = new FluentWait(Context.webdriver)
.withTimeout(Duration.ofSeconds(60))
.pollingEvery(Duration.ofMillis(100));
wait.until(driver -> Objects.equals(((JavascriptExecutor) driver).executeScript("return document.readyState"), "complete"));
Что я здесь делаю не так? Что-то не так с моим явным ожиданием? Я выбрал проверку состояния полной загрузки страницы, поэтому решил проверить значение document.readyState.
Идеальная ситуация — использовать только явный ожидания, но в настоящее время мне нужно использовать как неявное, так и явное ожидание в моем проекте, чтобы все работало гладко.

Подробнее здесь: https://stackoverflow.com/questions/793 ... is-present
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»