2

これが私の問題です:

私は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

通常、カピバラは Selenium を実行してサイトを閲覧し、すべてが適切に見えることを確認するため、テストが混乱していることは理解できます。しかし、ここでは Selenium がコードの一部として単独で実行されています...

実行中の Selenium をアプリケーションとして使用するように rack-test に指示するにはどうすればよいですか?

Capybara は、このコードをテストするための適切なソリューションでもありますか?

ご協力いただきありがとうございます!

4

2 に答える 2

1

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

問題は次の行にあってはなりません:

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'
于 2012-08-01T11:28:02.283 に答える