Selenium を使用してテストを実行すると、Firefox プロファイルが見つからないというメッセージがブラウザーに繰り返し表示されます。セレンで使用するための Firefox プロファイルを準備しましたが、そのプロファイルがどこにあるかをセレンに伝える方法がわかりません。
どのFirefoxプロファイルを使用するかをSeleniumに伝えるにはどうすればよいですか?
Selenium を使用してテストを実行すると、Firefox プロファイルが見つからないというメッセージがブラウザーに繰り返し表示されます。セレンで使用するための Firefox プロファイルを準備しましたが、そのプロファイルがどこにあるかをセレンに伝える方法がわかりません。
どのFirefoxプロファイルを使用するかをSeleniumに伝えるにはどうすればよいですか?
この同じエラーが発生していました。save_and_open_page
私にとっては、問題を引き起こしているのはテスト内での呼び出しであることが判明しました。それらを削除すると、Firefox プロファイル エラーが停止しました。
カピバラ/セレン専用の特別な Firefox プロファイルは (まだ) 必要ありませんが、質問にもっと徹底的に答えるために、この問題を解決しようとして、Firefox のプロファイルを指定する次の 2 つの方法に出会いました。
注:これらのどちらも実際にはプロファイル エラーに関する問題を解決しませんでしたが、あなたが尋ねたので、とにかくここに含めます。
方法 1: (プロジェクトの各開発者が Firefox で特別なプロファイルをセットアップする必要があります。)
以下を test_helper.rb に追加します
Capybara.register_driver :my_firefox_driver do |app|
Capybara::Selenium::Driver.new(app, :browser => :firefox, :profile => 'name_of_existing_profile')
end
方法 2: (プロジェクトの各開発者が Firefox で特別なプロファイルをセットアップする必要はありません。)
以下をテストの helper.rb に追加します。
require 'selenium-webdriver'
...
Capybara.register_driver :my_firefox_driver do |app|
profile = Selenium::WebDriver::Firefox::Profile.new
Capybara::Selenium::Driver.new(app, :browser => :firefox, :profile => profile)
end
次に、選択した上記の方法に関係なく、デフォルトのドライバーを新しいドライバーに設定するか、 Capybara.current_driver = :my_firefox_driver
テストの最初に配置して新しいドライバーを選択的に使用し、test_helper.rb にティアダウン タスクが含まれているCapybara.use_default_driver
ことを確認します。セットアップの指示に従いました。
Ruby でこれを行うには多くの調査が必要でしたが、うまくいきました。
まず、-p フラグを指定して Firefox を起動し、プロファイルを選択します。新しいプロファイルを作成し、プロジェクト内の場所に保存します。私の場合、「firefox_profile」ディレクトリにあります。その後、Selenium にこのプロファイルの場所に関するヒントを与える必要があります。そのためには、layout_on_disk
メソッドにモンキー パッチを適用できます。
module Selenium
module WebDriver
module Firefox
class Profile
def layout_on_disk
firefox_profile = File.expand_path(File.join(File.dirname(__FILE__),'firefox_profile'))
profile_dir = create_tmp_copy(firefox_profile)
FileReaper << profile_dir
install_extensions(profile_dir)
delete_lock_files(profile_dir)
delete_extensions_cache(profile_dir)
update_user_prefs_in(profile_dir)
puts "Using temporary Firefox profile in: #{profile_dir} from #{firefox_profile}"
profile_dir
end
end
end
end
end
私もこの問題にぶつかり、Firefox プロファイルとは無関係であることが判明しました。私の場合、それは、PhantomJS に使用していた Ghostdriver のバージョンと FirefoxDriver に使用していた Selenium のバージョンの間のクラスパスの非互換性でした (両方を許可するようにコードをセットアップしようとしていました)。Ghostdriver の依存関係を削除し、PhantomJS コードをコメントアウトすると、このプロファイル エラーがなくなりました。実際、表示されたエラー メッセージをもっと詳しく読んでいれば、プロファイル エラーの根本的な原因は、クラスの非互換性によるメソッドの欠落であることがわかったでしょう。具体的なエラーは次のようなものでした:
NoSuchMethodError: org.openqa.selenium.os.CommandLine.waitFor(J)V
Firefox の更新後にこのエラーが発生しました。
Firefox を手動で開いて更新を適用できるようにすると、その後テストが機能しました。