Как ждать WebElement на веб-странице, которая иногда появляется в случайных местах при выполнении теста? - PullRequest
1 голос
/ 23 мая 2019

Я написал автоматические тесты на основе селена для веб-приложения, и они отлично работают с быстрым интернет-соединением, но непредсказуемым поведением с менее хорошим соединением.

Веб-приложение было построено так, что если продолжительность ответа наЗапрос <некоторых действий на веб-странице больше 250 мс, затем применяется элемент loader-wrapper, который предотвращает любые действия пользователя, пока не закончится ответ.Loader-wrapper может появиться при любом запросе в любом месте выполнения теста, поэтому я не могу использовать явные ожидания селена, потому что я не знаю, когда и где он появится.В результате я получаю исключение: </p>

org.openqa.selenium.WebDriverException: Element is not clickable at point (411, 675). Other element would receive the click:(.show-component .loader-wrapper)

Есть ли способ установить «глобальное ожидание», которое остановит выполнение теста, если загрузчик-загрузчик появится, и дождется его завершения, а затем выполнит тестбудет продолжать?Или любая другая идея.

Ответы [ 3 ]

1 голос
/ 23 мая 2019

Мне нравится ваша идея аннотации, но я не уверен, как ее реализовать.

Другой возможный подход - написать собственное ExpectedCondition "loaderWrapperDisappeared" (или что-то в этом роде), которое будет ждатьобертку загрузчика, которую нужно удалить, и верните целевой WebElement, чтобы вы могли кликнуть по нему.

Вы бы тогда использовали это так:

(new WebDriverWait(targetWebElement, 50))
   .until(ExpectedConditions.loaderWrapperDisappeared(By.id("your div id"))).click();

(простите за синтаксис, что это неправильно ... Я не писал Java в течение нескольких лет)

0 голосов
/ 23 мая 2019

Если я правильно понимаю, вы ищете invisibilityOfElementLocated.

Вы можете добавить его в качестве декоратора к вашим шагам ...

Надеюсь, это поможет!

0 голосов
/ 23 мая 2019

В случае веб-драйвера, вы можете использовать как это.

WebElement webElement = (new WebDriverWait(driver, 50))
   .until(ExpectedConditions.elementToBeClickable(By.id("your div id")));

Здесь 50 относится к 50 секундам.

Подробнее см. Ниже по ссылке. https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/ui/WebDriverWait.html#WebDriverWait-org.openqa.selenium.WebDriver-long-

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...