量角器count()期望意外失败

时间:2016-04-04 05:41:33

标签: javascript jasmine protractor

我有以下代码过滤包含文本的元素:

    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

奇怪的是,在最后一行之前的行的期望成功但最后一行失败。是什么原因?

1 个答案:

答案 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);
});