【问题标题】:webdriverio - how to get a LI texts into an arraywebdriverio - 如何将 LI 文本放入数组
【发布时间】:2015-06-06 17:08:08
【问题描述】:

我今天早上开始在黄瓜上使用 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 的文本保存到一个数组中,以便稍后检查,但因为我有点迷失了下一步该做什么。

任何帮助将不胜感激..谢谢!

【问题讨论】:

    标签: javascript cucumber chai webdriver-io


    【解决方案1】:

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

    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 断言,所以如果您使用不同的断言库,则需要对其进行调整。

    【讨论】:

    • 感谢您的回复,但不幸的是 res.value 下返回的是一个 id 元素数组,而不是真正的字符串。所以我需要使用另一个异步函数(that.client.elementIdText)来返回实际文本
    • 对于我最初的回复,我深表歉意。你是 100% 正确的,我把我的代码复杂化了,你的解决方案更干净!谢谢!
    【解决方案2】:

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

        @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}]")
    

    我知道这不是最好的解决方案,所以如果有人可以帮助我改进它,请告诉我。

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多