2012-02-10 93 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自己作爲代碼的一部分運行...

我怎麼能告訴rack-test使用運行的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

以下是我對運行MongoDB的Sinatra應用程序所做的工作。註釋掉硒代碼來嘗試沒有水豚的純硒。安裝test-unitcapybara,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