nightwatchjs with assert calling browser.end() on AssertionE



我正在使用夜巡来检查页面上的表格单元格是否包含大于 0 的数字。

为此,我必须使用节点断言包:

const assert = require('assert');

所以首先,我获取表单元格元素文本,在回调中我将其解析为 int 并使用 assert 检查它的值:

...
    .getText("//table[@id='topology-summary-table']/tbody/tr/td[7]", function(el){
        assert(parseInt(el.value) > 0, "Num Executors == 0!");
    }).end()
...

唯一的问题是,如果 assert 抛出 AssertionError(即:如果表单元格中的数字为 0),则测试将停止,并且永远不会调用.end(),从而使浏览器进程保持打开状态并徘徊。不理想。

我通过执行以下操作来绕过这一事实:

...
    .getText("//table[@id='topology-summary-table']/tbody/tr/td[7]", function(el){
        try {
            assert(parseInt(el.value) > 0, "Num Executors == 0!");
        } catch(e){
            this.end();
            throw e;
        }
    })
...

但出于某些原因,这让我感觉很糟糕。 :(

我的问题是:有没有更好的方法?

夜巡 API 实际上扩展了断言 api,因此无需require它。

相反,请执行此操作:

.getText("//table[@id='topology-summary-table']/tbody/tr/td[7]", function(el){
  this.assert.ok(parseInt(el.value) > 0, "Num Workers == 0!");
})

比特因子在这里提供的答案是:https://github.com/nightwatchjs/nightwatch/issues/1002#issuecomment-223240103

最新更新