如何开发定制量角器定位器?

时间:2015-06-25 22:51:45

标签: javascript angularjs selenium testing protractor

我有一个角度应用程序,我将自定义html属性(" data-testid='saveButton'")用于标识,例如按钮,输入等 Protractor没有内置的定位器:xpath-way不起作用,因为它总是从文档根目录搜索(为了克服这个限制,我必须做很多字符串魔法来构建xpath-string,所以我放弃了这个变种)。

所以我想编写自己的定位器,并咨询官方Protractor Documentation

文档给我留下了一个重要问题: parent-element-object有哪些可用的方法?在他们的例子中,他们使用using.querySelectorAll('button');,但他们怎么知道他们可以使用它?

我搜索了“querySelectorAll”'在量角器文档中查看它是否可能是ElementFinderWebElement的方法,但我没有找到它。

此外,我发现无法调试定位器(仅通过browser.pause()停止量角器测试),因此我无法查看运行时以查看我可以对给定的父元素执行的操作。

那么有人知道如何获得有关父元素具有哪些方法的信息吗?

1 个答案:

答案 0 :(得分:2)

parent-element,它本质上是选择器的上下文,是一个由浏览器处理的DOM元素 - 它可以使用任何DOM函数,在本例中为Element.querySelectorAll。正如addLocator的例子所说,关于你传递给它的函数:

  

此函数将被序列化为字符串,并将在浏览器中执行。

另外,请记住,有一种方法可以为xpath选择器提供上下文,从而避免从root搜索:

var context = element(by.css('.some-parent-element-class'));
var divDirectDescendants = context.element(by.xpath('div'));
var divAllDescendants = context.element(by.xpath('.//div'));

使用CSS,这些将是:

var divDirectDescendants = element(by.css('.some-parent-element-class > div'));
var divAllDescendants = element(by.css('.some-parent-element-class  div'));

此外,还有一种方法可以通过CSS selector实现您的目标(毕竟这是querySelectorAll):

var everyElementWithMyAttr = element.all(by.css('[data-testid="saveButton"]'));