量角器失败:browser.findElements(..).一切都不是函数



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

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

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

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

我已经尝试了findElement和findElements,并不断收到相同的错误。

我偶然发现了之前的问题:使用量角器在列表中选择第二个锚元素。但这对我没有帮助。

就您应该使用的内容而言,当前接受的答案是正确的,但这就是您的代码不起作用的原因。

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

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

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

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

量角器这样做的方式是:

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

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

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

相关阅读:

  • 量角器语法与WebDriverJS语法

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

然后你会得到这个

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

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

或速记$$('.meta li')).first();,请参阅文档

最新更新