量角器 - 分配给element.all.locator.count的变量返回NaN为什么?

时间:2015-03-19 18:05:11

标签: javascript angularjs selenium-webdriver protractor selenium-chromedriver

我正在使用Protractor,并尝试获取下拉列表中的所有元素。

我有以下内容,这部分似乎正在运作:

var counter = element.all(By.className('class')).count();
console.log(counter);

我预计值为43而不是从控制台日志中收到:

{ then: [Function: then],
  cancel: [Function: cancel],
  isPending: [Function: isPending] }

所以不放弃,然后我决定看看我是否可以将此值输出到我正在测试的Web应用程序内的搜索栏。要查看它显示的值:

element(by.className('search_bar')).sendKeys(counter);

当我再次运行时: 我看到搜索栏中的值变为43。这就是我期望的计数器等于。

然后我继续在其他地方使用变量'counter',并且我继续将值恢复为:

NaN

如何让它传递43的实际数值,但作为变量。

1 个答案:

答案 0 :(得分:2)

protractorWebdriverJS的包装器,它完全是异步的,基于promise的概念。基本上,当您编写protractor测试时,请将所有内容视为承诺。请参阅Promises and the Control Flow

count() 返回承诺。要查看或使用实际计数值,解决它

var counter = element.all(By.className('class')).count();
counter.then(function (value) {
    element(by.className('search_bar')).sendKeys(value);
});

请注意,如果您将承诺传递给expect(),那么只有在承诺得到解决后才会产生期望。这是因为它在jasminewd中得到了增强,而量角器依赖于{{3}}。换句话说,你可以写:

expect(counter).toEqual(10);

expect()担心这个承诺。