【问题标题】:How to Wait for Ajax calls to complete for WEbdriver.io如何等待 WEBdriver.io 的 Ajax 调用完成
【发布时间】:2018-06-09 14:12:26
【问题描述】:

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

不幸的是,document.readyState 始终为 = 'complete' ,除了其中包含一些稍微不同的数据之外,该网页没有任何“独特性”。

有没有其他方法可以测试页面中的javascript函数是否完整..?

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

【问题讨论】:

  • 这可能对你有帮助npmjs.com/package/webdriverajax
  • 与其等待所有/某些请求,不如等待特定请求完成。您可以使用webdriver.io/docs/api/browser/mock.html 监视特定请求,然后等待它被请求webdriver.io/docs/api/expect-webdriverio.html#toberequested
  • @MikeG。通常我们不太关心被请求的 API,而是等待它完成,无论状态如何。使用您的建议,我仍然不知道如何实现这一目标
  • @SergeyPleshakov 你能澄清你的问题吗?你到底想达到什么目的?
  • 所以所有请求都经过几个步骤 - 发起,可能被重定向,但最终完成(实际术语可能不同)。我如何阅读这个问题是,用户想要等到请求完成,您建议在它刚刚启动时等待。我理解对了吗@MikeG。

标签: webdriver-io


【解决方案1】:

在 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

【讨论】:

  • 并没有真正回答这个问题,而是为实验实现所需行为提供了基础
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 2018-05-29
  • 2017-05-20
  • 2011-09-06
  • 2013-10-14
  • 2014-07-06
  • 2014-10-29
相关资源
最近更新 更多