【问题标题】:In Capybara, how can I select a dynamically generated element在 Capybara 中,如何选择动态生成的元素
【发布时间】:2013-07-18 02:06:41
【问题描述】:

我要选择以下元素:

<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"]>]>]'

如何捕捉我的元素

【问题讨论】:

    标签: ruby-on-rails rspec capybara


    【解决方案1】:

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

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

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

    我希望这会有所帮助。

    【讨论】:

    • 这不起作用,我得到 Failure/Error: within('tr##{item.id}-#{item.name.downcase}') do Nokogiri::CSS::SyntaxError: unexpected '#' 在 '[#<:css::node:0x0000010152e278>]'之后
    • @EricBaldwin 你试过用"tr##{item.id}-#{item.name.downcase}"代替'tr##{item.id}-#{item.name.downcase}'吗?
    • 使用双引号给了我“无法找到 css...”的错误。它仍然无法正常工作,但是该语法错误消失了。谢谢
    【解决方案2】:

    下面的呢?

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

    inside我没用过,不过find中的元素通常可以这样指定。

    顺便注意,当你想使用#{some_variable}时,你必须使用双引号。

    【讨论】:

      猜你喜欢
      • 2014-12-28
      • 1970-01-01
      • 1970-01-01
      • 2016-08-07
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      • 2020-12-28
      • 1970-01-01
      相关资源
      最近更新 更多