Javascript 如何开发自定义量角器定位器?

Javascript 如何开发自定义量角器定位器?,javascript,angularjs,selenium,testing,protractor,Javascript,Angularjs,Selenium,Testing,Protractor,我有一个角度应用程序,我在其中放置自定义html属性(“data testid='saveButton'”),用于识别按钮、输入等。 量角器没有内置的定位器:xpath方法不起作用,因为它将始终从文档根进行搜索(为了克服这个限制,我必须做大量的字符串魔术来构建xpath字符串,所以我放弃了这个变体) 所以我想写我自己的定位器,并咨询了官员 文件给我留下了一个重要的问题: 父元素对象上有哪些可用的方法?在他们的示例中,他们使用和.querySelectorAll('button')

我有一个角度应用程序,我在其中放置自定义html属性(“
data testid='saveButton'
”),用于识别按钮、输入等。 量角器没有内置的定位器:xpath方法不起作用,因为它将始终从文档根进行搜索(为了克服这个限制,我必须做大量的字符串魔术来构建xpath字符串,所以我放弃了这个变体)

所以我想写我自己的定位器,并咨询了官员

文件给我留下了一个重要的问题: 父元素对象上有哪些可用的方法?在他们的示例中,他们使用
和.querySelectorAll('button')
我在量角器文档中搜索了“querySelectorAll”,看看它是否是
ElementFinder
WebElement
的方法,但我没有找到它

此外,我没有找到调试定位器的方法(仅通过
browser.pause()
停止量角器测试),因此我无法在运行时查看如何处理给定的父元素


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

父元素本质上是选择器的上下文,它是一个由浏览器处理的DOM元素,在这种情况下,它可以使用任何DOM函数。正如addLocator的示例所述,关于传递给它的函数:

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

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

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'));
此外,还有一种方法可以实现您想要的功能(这就是
querySelectorAll
的功能):


是的,如果你把
/
放在前面,它将从根开始;否则它会尊重上下文,因此如果您有上下文,
/
可以正常工作。现在,如果您直接运行
element(by.xpath('.//div'))
,则上下文将是根元素,并且会以这种方式运行,但是
context.element(by.xpath('.//div')
工作正常。sry,我在您回答时删除了我的注释,因为在编写它之后,我看到了“.”出于文档目的:我认为xpath选择器不考虑上下文,只从根目录进行搜索。
var everyElementWithMyAttr = element.all(by.css('[data-testid="saveButton"]'));