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

Protractor - variable assigned to element.all.locator.count is returning NaN why?

我正在使用量角器,并试图获取下拉列表中的所有元素。

我有以下内容,这部分似乎有效:

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 但作为变量。

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

count()returns一个承诺。为了查看或使用实际计数值,解析它:

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

请注意,如果您将承诺传递给 expect(),它只会在承诺得到解决时才会产生期望。这是因为量角器所依赖的 jasminewd 中增强了这样做。也就是说,你可以这样写:

expect(counter).toEqual(10);

expect()为诺言操心。