Webdriverio: 关于如何在出现 javascript 错误时使测试失败的建议

创建于 2017-08-08  ·  4评论  ·  资料来源: webdriverio/webdriverio

问题

简要描述您遇到的问题(或您希望看到添加到 WebdriverIO 的功能)。 告诉我们您试图做什么以及发生了什么。 请记住,这_不是_一个提问的地方。 为此,请加入 Gitter 聊天室(Gitter )!

我尝试使用 Gitter,但没有人回应。

环境

  • WebdriverIO 版本:4.8.0
  • Node.js 版本:7.7.2
  • 独立模式或 wdio testrunner : wdio
  • 如果 wdio testrunner,运行同步或异步测试:mocha
  • 使用的其他 wdio 软件包(如果适用):不适用

细节

如有必要,请更详细地描述您遇到的问题。

如果页面上有 javascript 错误,我希望我的测试失败。

链接到 Selenium/WebdriverIO 日志

不? 测试通过就好了,这就是问题所在。

重现问题的代码 [ 值得拥有 ]

请记住,使用示例代码; 重现错误更容易,修复它也更快。
也许加载一个页面和 onload = function () { 抛出“这个测试失败!” }
然后运行仅访问该页面的测试,并查看测试仍然通过,即使在控制台中会创建 javascript 错误。

所有4条评论

在我看来,这是一个非常基本的用例。 我相信 .Net selenium 套件有一个选项。 在 PHP 和 Codeception 中,我附加到每个“步骤”,就像 wdio 中的每个命令一样,无论是 waitFor* 或 getText 还是 url(),并且每一步我都会检查冒泡到 window.onerror 的错误。 有没有办法在 wdio 的每一步运行一个函数?

我想有可能做这样的事情:

window.onerror = function () {
document.write('');
}

这将导致下一步失败。 但这似乎有点不可靠。
这当然与命令一致:

beforeSuite(() => browser.execute(...));

有没有办法在 wdio 的每一步运行一个函数?

是的,wdio 测试运行程序有一个afterCommand钩子来执行此操作。

加入我们Gitter对于这类问题。 这不是一个必要的问题。

完美谢谢! 我会用我的解决方案发回,使其无法通过测试
也许我们可以在文档中找到用例!!

如果有错误,关于如何使测试失败的任何建议?

我尝试了聊天但被忽略了。

这是一个问题,因为这是一个非常常见的用例,并且完全没有记录。

这是我在另一个站点和 Codeception 上使用的 javascript 错误检查器的想法,现在可以与 Angular 和 wdio 一起使用:

    beforeCommand: function (commandName, args) {
        if (browser.getUrl().indexOf(this.baseUrl) > -1) {
            browser.execute(function () {
                if (window.wdioErrorHandler !== window.onerror) {
                    const oldHandler = window.onerror;
                    window.windowErrors = [];
                    window.onerror = window.wdioErrorHandler = function (err) {
                        window.windowErrors.push(err + '');
                        if (typeof oldHandler === 'function') {
                            oldHandler.apply(this, arguments);
                        }
                    }
                }
            })
        }
    },

    afterCommand: function (commandName, args, result, error) {
        if (browser.getUrl().indexOf(this.baseUrl) > -1) {
            const errors = browser.execute(function () {
                return window.windowErrors;
            });
            if (errors.value !== null && errors.value.length > 0) {
                throw new Error('Javascript errors! ' + errors.value);
            }
        }
    }

如何故意使来自 afterCommand 块的命令失败? 我需要测试失败,但即使有throw ,它仍然说测试通过。

文档中是否有我们可以放一些关于如何使用钩子的例子? 也许在调试部分?

此搜索并没有真正显示任何有用的内容: https :

此页面是否有帮助?
0 / 5 - 0 等级