我之前已经发布了一个类似的问题但是想让它更清晰,更专注。所以我在这里再写一次(或者我应该继续编辑之前发布过的那个?)
我正在使用量角器为angularJS编写e2e测试规范。
在量角器规范中,我也使用JavaScript。
问题是JavaScript计数器变量无法正常工作。
我会在这里给你看代码:
// codes here within this describe block made me come back :( call this sample 1
//'use strict';
describe('list page ', function () {
it('should list page', function () {
browser.get('/list');
var counterA = 0;
element.all(by.repeater('page in pages')).each(function (page) {
counterA++;
//console.log(counterA);
})
//console.log(counterA);
// Please be true assertion :(
expect(counterA).toBeGreaterThan(0);
})
});
// testing against protractor spec: wrote within the same js file. call this sample 2
bigitems = [["somevalue", "t", "y"], ["somevalue", "somevalue", "y"]];
counterB = 0;
for (smallitems in bigitems) {
for (item in bigitems[smallitems]) {
if (bigitems[smallitems][item] == "somevalue") { counterB++; }
}
}
console.log(counterB)
这是控制台输出。
Using the selenium server at http://localhost:4444/wd/hub
3
0
1
2
3
4
5
6
.
Finished in 11.877 seconds
1 test, 1 assertion, 0 failures
答案 0 :(得分:4)
由于Javascript的异步特性,你无法这样做。这是因为 expect 不会等待 element.all.each 完成。
所以你需要使用promises来使它工作。但这里的问题是element.all.each没有返回一个promise(至少还没有,请参阅当前讨论的here)。
有一些替代方案可以解决这个问题。
- 如果你想要的只是计算元素的数量,你可以简单地使用它。
it('sample', function() {
element.all(by.repeater('page in pages'))
.then(function(elements){
return elements.length;
})
.then(function(count){
//console.log("...." + count);
expect(count).toBeGreaterThan(0);
});
});
- 或者只是这个。
it('sample', function() {
expect(element.all(by.repeater('page in pages')).count()).toBeGreaterThan(0);
});
- 如果你真的想手动计算,你也有这个选项,虽然你必须两次调用 element.all 。
it('sample', function() {
var count = 0;
element.all(by.repeater('page in pages'))
.then(function(){
element.all(by.repeater('page in pages')).each(function(item){
count++;
//console.log(count);
});
})
.then(function(){
//console.log(count);
expect(count).toBeGreaterThan(0);
});
});
- 或者这个。
it('sample', function() {
var counterA = 0;
element.all(by.repeater('page in pages'))
.then(function(elements){
elements.forEach(function(entry){
counterA++;
});
})
.then(function(){
//console.log(counterA);
expect(counterA).toBeGreaterThan(0);
});
});
- 或类似的。
it('sample', function() {
element.all(by.repeater('page in pages'))
.then(function(elements){
var counterA = 0;
elements.forEach(function(entry){
counterA++;
});
return counterA;
})
.then(function(counterA){
//console.log(counterA);
expect(counterA).toBeGreaterThan(0);
});
});
希望这有帮助。