我正在使用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的实际数值,但作为变量。
答案 0 :(得分:2)
protractor
是WebdriverJS
的包装器,它完全是异步的,基于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()
担心这个承诺。