2012-02-10 10 views
2

Вот моя проблема:Как я могу проверить применение селена с каппибарой?

Я пишу приложение, которое использует селен 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 работает самостоятельно как часть кода ...

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

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

Благодарим за помощь!

ответ

1

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

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

page.has_content? "google" 

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

У меня была аналогичная проблема с работы мои водосвинку тесты, пока я не обнаружил эти сообщения: google groups

Они дали мне несколько советов, чтобы получить мой тестовый ход. В конце концов, мне пришлось настроить эти строки для моих тестов. Я использую хром, но 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

Вот что я сделал с моим приложением 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