2012-02-10 3 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はコードの一部として独自に実行されています。

実行中のSeleniumをそのアプリケーションとして使用するには、どのようにしてラックテストを行うことができますか?

カピバラはこのコードをテストする正しい解決策でもありますか?

ありがとうございました!

答えて

1

使用する機能の1つは、ラックアプリケーションを使用する必要があります。

問題はラインとすべきではない:それはセレンドライバーと私のために正常に動作しますので

page.has_content? "google" 

。私はあなたがドライバをセットアップした方法だと思う。 google groups

彼らは私に私のテスト実行を取得するためのいくつかのポインタを与えた:私はこれらの記事を発見するまで

は、私は私のカピバラテストを実行すると、同様の問題がありました。 最終的に私はテストを構成するためにこれらの行を持っていました。 私はchromeを使用していますが、インターネットエクスプローラと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-unitcapybaracapybara-webkitselenium-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 
関連する問題