Как селен-вебдрайвер может ждать ответа XHR? - PullRequest
0 голосов
/ 21 октября 2019

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

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

Попробуйте это:

ExpectedCondition<Boolean> jQueryLoad = new ExpectedCondition<Boolean>() {
    @Override
    public Boolean apply(WebDriver driver) {
        try {
            return ((Long)((JavascriptExecutor)driver).executeScript("return jQuery.active") == 0);
        }
        catch (Exception e) {
            // no jQuery present
            return true;
        }
    }
};

ExpectedCondition<Boolean> jsLoad = new ExpectedCondition<Boolean>() {
            @Override
            public Boolean apply(WebDriver driver) {
                return ((JavascriptExecutor)driver).executeScript("console.log(document.readyState); return document.readyState")
                        .toString().equals("complete");
            }
        };

Я получаю "Complete" в консоли, прежде чем получить ответ от бэкэндасервер.

1 Ответ

0 голосов
/ 21 октября 2019

Нужно использовать обновлено

wait.until (ExpectedConditions.refreshed (ExpectedConditions));

Из документации https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html

Оболочка дляусловие, позволяющее обновлять элементы путем перерисовки. Это работает вокруг проблемы условий, которые состоят из двух частей: найти элемент, а затем проверить наличие некоторого условия на нем. Для этих условий возможно, что элемент расположен, а затем он перерисовывается на клиенте. Когда это происходит, возникает исключение StaleElementReferenceException при проверке второй части условия.

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