带有assert的nightwatchjs在AssertionError上调用browser.end()

时间:2016-06-01 12:10:53

标签: node.js assert nightwatch.js

我正在使用夜视检查页面上的表格单元格是否包含大于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;
        }
    })
...

但由于某些原因,这让我心疼。 :(

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

1 个答案:

答案 0 :(得分:0)

nightwatch 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!");
})

在这里由beatfactor提供的答案:https://github.com/nightwatchjs/nightwatch/issues/1002#issuecomment-223240103