Как дождаться повторного открытия страницы - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть страница, где дополнительные функции становятся доступными, если вы войдете в систему. Вход через всплывающую панель. При успешном входе в систему страница перезагружается (поэтому параметры, соответствующие правам пользователя, динамически добавляются в интерфейс).

    @Override
 @Step("Logs in as: {0}")
    public <T extends Actor> void performAs(T actor) {
        actor.attemptsTo(         
            Open.browserOn(homePage),
            Click.on(homePage.loginMenuItem),
            Enter.theValue(authenticated(actor).username())
                 .into(homePage.userField),
            Enter.theValue(authenticated(actor).password())
                 .into(homePage.pwdField),
            Click.on(homePage.loginBtn),            
        );
  }

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

            Open.browserOn(homePage)

после клика, потом работает - в основном. Иногда кажется, что он все еще отвечает старой странице. Но если я перезапустить, это обычно работает. Т.е. вышеуказанный метод является нестабильным. Я мог бы просто подождать 2 секунды, но теоретически он все равно мог потерпеть неудачу, если сервер аутентификации работал медленно. Идеи, пожалуйста.

1 Ответ

0 голосов
/ 06 сентября 2018

На линии до

Click.on(homePage.loginBtn)

захватите элемент, например кнопку входа, и сохраните его в переменной. Затем нажмите кнопку входа в систему ... затем подождите, пока кнопка входа не станет устаревшей. Устаревший элемент указывает, что страница обновилась. После этого вы готовы снова получить доступ к странице.

Я не знаю, какие у вас есть вспомогательные функции, но это должно выглядеть примерно так

WebElement loginButton = driver.findElement(homePage.loginBtn);
Click.on(homePage.loginBtn)
new WebDriverWait(driver, 10).until(ExpectedConditions.stalenessOf(loginButton));
// do stuff
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...