我想在一个页面中验证量角器中的表行数,在这个页面中,此类表格不止一次出现。我一直在尝试使用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中找到第一个元素,然后搜索其子元素?
答案 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
来强制执行直接父子关系。