检查DIV中的一个是否包含我在Nightwatch中的价值观



我在用nightwatch.js测试我的webApp时有问题。我需要迭代页面上的所有div元素,以检查是否包含我之前添加的所有子元素的元素。例如,我有:

<div className = 'myclass'>
    <h2> text1 </h2>
    <h3> second_text1 </h3>
</div>
<div className = 'myclass'>
    <h2> text2 </h2>
    <h3> second_text2 </h3>
</div>

我想检查DIVS之一是否包含:'text2'和'second_text2'。我尝试添加iTer函数,如下所:使用NightWatch.js声明WebElement的文本值,但我不知道如何检查该DIV中的子元素,并且只有当divs都包含我的值时才断言。

不幸的是,夜观不是很好地支持承诺或一般异步。这里的博客文章总结了一些痛点。

幸运的是,可以使用browser.elementsbrowser.perform的组合。

var assert = require('assert');
module.exports = {
    'foobar': function (browser) {
        var isTextFound = false;
        browser
            .url('http://localhost:3000')
            .waitForElementVisible('body', 1000);
        browser.elements('css selector', '.myclass', function (res) {
            res.value.forEach(function (jsonWebElement) {
                var jsonWebElementId = jsonWebElement.ELEMENT;
                browser.elementIdText(jsonWebElementId, function (jsonElement) {
                    var text = jsonElement.value;
                    if (text.indexOf('text1') !== -1 && text.indexOf('second_text') !== -1) {
                        isTextFound = true;
                    }
                });
            });
        });
        browser.perform(function () {
            assert.ok(isTextFound, 'Text found');
        });

        browser.end();
    }
}

让我们浏览一些关键点

require('assert')

这是必需的,因为夜间观看只有在dom元素上进行操作,因此您无法主张布尔值。这也意味着该断言不会出现在报告中,但是如果是错误的,它将丢弃错误,这将出现。

browser.perform(function(){...})

这将主张放在命令队列上,以便事后发生断言。如果不存在,评估将立即进行,断言将失败。

browser.elements('css selector, '.myclass', function(res){...})

这是使用元素API。请注意,WebDriver协议部分下的API不会直接返回Web元素,而是返回Web元素(WebElement JSON对象)的Selenium表示形式,因此我们必须使用诸如elementIdText之类的特殊方法来获取信息。

相关内容

最新更新