【问题标题】:Locate element by a presence of a custom attribute通过存在自定义属性来定位元素
【发布时间】:2016-11-07 14:37:19
【问题描述】:

如何在 Protractor 中找到所有具有特定自定义属性的元素?我在 Stackoverflow 和网上发现了类似的问题,但他们使用 xpath 限制标签。

element(by.xpath('//div[@custom-attribute]'))

与上面的例子相反,我不想限制标签,因为我们有不同的标签具有相同的自定义属性。无论标签如何,我都想找到具有该属性的所有元素。这可能吗?

【问题讨论】:

  • 你不能用document.querySelectorAll('div[attribute]')之类的东西吗?
  • 因为这个自定义属性不仅定义在 div 元素上,还定义在按钮、超链接和其他标签等其他元素上,我不确定这是否可能。 ..除非我对所有其他标签都有这样的声明。
  • 所以?只需忽略div
  • 首先,不要将 cmets 编辑到您的问题中。我选择了那个欺骗目标,因为它还询问如何查找元素“按属性”
  • @Cerbrus 如果我错了,请纠正我,该问题要求按“隐藏”的属性值查找元素。不是按属性名称。

标签: javascript angularjs testing jasmine protractor


【解决方案1】:

您可以使用CSS selector locator

element.all(by.css('[custom-attribute]'));

或者,通过$$ 快捷方式:

$$('[custom-attribute]');

[custom-attribute] 是一个 attribute selector,可以匹配任何具有 custom-attribute 属性的元素。

【讨论】:

  • 不能将普通querySelectorAll 的结果传递给element.all() 吗?还是我误以为那里可以使用原生 JS 功能?
  • @Cerbrus 是的,没有对querySelectorAll()“直接” 访问权限,但理论上您可以通过executeScript() 或在自定义定位器中执行此操作 - 一些内置量角器定位器实际上在内部使用 querySelectorAll - 例如 - by.repeater() (source)。谢谢,好问题(虽然没有否决你的答案)。
  • 我对 -3 有点惊讶。但由于这是量角器的“本机”查询选择器方法,因此无论如何这是更好的答案。
  • @Cerbrus 是的,-3 绝对是太多了。好的一面是——你可以获得“同侪压力”徽章(如果以前没有的话)。
  • 我尝试了这种方法,但我不确定如何迭代返回的集合。我尝试了 foreach 甚至尝试调用单击集合以查看它是否有任何作用。我得到“找不到元素的可测试性。”
猜你喜欢
  • 1970-01-01
  • 2014-07-01
  • 1970-01-01
  • 2013-12-21
  • 1970-01-01
  • 1970-01-01
  • 2021-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多