【问题标题】:Unable to assert presence of a keyword in a arraylist无法断言数组列表中存在关键字
【发布时间】:2017-10-30 20:07:19
【问题描述】:

我正在尝试获取数组列表的计数,然后尝试在数组的值中断言关键字的存在。以下是我的代码有问题;

describe('My Test', function() {

    it('Test starts', function() {

    browser.ignoreSynchronization = true;
    browser.get('https://www.w3schools.com/angular/');

    browser.sleep(5000).then(function(){});
    var results = element.all(by.css(".sidesection>p>a"));

    var results_count=results.count().then(function(counting){
        console.log("There are total "+counting+" lines");
        return counting;
    })
    results_count.then (function(count){
        console.log("There are totalx "+count+" lines");

        for (var iterate=1;iterate<count;iterate++){

        results.get(iterate).getText().then(function(text){
            console.log("The text in Relationship Type node line "+iterate+" is ---"+text);
            expect(text.indexOf('Navigation')!=-1).toBeTruthy(); 
        })      
        }
    })
    })

})

输出:

There are total 19 lines
There are totalx 19 lines
The text in Relationship Type node line 19 is ---Dropdowns
The text in Relationship Type node line 19 is ---Accordions
The text in Relationship Type node line 19 is ---Convert Weights
The text in Relationship Type node line 19 is ---Animated Buttons
The text in Relationship Type node line 19 is ---Side Navigation
The text in Relationship Type node line 19 is ---Top Navigation
The text in Relationship Type node line 19 is ---JS Animations
The text in Relationship Type node line 19 is ---Modal Boxes
The text in Relationship Type node line 19 is ---Progress Bars
The text in Relationship Type node line 19 is ---Parallax
The text in Relationship Type node line 19 is ---Login Form
The text in Relationship Type node line 19 is ---HTML Includes
The text in Relationship Type node line 19 is ---Google Maps
The text in Relationship Type node line 19 is ---Loaders
The text in Relationship Type node line 19 is ---Tooltips
The text in Relationship Type node line 19 is ---Slideshow
The text in Relationship Type node line 19 is ---Filter List
The text in Relationship Type node line 19 is ---Sort List
[31mF[0m

Failures:
1) My Test Test starts
  Message:
[31m    Expected false to be truthy.

我在这里遇到了 2 个问题:

1.) 为什么我在所有值列表中都硬编码了数字 19,我希望输出计数像 1、2、3、4 一样迭代......等等

2.) 尽管关键字出现在某些数组值中,但为什么我的期望语句失败。

有人可以纠正我理解并解决上述两个问题吗?

【问题讨论】:

    标签: javascript arraylist automation jasmine protractor


    【解决方案1】:

    关于 (1) 我不是很肯定,但我可以肯定地回答 (2) 帮助改进您的代码

    1) 这似乎是经典的for 循环范围问题,其中循环在它被调用时已经完成......请参阅this question 以获取参考。不确定这如何与 Protractor 和控制流执行一起发挥作用。

    2) 你的期望失败了,因为它检查每一行,你说每行文本的条件与“导航”相比将评估为真实。这对于其中的一些(即幻灯片、工具提示、加载器等)将失败。您需要一个更好的断言,例如,您可以逐个执行链接:expect(results.get(i).getText()).toEqual('Help'),或者您可以创建一个导航项数组并期望它们匹配等等......但您肯定需要一个更好的断言。这个测试到底想做什么?

    不管怎样,这里有一些关于您的代码的一般帮助:

    1. 你不需要在量角器中使用for 循环,除非你正在做一些非常具体的事情。您可以只使用 each 来迭代 ElementArrayFinder。
    2. 这是更多的语义,但是您可以使用从 Promise 返回的值而不是将其分配给变量,您的某些代码有些多余。如果你像这样实现它,你可以省略关于results_count的部分:

      results.count().then(function(counting){
           console.log("There are total "+counting+" lines"); // logs 19
           return counting;
      }).then(function (count) {
          console.log(count); // logs 19
          for(var i = 0; i<count; i++) {
      
          }
      })
      

    但同样,for 循环在 Protractor 中并不是真正需要的。相反,您可以只使用each,这使您的代码更加简洁,并且还消除了您遇到的循环关闭问题:

        var results = element.all(by.css(".sidesection>p>a"));
        results.each(function (elem, index) {
            return elem.getText().then(function (text) {
                console.log('Element at index ' + index + ' has text ' + text);
                // this still fails because it's not a good assertion
                expect(text.indexOf('Navigation')!=-1).toBeTruthy();
            });
        });
    

    【讨论】:

      猜你喜欢
      • 2017-11-21
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-22
      • 2020-09-11
      • 2020-06-23
      相关资源
      最近更新 更多