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

html – 使用capybara在表中查找特定行

我有一个用户表,列出用户的ID,姓名,电子邮件用户名.我试图做的是验证该表中的特定条目.

基本上我想要做的是找到ID = 22的行,然后验证name = John Smith,email = john@smith.com和username = jsmith.该功能设置如下所示.我不明白的是几件事……

>如何获得具有特定文本的行,I.E.作为user.id = 22.
>一旦我有了这一行,我该如何使用它来获取每个元素.

我以为我可以做一些for循环,但无法弄清楚如何设置has_selector?条件. (下面是伪代码)

page.all('tr').each do |tr|
  next unless tr.has_selector?('td.id = 22') #psuedocode

  expect(tr.get('td.name').to eq("John Smith")
  #other expects here...
end

表格代码

<table class="table table-striped table-condensed">
  <thead>
    <tr>
      <th>ID</th>
      <th>Name</th>
      <th>Email</th>
      <th>Username</th>
    </tr>
  </thead>
  <tbody>
    <% @users.each do |user| %>
      <tr>
        <td class="id"><%= user.id %></td>
        <td class="name"><%= link_to user.name,user %></td>
        <td class="email"><%= user.base_name %></td>
        <td class="username"><%= user.username %></td>
      </tr>
    <% end %>
  </tbody>
</table>

解决方法

一个很好的干净方法是为每个tr元素添加一个“data-user-id”属性,然后用tr = find(‘tr [data-user-id =“22”]’)找到你想要的行,但是如果这不是一个选项,有很多方法可以做到这一点.两者之一

td = page.find(:css,'td.id',text: /^22$/) # find the id td with text of exactly 22
tr = td.find(:xpath,'./parent::tr') # get the parent tr of the td
expect(tr).to have_css('td.name',text: 'John Smith')

或者仅使用xpath查找行

tr = page.find(:xpath,".//tr[./td[@class='id'][text()='22']]")
expect(tr).to have_css('td.name',text: 'John Smith')

应该做你想做的事.如果你想坚持循环方法(不推荐,因为它会很慢 – 以及你的循环结构的方式,它可能无法验证任何东西)它将是

page.all('tr').each do |tr|
  next unless tr.has_css?('td.id',text: /^22$/)
  expect(tr).to have_css('td.name',text: "John Smith")
  #other expects here...
end

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

相关推荐