如何在Cucumber / Capybara中打印<span>的内容?</span>

时间:2013-02-25 14:39:05

标签: ruby debugging cucumber capybara

我想打印位于跨度中的错误消息的内容,看起来像这样:

<span>Es exisitiert bereits ein Account mit dieser E-Mail Adresse. Wenn Sie sich sicher sind, dass dies Ihre Adresse ist, dann klicken Sie <a href="https://link-removed.com">hier</a> um das Passwort und den Zugang zu Ihrem Account zu erhalten.</span>

在我的步骤定义中,我尝试了以下

print page.find('.error-msg span')
然而,这并没有真正起作用。谷歌搜索了一个小时后,我找不到任何有用的东西,这也可能是因为我对这一切都很陌生。

我基本上想调试,所以我想看看实际内容是什么。它对未来的努力也很有帮助。

4 个答案:

答案 0 :(得分:6)

您可以针对该号码致电text

puts page.find('.error-msg span').text

http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Element

答案 1 :(得分:0)

您应该使用rspec匹配器来通过或通过错误。这样做会在页面上打印出有用的信息。

Given I visit a page
Then I should see "foo" in ".error-msg span"

Then /^I should see "([^\"]*)" in "([^\"]*)"$/ do |text, css|
  page.should have_selector(tag, text: text )
end

如果你使用它并且页面上有一个'.error-msg span'元素,如果文本与你的预期不符,那么Capybara显示的错误信息将告诉你选择器里面的内容。例如:

      expected to find css ".error-msg span" with text "foo" but there were no matches. Also found "Bar", which matched the selector but not all filte

RS。 (水豚:: ExpectationNotMet)

翻译:'。error-msg span'里面的文字是“bar”而不是“foo”

答案 2 :(得分:0)

您也可以使用它,因为您只需要验证该范围内的文本:

Then /^I should see (.+) as content in xpath "([^"]*)"$/ do |content, xpath|
  assert page.find(:xpath, xpath + "[contains(string(), '" + content +"')]")
end

给出span的xpath。它适用于Strings Only

答案 3 :(得分:0)

您可以尝试这种方法。将文件elements.rb添加到您的支持文件夹并在其中包含:

 def text(type=nil)
    type ||= :all unless Capybara.ignore_hidden_elements or Capybara.visible_text_only
   synchronize do
  if type == :all
     base.all_text
  else
      base.visible_text
  end
 end
end

然后按如下所示编写步骤定义(示例):

within(:id, "") do 
    page.should have_content("")
         puts text
    end
end

您可以在将来的任何步骤定义的末尾添加puts text以输出元素文本