我有一个用户表,列出用户的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 举报,一经查实,本站将立刻删除。