【问题标题】:how to match array in protractor如何在量角器中匹配数组
【发布时间】:2018-06-28 14:03:14
【问题描述】:

Spec.js 文件:

it('validate return-comparison local filters names',function(){
         var namesArray1 = ['Returns Comparison', 'Financials','Quality','Top','10']
        for (var i = 0; i < 5; i++) {
           expect(element.all(by.css('.return-comparison .return-comparison-topbar')).get(i).getText()).toBe(namesArray[i])
        }
        })

输出: 留言:

Expected 'Returns Comparison
    Financials Quality
    Top
    10' to be 'Returns Comparison'.

消息: 失败:索引超出范围。试图访问索引处的元素:1,但只有 1 个元素与定位器 By(css 选择器, .return-comparison .return-comparison-topbar)

如何比较?

【问题讨论】:

  • 您尝试搜索的 CSS 仅返回 1 个元素。您是否调查过您是否获得了预期的元素?

标签: arrays protractor


【解决方案1】:

就像@S.Huston 建议的那样,数组中第 0 位只有 1 个元素包含所有文本。它不是字符串元素的数组,至少不是您看待它的方式。因此,您可以这样做:

it('validate return-comparison local filters names',function(){
     var namesArray1 = ['Returns Comparison', 'Financials','Quality','Top','10']
    for (var i = 0; i < 5; i++) {
       expect(element(by.css('.return-comparison .return-comparison-topbar')).getText()).toContain(namesArray[i])
    }
    })

如果您担心它们出现的顺序,并且只有它们出现,那么您可能会失去循环而只做

.toBe('Returns Comparison Financials Quality Top 10' ).

或者如果你想保持你最初的想法,仍然摆脱 .all 然后做类似的事情 .getText().then(function(text){var partsOfStr = text.split(' ');}); 然后将partsOfStr 和您的数组元素逐个元素与expect 和.toBe 进行比较

【讨论】:

  • 不客气。请注意(我被这个烫伤了),你有一个来自 getText 的字符串,toContain 检查子字符串。但是,如果对来自 elements.all 和 getText 的多个元素(一次)执行 getText,那么它会返回一个字符串数组,并且 toContain 会检查你的是否是其中之一。
猜你喜欢
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
  • 2019-09-01
  • 2015-03-27
  • 2017-01-11
  • 2020-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多