gpt4 book ai didi

ruby-on-rails - capybara 和 Rspec : correct way to use within() and have_selector() together?

转载 作者:数据小太阳 更新时间:2023-10-29 06:45:22 26 4
gpt4 key购买 nike

我使用 rspec 2.6.0 和 Capybara 1.1.1 进行验收测试。
具有如下 View :

<tr >
<td>Team 3 Name</td>
<td>true</td>
<td><a href="/teams/3">Show</a></td>
<td><a href="/teams/3/edit">Edit</a></td>
<td><a href="/teams/3">Deactivate</a></td>
</tr>
<tr >
<td>Team 4 Name</td>
<td>true</td>
<td><a href="/teams/4">Show</a></td>
<td><a href="/teams/4/edit">Edit</a></td>
<td><a href="/teams/4">Deactivate</a></td>
</tr>

我想编写一个验收测试,声明:“团队 3 没有‘停用’链接。”我希望以下操作失败:

within('tr', :text => 'Team 3 Name') do |ref|
page.should_not have_selector('a', :text => 'Deactivate')
end

但它过去了。为了进一步测试发生了什么,我写了荒谬的:

lock = false
within('tr', :text => 'Team 3 Name') do |ref|
page.should have_selector('a', :text => 'Deactivate')
page.should_not have_selector('a', :text => 'Deactivate')
lock = true
end
lock.should be_true

也通过了。

我由此假设 have_selector() 调用使用的范围不受 within() block 的限制,但我不确定这是为什么。 capybara 文档使用这种模式并且似乎没有提到任何陷阱。使用 within 来限制我的选择范围的正确方法是什么?谢谢你。/萨勒诺斯特

最佳答案

自己还在学习 capybara ,但是你试过了吗have_link而不是 have_selector ?另外我认为你不需要 |ref| .例如:

lock = false
within('tr', :text => 'Team 3 Name') do # omit |ref|
page.should have_link('Deactivate')
page.should_not have_link('Deactivate')
lock = true
end
lock.should be_true


2012 年 10 月 13 日更新

在进一步了解 Capybara 之后,我发现这里有几个潜在的问题:

  • within可以默默忽略 text field 。您会注意到示例仅显示 CSS 或 XPath 查找器而没有附加参数。
  • 如果within确实使用 text , 它可能在这里不起作用,因为你要求它查看 <tr> , 但文本在 <td> 中.
  • 很有可能 page即使您在 within 中,主题仍会定位整个页面堵塞。 within示例主要是关于使用 fill_inclick .异常(exception)情况是 Beware the XPath // trap 下的示例.

关于创建 within block ,您可以为表格行提供唯一的 ID 并使用 CSS 搜索它们,或者您可以针对第一个匹配行编写特定的 XPath。

后者的问题是你想使用 within<tr> 上,但您用于定位的文本位于 <td> 内子元素。因此,例如,此 XPath 应该找到包含文本 Team 3 Name 的表格单元格但是你只是在工作within第一个单元格,而不是整行。

within(:xpath, "//tr/td[normalize-space(text())='Team 3 Name'") do

有一些方法可以使用 XPath “备份”到父元素,但我不知道该怎么做,而且我读到这不是好的做法。我认为你最好的选择可能是只生成 id,这样你的行就这样开始:

<tr id="team_3">

然后用简单的方式定位他们

within("tr#team_3")

关于ruby-on-rails - capybara 和 Rspec : correct way to use within() and have_selector() together?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9898150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com