我正在使用量角器测试一些angularjs app并遇到了这样的问题:
var counter = 0;
redButton.click();
allImages.each(function(element) {
element.isDisplayed().then(function(isDispl){
if(isDispl === true){
expect(element.getInnerHtml()).toContain('red');
counter++;
console.log("I'm here!")
}
});
});
console.log(counter);
输出结果为:
0
I'm here!
I'm here!
虽然我期望输出:
I'm here!
I'm here!
2
为什么这样?为什么变量计数器不等于2 - 条件isDispl === true的次数是完全填充的?
答案 0 :(得分:2)
JavaScript中一次只能运行一个函数(这有点简化,有例外)。
在发生任何其他事情之前,主要功能一直运行。由于该功能包含console.log(counter);
,因此会记录当时counter
的值。
函数完成后,事件循环可以查找已触发的事件。
元素已经显示,因此它们的承诺会触发。每次发生(两次),您都会收到一条消息,counter
的值会发生变化。
由于这是在您输出counter
的唯一时间之后发生的,因此您从未观察到它达到2
。