webdriverio - 如何将LI文本转换为数组

时间:2015-06-06 17:08:08

标签: javascript cucumber chai webdriver-io

今天早上我开始使用带有黄瓜的webdriverio,一切都很顺利,直到我必须检查元素列表(ul> li)是否包含特定文本。我开始玩:http://webdriver.io/api/protocol/elements.html

这是我到目前为止所做的:

@Then /^One error should be "([^"]*)"$/, (errorMessage, cb) ->
        that = @
        errors = []
        @client
            .elements '.ui .list > li', (err, res) ->
                _.forEach res.value, (item) ->
                    that.client
                        .elementIdText item.ELEMENT, (err, res) ->
                            errors.push(res.value)

我的想法是尝试将所有li文本保存到一个我可以稍后检查的数组中,但是因为我对下一步该做什么感到很遗憾。

任何帮助都将非常感谢..谢谢!

2 个答案:

答案 0 :(得分:4)

如果属性命令的选择器与多个元素匹配,则返回结果数组而不是单个结果数组。因此,检查某个列表元素是否包含字符串的最简单的解决方案是

client.getText('.ui .list>il', function(err, res) {
    var containsText = false;
    res.forEach(function(liText) {
        containsText |= liText.indexOf('some string') > -1;
    });
    containsText.toBe(true);
});

我在这里使用jasmine断言,所以如果你使用不同的断言lib,你需要适应它。

答案 1 :(得分:0)

在拔出几根头发后,我推出了这个解决方案:

    @Then /^One error should be "([^"]*)"$/, (errorMessage, cb) ->
        that = @
        @client
            .elements '.ui .list > li', (err, res) ->
                total = res.value.length
                errors = []

                for item in res.value
                    that.client
                        .elementIdText item.ELEMENT, (err, res1) ->
                            errors.push res1.value
                            if errors.length == total
                                if errors.indexOf(errorMessage) != -1
                                    cb(null, errors)
                                else
                                    cb("Expected error string: \"#{errorMessage}\" not found in: [#{errors}]")

我知道这不是最美丽的解决方案,所以如果那里有人可以帮助我做得更好,请告诉我。

由于