我对下面在 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/