我有一个角度应用程序,我将自定义html属性(" data-testid='saveButton'
")用于标识,例如按钮,输入等
Protractor没有内置的定位器:xpath-way不起作用,因为它总是从文档根目录搜索(为了克服这个限制,我必须做很多字符串魔法来构建xpath-string,所以我放弃了这个变种)。
所以我想编写自己的定位器,并咨询官方Protractor Documentation。
文档给我留下了一个重要问题:
parent-element-object有哪些可用的方法?在他们的例子中,他们使用using.querySelectorAll('button');
,但他们怎么知道他们可以使用它?
我搜索了“querySelectorAll”'在量角器文档中查看它是否可能是ElementFinder
或WebElement
的方法,但我没有找到它。
此外,我发现无法调试定位器(仅通过browser.pause()
停止量角器测试),因此我无法查看运行时以查看我可以对给定的父元素执行的操作。
那么有人知道如何获得有关父元素具有哪些方法的信息吗?
答案 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"]'));