Как использовать Capybara в чистом Ruby (без Rails)?

Я пытаюсь запустить 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 (уровень исправлений 369 от 08.06.2009) [универсальный-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

Мысли?

Спасибо!


person Neal Enssle    schedule 14.08.2010    source источник
comment
Последний api требует включения Capybara :: DSL   -  person bparanj    schedule 22.07.2011
comment
Взгляните на этот проект github: github.com/searls/remote-capybara-cucumber- example Начиная с этого момента, довольно легко настроить автономный проект тестирования.   -  person leifg    schedule 03.01.2012


Ответы (3)


Вот кое-что, что, кажется, работает для меня:

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
person Pål Brattberg    schedule 13.11.2010
comment
Это круто, но такой код, как page.should have_content («Моя учетная запись»), похоже, не работает. 'should' обычно определяется в ядре (я думаю), и, похоже, в этом случае не используется. Я осмотрелся, но не сразу понял, как это исправить. - person door_number_three; 12.01.2014
comment
Это было правильным ответом на комментарий почти четырехлетней давности, но в случае, если есть какие-то гуглеры, которые также смущены, should (тогда) и expect (текущий стиль) предоставляются гемом rspec-expectations. Установив это, вы сможете оправдать такие ожидания, как expect(page).to have_content "foo" - person DVG; 26.11.2014
comment
Попробовав этот код, я получаю unable to connect to geckodriver 127.0.0.1:4444, что могло вызвать эту ошибку? - person MAGA; 23.09.2019

Это говорит о том, что даже неверная документация живет вечно. README для Capybara раньше рекомендовал включать Capybara в глобальное пространство имен, это действительно плохая идея, которая мешает любому количеству случайных вещей. Вы должны включить Capybara в свой собственный модуль или класс и использовать его вместо этого.

Ознакомьтесь с README, чтобы узнать о текущих передовых методах.

person jnicklas    schedule 15.08.2010
comment
Спасибо! К сожалению, я все еще вижу ту же ошибку (NameError: неинициализированная константа Capybara :: Session), когда помещаю include внутрь модуля. Что еще я делаю не так? - person Neal Enssle; 15.08.2010

Пожалуйста, проверьте этот пример CapybaraRspec101 и создайте его вилку.

Это небольшой пример приемочных испытаний на http://www.hi5.com с использованием с нуля:

  • Водосвинка
  • Rspec
  • Селен-webdriver

Все инструкции в репо

person G. I. Joe    schedule 07.09.2016