获得量角器中的第一个元素

时间:2017-01-13 21:29:26

标签: css-selectors protractor

我想在一个页面中验证量角器中的表行数,在这个页面中,此类表格不止一次出现。我一直在尝试使用first-of-type选择器,但它似乎正在捕获两个表,因为它们并不是并排显示的。

例如,给定此HTML:

<div>
  <table class="foo">
    <tr>
      <th>First row</th>
      <th>Second row</th>
      <th>Third row</th>
      <th>Fourth row</th>
    </tr>
  </table>
</div>
<div>
  <table class="foo">
    <tr>
      <th>First row</th>
      <th>Second row</th>
      <th>Third row</th>
      <th>Fourth row</th>
    </tr>
  </table>
</div>

这个量角器代码:

element.all(by.css('table:first-of-type tr:first-of-type th')).then(function (elements) {
  expect(elements.length).toBe(4);
});

量角器失败的原因是有8个元素而不是4. table:first-of-type选择器似乎正在捕捉这两个元素,因为它们都是他们父母div的第一个孩子组件。我的项目的结构是这样的,最好不要在每个包装div中添加单个类。

有没有办法在Protractor中找到第一个元素,然后搜索其子元素?

2 个答案:

答案 0 :(得分:5)

我没有在Protractor中使用:first-of-type作为css选择器;但是,您可以获取所有table的{​​{3}} th,然后检查first是否为4。

expect(element.all(by.css('table')).first().all(by.css('th')).count()).toBe(4);

答案 1 :(得分:3)

你当然可以像@cnishina建议的那样(我实际上更喜欢他的方法而不是制作一个长的CSS选择器),但如果你想继续使用一个CSS选择器来解决这个问题,你也应该应用{ {1}}(或first-of-type)到父first-child

div

我还添加了div:first-of-type > table:first-of-type > tr:first-of-type > th 来强制执行直接父子关系