如何在纯Ruby中使用Capybara(没有Rails)?

如何在纯Ruby中使用Capybara(没有Rails)?,ruby,testing,tdd,capybara,Ruby,Testing,Tdd,Capybara,我正试图让Capybara在一个简单的Ruby脚本中运行——即不使用/不使用Rails。以下是脚本: require 'rubygems' require 'capybara' require 'capybara/dsl' include Capybara Capybara.current_driver = :selenium Capybara.app_host = 'http://www.google.com' visit('/') 问题是,当我运行此命令时,会出现以下错误: Name

我正试图让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 
我做错了什么

更多信息:

  • MacOSX10.5
  • ruby 1.8.6(2009-06-08 patchlevel 369)[universal-darwin9.0]
  • 水豚(0.3.9)
谢谢

尼尔

注意:根据jnicklas的评论,我尝试了这一点,这与新的自述更加吻合:

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
想法


谢谢

这表明即使是不正确的文档也会永远存在。Capybara自述文件曾经建议将Capybara包含在全局名称空间中,这是一个非常糟糕的主意,并且会搞乱任意数量的随机事件。您应该在自己的模块或类中包含水豚,并使用它


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

这里有一些似乎对我有用的东西:

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
请检查此示例并将其分叉

这是关于从头开始使用的验收测试的一个小例子:

  • 水豚
  • Rspec
  • Selenium Web驱动程序

所有说明都在回购协议中

谢谢!不幸的是,当我将include放入模块中时,仍然看到相同的错误(NameError:uninitialized constant Capybara::Session)。我还做错了什么?最新的api要求包含Capybara::DSL看看这个github项目:从那里开始,设置一个独立的测试项目非常容易。这很酷,但是像“page.should have_content('My Account')”这样的代码似乎不起作用“应该”通常是在内核上定义的(我认为),在本例中似乎不是这样。我环顾四周,但无法立即找到解决方法。我们正在回复一条将近4年前的评论,但如果有任何谷歌用户也感到困惑,
should
(然后)和
expect
(当前样式)由
rspec expections
创业板提供。安装后,您将能够获得期望值,例如
expect(第页)。要获得内容“foo”
在尝试此代码后,我发现
无法连接到geckodriver 127.0.0.1:4444
是什么导致此错误?