Как мне проверить применение селена с капибарой? - PullRequest
2 голосов
/ 10 февраля 2012

Вот моя проблема:

Я пишу приложение, в котором использует selenium-webdriver для подключения к сайту клик / заполнить кучу вещей.

Очевидно, я хочу проверить мой код ... И вот тут это становится трудным! Как мне это сделать?

Вот мой тест:

require 'spec_helper'
require 'capybara/rspec'

module MyModule
  Capybara.run_server = false

  describe "the method", :type => :request do
    it "should open a browser and go to the site" do
      MyClass.open_site("http://google.com")
      page.has_content? "Google"
    end
  end
end

Вот код:

require 'selenium-webdriver'

module MyModule
  class MyClass
    def self.open_site(url)
      @driver = Selenium::WebDriver.for :firefox
      @driver.navigate.to url 
    end
  end
end

Вот ошибка, которую я получаю:

Failures:

  1) the method should open a browser and go to the site
     Failure/Error: page.has_content? "Google"
     ArgumentError:
       rack-test requires a rack application, but none was given
     # (eval):2:in `has_content?'
     # ./spec/integration/myclass_spec.rb:10

Я могу понять, что тест сбит с толку, потому что обычно Capybara запускает Selenium, чтобы посетить сайт и убедиться, что все выглядит хорошо. Но здесь Selenium работает как часть кода ...

Как я могу сказать Rack-Test использовать запущенный Selenium в качестве своего приложения?

Является ли Capybara правильным решением для проверки этого кода?

Спасибо за вашу помощь!

Ответы [ 2 ]

1 голос
/ 01 августа 2012

Одной из функций, которые вы используете, должно быть использование приложения в стойке.

Проблема не должна быть с линией:

page.has_content? "google"

, потому что она отлично работает для меня с селеномВодитель.Я подозреваю, что вы настроили драйвер так.

У меня была похожая проблема с запуском моих тестов на капибару, пока я не обнаружил следующие сообщения: группы Google

Онидал мне несколько советов, чтобы мой тест запустился.В конце концов у меня были эти строки для настройки моих тестов.Я использую Chrome, но Internet Explorer и Firefox будут работать так же.

require 'selenium-webdriver'

Capybara.register_driver :selenium_ie do |app|
  Capybara::Selenium::Driver.new(app, :browser => :chrome)
end

Capybara.default_driver = :selenium_chrome

Capybara.app_host = 'http://www.google.com'
0 голосов
/ 15 октября 2013

Вот что я сделал с моим приложением Sinatra под управлением MongoDB.Закомментируйте код селена, чтобы попробовать чистый селен без капибары.Установите камни test-unit, capybara, capybara-webkit, selenium-webdriver.Для capybara-webkit выполните brew install qt4 (mac) или установите qt4 другим способом.

require './app'
require 'test-unit'
require 'capybara'
require 'capybara-webkit'
require 'selenium-webdriver'

class IntegrationTest < Test::Unit::TestCase  
  include Capybara::DSL

  def setup
    # Clear database first
    MongoMapper.database.collections.select { |c| c.name != 'system.indexes' }.each(&:drop)

    # For pure selenium: @b = Selenium::WebDriver.for :firefox
    # For pure selenium: @w = Selenium::WebDriver::Wait.new(:timeout => 15)

    Capybara.run_server = false
    Capybara.default_selector = :css
    Capybara.default_wait_time = 5
    Capybara.ignore_hidden_elements = false
    Capybara.javascript_driver = :webkit  # Comment out to use :selenium
    Capybara.default_driver = Capybara.javascript_driver
    Capybara.app = Sinatra::Application.new
    Capybara.app_host = "http://crowdfundhq.dev:3001"
    Capybara.server_port = 3001
  end

  def teardown
    # For pure selenium: @b.quit
    Capybara.reset_sessions!
    Capybara.use_default_driver
  end

  def test_root
    # For pure selenium: @b.get "http://crowdfundhq.dev:3001"
    # For pure selenium: assert @b.page_source =~ /#pricing/

    # Change driver during test: Capybara.current_driver = Capybara.javascript_driver    

    visit("/")
    assert(page.body =~ /highlight/)
  end  
end
...