selenium-webdriver如何等待XHR回答?

时间:2019-10-21 14:51:02

标签: selenium-webdriver xmlhttprequest automated-tests

我在页面中有内容标签,其中包含一些数据(每次都是新数据),单击某些按钮后会更新内容。 在后端服务器上发送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");
            }
        };

在从后端服务器获得答案之前,我在控制台中获得了“完成”。

1 个答案:

答案 0 :(得分:0)

需要刷新

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

摘自文档https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html

一个条件的包装器,它允许元素通过重绘来更新。这可以解决具有两部分的条件问题:找到一个元素,然后检查其上的某些条件。对于这些条件,有可能先找到一个元素,然后在客户端将其重画。如果发生这种情况,则在检查条件的第二部分时会引发StaleElementReferenceException。