【问题标题】:Capybara::ElementNotFound - how do I see the source it checked against?Capybara::ElementNotFound - 我如何查看它检查的来源?
【发布时间】:2012-12-09 23:19:00
【问题描述】:

我将 Capybara(v2.0.1) 与 RSpec(v2.11.0) 一起使用,并且我的规范与 README 上的示例非常相似:

require 'capybara/rspec'
require 'capybara/dsl'

# other setup…

describe "Sign in" do
  include Capybara::DSL

  before do
    within("#session") do
      fill_in 'Login', :with => 'user@example.com'
      fill_in 'Password', :with => 'password'
    end
    click_link 'Sign in!'
  end

  subject { page }
  it { should have_content "logged_in? true" }
end

不幸的是,这是我看到的失败消息:

失败/错误:在(“#session”)内
Capybara::ElementNotFound:
找不到css“#session”

但它没有向我显示它所使用的源的输出,并且在单击该链接后涉及重定向,所以我想确定它正在检查什么。

Capybara 似乎也在抑制警告(坦率地说,我觉得这很烦人),因为我在多个地方尝试了 warn page.inspect,但输出中没有任何内容。

谁能告诉我我该怎么做?非常感谢您提供的任何帮助或见解。

我应该补充一下,我没有使用 Rails 或 Cucumber。

【问题讨论】:

    标签: ruby rspec capybara


    【解决方案1】:

    我只是在测试开始时添加了这一行:

    puts "#{page.html.inspect}"
    

    我必须在命令行上查看所有内容,但它又快又脏。

    【讨论】:

      【解决方案2】:

      capybara 的 save_and_open_page 将 html 写入您应用的 tmp 目录并在您的默认浏览器中打开它。

      这几天在水豚自述部分的debugging section中提到了。

      【讨论】:

        【解决方案3】:

        我使用 irb 作为 Selenium 的实时调试器,因此我可以随时跟进。对于调试 Capybara/Selenium 中的怪异现象非常有用。

        【讨论】:

          【解决方案4】:

          您可以使用 page.html 查看整个源代码。从那里通过检查#session 的第一个匹配项很容易进行检查。

          【讨论】:

          • 感谢您的回复。当我无法从示例块中获取任何内容到 STDOUT 时,我看不到如何检查源代码。知道为什么会这样吗?前块确实允许 STDOUT,而且这只发生在我使用 Capybara 时,Rack::Test 不会给我这个问题。
          • 我看到了someone else has the stdout problem too,所以我打开了 Capybara 邮件列表中的那部分。感谢您的帮助。
          • 你能用调试器gem这样查看吗?
          • 我希望避免在运行规范时这样做,当所有输出都已经在控制台中时,这很容易,但我可能会使用 Pry。感谢所有帮助,非常感谢。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多