Использование цикла while для ожидания вместо Selenium webdriver ждет - PullRequest
0 голосов
/ 29 января 2019

Я автоматизирую сценарий, в котором происходит перенаправление и приводит к изменению страницы (означает, что пользователь будет перемещаться с одной страницы на другую), хотя перенаправление происходит на том же экране, дополнительное окно не открывается.Я хочу выполнить какое-то действие, как только пользователь перейдет к следующему экрану.Без ожидания было бы невозможно работать по этому сценарию.Существует два подхода:

  1. Я пытался использовать селен, подождите, пока URL не перейдет на второй экран. Хотя появляется сообщение об ошибке, так как не удается найти его в данный момент времени.
  2. Я попытался использовать java цикл while и заставить его ждать, пока URL не изменится, используя

    while (getDriver (). GetCurrentUrl (). Contains ("Fraction of URL")) {}

Этот работает для меня.

Я просто хотел знать, будет ли № 2 считаться правильным подходом или я выкопаю больше и пойду с # 1 подходом

Наше приложение использует AJAX, а наша структура основана на BDD + Selenium

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Что если вы подождете, пока какой-нибудь элемент с перенаправленной страницы будет кликабелен или присутствует, или что-то еще?

Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
            .withTimeout(Duration.ofSeconds(4))
            .pollingEvery(Duration.ofMillis(500));

и где вам нужно подождать:

wait.until(ExpectedConditions.elementToBeClickable(WebElement));

Есть много разныхждет: .toBeClickabe(WebElement), .visibilityOfAllElements(List<WebElement>), .presenceOfAllElementsLocatedBy(By.Xpath("xpath selector")) и т. д.

0 голосов
/ 29 января 2019

Если вы знаете, что такое URL для следующей страницы, или какой-то другой, который будет отличаться от первой страницы, лучше всего было бы использовать FluentWait, а не цикл.пример:

FluentWait<WebDriver> webDriverWait = new WebDriverWait(driver, 60).pollingEvery(Duration.ofSeconds(2));
webDriverWait.until(ExpectedConditions.urlContains("Fraction of new URL"));

или если новый URL-адрес является абсолютно случайным, вы можете использовать:

webDriverWait.until(ExpectedConditions.not(ExpectedConditions.urlContains("Fragment of URL")));

Однако это будет менее надежно, так как это может проверить его в некоторой промежуточной точке, ина самом деле не подтверждает, что вы попали на правильную страницу, просто вы оставили последнюю.

Что это сделает, это создаст ожидание, которое имеет максимальную продолжительность 60 секунд, но оно проверяетсостояние каждые 2 секунды.Вы можете настроить максимальное время в соответствии с тем, что вам нужно для вашего времени отклика, но опрос гарантирует, что он занимает столько времени, сколько ему нужно, а также обеспечивает возможность сбоя в случае подлинной ошибки, в отличие от цикла while, которыйбудет работать бесконечно долго, если новая страница не загружается

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