我想验证量角器中的表行数,在此类表格多次出现的页面上。我一直在尝试使用 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
添加单个类。
有没有办法获取在量角器中找到的第一个元素,然后搜索其子元素?
我没有在量角器中使用:first-of-type
作为 css 选择器;但是,您可以获得所有th
的第一个table
,然后检查计数是否为 4。
expect(element.all(by.css('table')).first().all(by.css('th')).count()).toBe(4);
你当然可以按照@cnishina建议的方式去做(我实际上更喜欢他的方法而不是制作一个长 CSS 选择器),但如果你想继续使用单个 CSS 选择器来解决这个问题,你还应该将first-of-type
(或first-child
)应用于父div
:
div:first-of-type > table:first-of-type > tr:first-of-type > th
我还添加了强制实施直接父子关系的>
。