在Capybara中,如何选择动态生成的元素

时间:2013-07-18 02:06:42

标签: ruby-on-rails rspec capybara

我想选择以下元素:

<tr class="tr_even" id="13-hey-guys">

我想通过它的id来选择它,它是动态生成的对象id及其名称的串联。

当我使用此行捕获它时:

within('tr id=\"#{item.id}-#{item.name.downcase}\"') do
    ...

我收到以下错误:

Failure/Error: within('tr id=\"#{item.id}-#{item.name.downcase}\"') do
 Nokogiri::CSS::SyntaxError:
   unexpected '=' after '[#<Nokogiri::CSS::Node:0x0000010835f210 @type=:DESCENDANT_SELECTOR, @value=[#<Nokogiri::CSS::Node:0x0000010835f4e0 @type=:ELEMENT_NAME, @value=["tr"]>, #<Nokogiri::CSS::Node:0x0000010835f2b0 @type=:ELEMENT_NAME, @value=["id"]>]>]'

如何捕捉元素

2 个答案:

答案 0 :(得分:1)

默认情况下,Capybara使用CSS查找元素。

我认为找到该元素的正确方法应该是:

within("tr##{item.id}-#{item.name.downcase}") do
  ...

我希望这会有所帮助。

答案 1 :(得分:0)

以下情况如何?

    within("tr[@id=\"#{item.id}-#{item.name.downcase}\"]")

我没有在内部使用,但这通常可以指定find中的元素。

顺便提一下,当您想使用#{some_variable}时,必须使用双引号。