量角器失败:browser.findElements(...)。所有都不是函数

时间:2017-04-01 19:31:19

标签: javascript angularjs protractor

第一次尝试e2e测试我的AngularJS应用程序。

我有一个带有'meta'类的ul。 ul有几个li。 我想抓住第一个li并将其与字符串进行比较。

var duration = browser.findElements(by.className('meta')).all(by.tagName('li')).get(1);

但是在运行测试时我不断收到错误:失败:browser.findElements(...)。all都不是函数。

我已经尝试过findElement和findElements并继续遇到同样的错误。

我偶然发现了上一个问题:Selecting second anchor element within lists using protractor。但它没有帮助我。

2 个答案:

答案 0 :(得分:6)

目前接受的答案在您应该使用的内容方面是正确的,但这就是您的代码无效的原因。

你可能知道,量角器包装了WebDriverJS - selenium javascript绑定。除此之外,它还添加了许多方便的概念,例如ElementFinderElementArrayFinderbrowser对象。

量角器还为您提供了一种直接调用纯WebDriverJS函数和方法的方法,例如,它允许使用findElement()findElements()browser对象上。

在您的情况下,browser.findElements(by.className('meta'))将返回WebElement的数组,这是一个纯WebDriverJS概念。注意,这不是ElementArrayFinder实例,此时您不在量角器区域。

现在,您正尝试在此元素数组上调用.all()函数,但它显然会失败。

量角器的做法是:

var duration = $$('.meta li').first(); 

或者,您甚至可以使用单个选择器:

var duration = $('.meta li:first-of-type');

相关阅读:

答案 1 :(得分:2)

最好使用量角器的“默认”ElementFinder语法,例如element(by.css('ul')),请参阅docs

然后你会得到这个

var duration = element(by.className('meta')).all(by.tagName('li')).get(1);

element.all(by.css('.meta li')).first();,请参阅docs

或简写$$('.meta li')).first();,请参阅docs