我有以下代码过滤包含文本的元素:
var myspan = searchChoices.filter(function(elem, index) {
return elem.getText().then(function(text) {
//console.log('index text:' +text);
return text === 'Consultant 110';
});
});
expect(myspan).not.toBe(null);
myspan.count().then(function (x) {
console.log('count:'+x);
});
expect(myspan.count()).toBe(1); // this succeeds
expect(myspan.count()===1).toBe(true); // <---This fails
奇怪的是,在最后一行之前的行的期望成功但最后一行失败。是什么原因?
答案 0 :(得分:3)
请记住,Protractor 中相关的所有webdriver都会返回一个承诺 - 一个将放在Control Flow上的对象,该对象将在稍后的promises队列中解析。实际值不是立即可用的。
现在,expect()
有一个特殊的行为 - 在Protractor中(实际上在jasminewd2
中)它被修补以理解承诺 - 它会在做出期望之前解决一个承诺。这就是为什么expect(myspan.count()).toBe(1)
适用于您的情况。并且,myspan.count()===1
始终为false
- 因为myspan.count()
本身是一个承诺,并且始终不等于1
。
仅供参考,如果您想进行=== 1
检查,您可以手动解决承诺:
myspan.count().then(function (actualCountValue) {
expect(actualCountValue === 1).toBe(true);
});