量角器:使用带有元素集合的where子句

时间:2016-06-11 22:16:01

标签: javascript testing protractor automated-tests

我想返回最靠近元素父级的子div

HTML

<div id='Parent'>
  <div>
    <div></div>
  </div>
  <div>
    <div></div>
    <div></div>
    <div></div>
  </div>
</div>

量角器

var parent = element(by.id('Parent'));
var topChildren = parent.all(by.tagName('div')).then(elem => [elem[0], elem[1]]); //this doesn't work.

我知道这里的逻辑可能是错的(前两个元素真的会成为顶级孩子吗?)但我不认为这甚至会返回一系列元素。例如,topChildren.getAttribute('class')会抛出topChildren.getAttribute is not a function,因此它甚至不会将返回视为元素集合。

1 个答案:

答案 0 :(得分:1)

由于您只需要直接子项(非递归搜索),因此无法使用by.tagName() - 它以递归方式运行,无法更改。我会通过"CSS selector"> direct parent-child relationship selector

来解决
var topChildren = $$("#Parent > div");

$$这里是shortcutelement.all(by.css())

请注意,在这种情况下,您必须在开头有#Parent部分,因为CSS选择器需要在parent > children中有父部分 - 就像选择器一样。换句话说,你无法做到

var parent = element(by.id('Parent'));
var topChildren = parent.$$("> div");  // <- would fail

如果您需要单独定义parent元素,那么by.xpath()会有所帮助:

var parent = element(by.id('Parent'));
var topChildren = parent.all(by.xpath(("./div"));