如何等待Ajax调用完成WEbdriver.io

时间:2017-12-29 04:40:04

标签: webdriver-io

我正在试图弄清楚如何使webdriver.io等到单击按钮后所有ajax请求都完成。

不幸的是,document.readyState总是='完整',并且网页没有任何“独特”,除了它有一些略有不同的数据。

还有其他方法我可以测试一下javascript函数是否在页面中完成..?

    await this.browser.waitUntil(function () {
        return this.execute(function () {
            if (document.readyState === 'complete')
                return true;
        })
    });

1 个答案:

答案 0 :(得分:0)

在 WDIO 5.x 及更高版本中,引入了一个名为“拦截服务”的新第三方插件来帮助解决此问题。

您需要安装服务包 wdio-intercept-service 作为开发依赖项,并在 wdio.config.js 中将其声明为 services: ['intercept']

您可以设置拦截器来捕获 xhr 请求,如下所示。

browser.setupInterceptor();  // start capturing xhr requests

拦截器设置完成后,您可以声明对请求的一些期望,并使用它们的索引(期望声明的顺序)获取这些请求。

browser.expectRequest('GET', '/api/foo', 200); // expect GET request to /api/foo with 200 statusCode
var request = browser.getRequest(0);
assert.equal(request.method, 'GET');
assert.equal(request.response.headers['content-length'], '42');

您可以在他们的 Github 页面上找到更多信息:Intercept Service