javascript - Protractor 和 for 循环

标签 javascript webdriver protractor

我对下面在 Protractor 中测试的代码有疑问。 也就是说,正如您所看到的,我首先找到标签列表,然后检查其数量(三个)。然后我有一个第一个循环,将每个标签与表中的值进行比较。这里我用i <table.length然后它就可以正常工作了。 在第二个循环中我使用 labels.count()它等于三,因为我之前检查过它,但它根本不起作用。无论检查的输出是什么, Protractor 都会经历这个循环,并且测试以“通过”结束。 谁能告诉我为什么i <table.length循环中的条件有效并且 i<labels.count不是吗?

//labels list
var labels = element.all(by.xpath("//form[@name='form']//label"));

//test start
describe('angularjs homepage', function() {
it('test1', function() {
    browser.get('http://www.way2automation.com/angularjs-protractor/registeration/#/login');

  //shows 3
    labels.count().then(function(text){
            console.log( text); 
        });


    var table = ["Usern1ame","Password","Username *"];

    //first loop -> this one works if there is a difference between 'table' and element from 'label' list
    for (var i = 0; i <table.length; i++) {
      expect(labels.get(i).getText()).toEqual(table[i]); 
    }

    //this one doesn't -> if there is a difference between 'table' and 'label' 
    //list nothing happens, no errors, test passes
    for (var i = 0; i <labels.count(); i++) {
          expect(labels.get(i).getText()).toEqual(table[i]); 
        }





});

});

最佳答案

在您的示例中,labels.count() 是一个 promise ,您不能直接使用它。要获得 count 的值,您需要首先解决 Promise。看下面的代码,

labels.count().then(function(labelCount){
    for (var i = 0; i <labelCount; i++) {
      expect(labels.get(i).getText()).toEqual(table[i]); 
    }
})

关于javascript - Protractor 和 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42379536/

相关文章:

java - 无法使用 webdriver 找到 javascript 框架

javascript - 如何使用 Protractor conf js测试单独的环境名称?

javascript - 在 texbox 将其放入之前/之后追加 div

java - 在 DOM 加载时加载 java applet

Selenium EdgeDriver 禁用保存密码对话框

python - 无论如何找不到该元素

angularjs - 构建我的测试文件夹/方法

javascript - 单元测试 Angular + Protractor

javascript - 使用来自 angular-strap 和 ui-bootstrap 的组件

javascript - 动态改变图像大小