第一次尝试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 绑定。除此之外,它还添加了许多方便的概念,例如ElementFinder
或ElementArrayFinder
或browser
对象。
量角器还为您提供了一种直接调用纯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();
,请参阅文档