nightwatch.js在多个页面部分断言

时间:2017-04-30 15:25:24

标签: javascript selenium nightwatch.js

我正在使用nightwatch.js 我有一个如下所示的页面文件:

sections: {
    table: {
        selector: '.sr-filterable-data-layout--collection',
        elements: {
            header: {
                selector: '.sr-collection--header'
            },
            body: {
                selector: 'sr-collection--body'
            }
        }
    },
    filters: {
        selector: '.sr-filterable-data-layout--filters',
        elements: {
            filterByName: {
                selector: '#filter-name'
            }
        }
    },
    actions: {
        selector: '.sr-entities-actions',
        elements: {
            addButton: {
                selector: '.mdi-content-add'
            }
        }
    }
},
commands: [{
        editEntity(options) {
            return this.section.body();
        },
        verifyPageload() {
            return (
                this.section.filters.waitForElementVisible('@filterByName') 
                    .section.table.waitForElementVisible('@header')
                    // .section.actions.waitForElementVisible('@addButton')
                    .assert.title(this.props.title)
            );
        }
    }
]

断言每个元素单独工作,但当我尝试链接这样的断言时:

this.section.filters.waitForElementVisible('@filterByName') 
                    .section.table.waitForElementVisible('@header')

失败并出现以下错误:

✖ TypeError: Cannot read property 'waitForElementVisible' of undefined
关于如何将这些断言链接在一起的任何帮助都将非常感激

2 个答案:

答案 0 :(得分:1)

您不能这样做,因为section页面属性,而waitForElementVisible返回对客户端实例(“浏览器”)的引用,而不是页面。

只需拆分命令,就没有理由将它们链接起来。

另一件事; return ()块在这里是多余的,只需直接返回断言结果:

verifyPageload() {
    // waitForStuff...
    return this.assert.title(this.props.title)
}

答案 1 :(得分:1)

虽然这里的评论提出了绕过这个问题的方法。我终于偶然发现了在第一次调用之后链接.parent以在不同部分链接多个动作的方式,以返回页面的根,而不是像这样的部分:

verifyPageload() {
            this.section.table
                .waitForElementVisible('@header')
                .parent.section.filters.waitForElementVisible('@filterByName')
                .parent.section.actions.waitForElementVisible('@addButton')
                .assert.title(this.props.title);
            return this;
        }