【问题标题】:How to use Capybara in pure Ruby (without Rails)?如何在纯 Ruby(没有 Rails)中使用 Capybara?
【发布时间】:2023-03-08 22:08:01
【问题描述】:

我正在尝试让 Capybara 在一个简单的 Ruby 脚本中运行——即没有/在 Rails 之外运行。这是脚本:

require 'rubygems'
require 'capybara'
require 'capybara/dsl'

include Capybara

Capybara.current_driver = :selenium
Capybara.app_host = 'http://www.google.com'

visit('/')

问题是当我运行它时,我得到了这个错误:

NameError: uninitialized constant Capybara::Session

at top level    in dsl.rb at line 52
method gem_original_require in custom_require.rb at line 36
method require  in custom_require.rb at line 36
at top level    in capybara_test.rb at line 3
method gem_original_require in custom_require.rb at line 31
method require  in custom_require.rb at line 31
at top level    in capybara_test.rb at line 

我做错了什么?

更多信息:

  • Mac OS X 10.5
  • ruby 1.8.6(2009-06-08 补丁级别 369)[universal-darwin9.0]
  • 水豚 (0.3.9)

谢谢!

尼尔

注意:根据 jnicklas 的评论,我尝试了这个,它更接近于新的 README:

require 'rubygems'
require 'capybara'
require 'capybara/dsl'

Capybara.default_driver = :selenium
Capybara.app_host = 'http://www.google.com'

module MyCapybaraTest
  include Capybara

  def test_google
    visit('/')
  end
end

很遗憾,我仍然看到同样的错误:

NameError: uninitialized constant Capybara::Session

想法?

谢谢!

【问题讨论】:

标签: ruby testing tdd capybara


【解决方案1】:

这似乎对我有用:

require 'rubygems'
require 'capybara'
require 'capybara/dsl'

Capybara.run_server = false
Capybara.current_driver = :selenium
Capybara.app_host = 'http://www.google.com'

module MyCapybaraTest
  class Test
    include Capybara::DSL
    def test_google
      visit('/')
    end
  end
end

t = MyCapybaraTest::Test.new
t.test_google

【讨论】:

  • 这很酷,但是像“page.should have_content('My Account')”这样的代码似乎不起作用。 “应该”通常在内核上定义(我认为),在这种情况下似乎没有。我环顾四周,但无法立即弄清楚如何解决此问题。
  • 回复一个快 4 年的评论很奇怪,但如果有任何谷歌人也感到困惑,should(当时)和expect(当前风格)由rspec-expectations 宝石。安装后,您将能够拥有诸如 expect(page).to have_content "foo" 之类的期望
  • 尝试此代码后,我得到unable to connect to geckodriver 127.0.0.1:4444 可能导致此错误的原因是什么?
【解决方案2】:

这表明即使是不正确的文档也会永远存在。 Capybara README 曾经建议将 Capybara 包含在全局命名空间中,这是一个真的坏主意,并且会弄乱任意数量的随机事物。您应该在自己的模块或类中包含 Capybara 并改用它。

查看自述文件了解当前的最佳实践。

【讨论】:

  • 谢谢!不幸的是,当我将包含放在模块中时,我仍然看到相同的错误(NameError:未初始化的常量 Capybara::Session)。我还做错了什么?
【解决方案3】:

请检查这个 CapybaraRspec101 示例并 fork 它。

这是一个从头开始使用http://www.hi5.com 进行验收测试的小例子:

  • 水豚
  • Rspec
  • Selenium 网络驱动程序

所有说明都在 repo 中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 2014-02-03
    • 2020-07-11
    • 2017-12-21
    相关资源
    最近更新 更多