javascript - 如何开发自定义 Protractor 定位器?

标签 javascript angularjs selenium testing protractor

我有一个 Angular 应用程序,我在其中放置自定义 html 属性(“data-testid='saveButton'”)以用于识别,例如按钮、输入等 Protractor 对此没有内置定位器:xpath-way 不起作用,因为它总是从文档根目录搜索(为了克服这个限制,我将不得不做很多字符串魔术来构建 xpath-string,所以我放弃了这个变体)。

于是想自己写一个定位器,咨询了官方Protractor Documentation .

文档留给我一个重要的问题: 父元素对象有哪些可用方法?在他们的示例中,他们使用 using.querySelectorAll('button'); 但他们怎么知道他们可以使用这个?

我在 Protractor 文档中搜索“querySelectorAll”,看它是否可能是 ElementFinderWebElement 的方法,但我没有找到它。

我也没有找到调试定位器的方法(只能通过 browser.pause() 停止 Protractor 测试),所以我无法查看运行时来了解我可以用给定的父元素。

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

最佳答案

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

This function will be serialized as a string and will execute in the browser.

此外,请记住,有一种方法可以为 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'));

此外,还有一种方法可以通过 CSS selector 实现您想要的效果(毕竟 querySelectorAll 是什么):

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

关于javascript - 如何开发自定义 Protractor 定位器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31062132/

相关文章:

javascript - react native - console.error : 'React Native version mismatch

javascript - 循环遍历对象中的嵌套数组

javascript - 无法更改在 UpdatePanel 内创建的 JavaScript 变量

selenium - 机器人框架 : How to retrieve the answer of a request

java - 如何让其他测试用例等待一段时间,直到测试用例在 TestNG 并行执行中执行操作

php - 显示带有 7000 多个地点标记的谷歌地图的最佳方式是什么

javascript - 从 angularjs 中的异步代码设置范围数据

在运行测试之前,AngularJS + Protractor 等待所有 ajax 调用结束/整页加载

angularjs - 访问 Angular-UI-Router 的 onExit 范围?

ruby-on-rails - 使用 Rspec/Capybara/Selenium 与 Canvas 元素交互