Rspec以xpath中的特定链接为目标,其中链接文本是一段数据

时间:2013-09-02 16:17:51

标签: ruby-on-rails xpath rspec

我对此有点新意,但我正试图让rspec点击链接。 我用索引替换了索引寻呼机上的“显示”链接,该链接是项目的名称。

即。我的观点有这个

     <td><%= link_to task.name, task_path(task) %></td>

我的rspec文件有一个参考

    find(:xpath, "(//a[text()= 'Show'])[1]").click

我希望变成像

这样的东西
    find(:xpath, "(//a[text()= @task1.name])[1]").click

那应该在列表中选择正确的任务,这样我就可以用

来完成它
    it { should have_content(@client.name) }
    it { should have_content(@task1.name) }
    it { should have_content(@task1.description) }

不幸的是,我无法弄清楚如何将@ task.name放入其中,以免它破坏。

有什么想法吗?

更新

    Failure/Error: find(:xpath, "(//a[text()= @task1.name])[1]").click
    Capybara::ElementNotFound:
    Unable to find xpath "(//a[text()= @task1.name])[1]"
    # ./spec/requests/task_pages_spec.rb:123:in `block (4 levels) in <top (required)>'

2 个答案:

答案 0 :(得分:0)

请以这种方式尝试xpath,错过了Ruby的字符串插值

find(:xpath, "//a[text()= \"#{@task1.name}\"][1]").click

我试图制作一个类似的例子: -

require 'nokogiri'

doc = Nokogiri::HTML::Document.parse <<-eotl
<div>
  <p>foo</p>
  <p>foo</p>
  <p>bar</p>
</div>
eotl

doc.class # => Nokogiri::HTML::Document

class Person
  attr_accessor :name
end

ram = Person.new
ram.name="foo"
ram.name # => "foo"
doc.search("//div/p[text()= \"#{ram.name}\"]").to_a.size
# => 2

答案 1 :(得分:0)

这比我想象的容易得多....

    click_link @task1.name

想想我可能需要在角落里哭泣,因为他花了好几个小时试图解决这个问题......