微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

html – 使用n-child capybara的模糊匹配

我试图测试这个排序是在我正在测试的应用程序上工作的.我添加了2个条目’a’和’b’.我想测试一个出现在b之前. Html如下:
<ul id="attendee-list" class="bars">
<div>
    <li id="attendee-812202" class="bar border link attendee">
    <a class="expandable clearfix" href="#!/person/812202/">
</div>
     <div class="description">
     <p class="title">a</p>
     <p class="subtitle"></p>
     <p class="subtitle"></p>
</div>
</a>
</li>
</div>
<div>
     <li id="attendee-812206" class="bar border link attendee">
     <a class="expandable clearfix" href="#!/person/812206/">
     <div class="description">
     <p class="title">b</p>
<p class="subtitle"></p>
<p class="subtitle"></p>
</div>
</a>
</li>
</div>
</ul>

所以我尝试了如下:

find("ul.bars li:nth-child(1) a div.description p.title").should have_content("a")
  find("ul.bars li:nth-child(2) a div.description p.title").should have_content("b")

但是我得到一个模糊的匹配错误.有没有人知道我在这里做错什么,还是替代方法来验证?

解决方法

问题

问题是李:第一个孩子(1).这就是说,找到一个是父母的第一个孩子.由于每个li都被包装在一个div中,所以两个li元素都是第一个孩子 – 即两个标题都是由选择器ul.bars li:nth-​​child(1)div.description p.title(因此是模糊的匹配)返回).

解决方案1 ​​ – 查找全部

我认为最简单的解决方案是使用css-selector来返回所有的标题,然后使用Capybara来检查第一个和第二个.

# Get all titles
titles = page.all("ul.bars li a div.description p.title")

# Make sure that the first and second have the correct content
titles[0].should have_content("a")
titles[1].should have_content("b")

解决方案2 – Xpath

一个替代的解决方案,如果你不想得到所有(也许在页面上太多),是尝试xpath.它不是很漂亮,但你可以做:

page.find(:xpath,'(//ul[@class="bars"]/div/li/a/div[@class="description"]/p[@class="title"])[1]').should have_content("a")
page.find(:xpath,'(//ul[@class="bars"]/div/li/a/div[@class="description"]/p[@class="title"])[2]').should have_content("b")

原文地址:https://www.jb51.cc/html/230308.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐