1

Firefoxでwatirテストをヘッドレスで実行しようとすると、Errno::ENOSPCエラーが発生します。実際、このエラーの原因は、root以外のユーザーからログに記録されており、テストを実行すると、「tmp」フォルダーに一時的なFirefoxプロファイルのディレクトリを作成しようとすることです。'sudo'を使用していないため、このエラーが発生しています。

「tmp」で「mkdirxyz」を実行すると、「デバイスにスペースがありません」というエラーが発生します。これは上記と同じです。

webdriverが一時プロファイルを作成しようとしているデフォルトのプロファイルフォルダ(「/ tmp」)を変更するにはどうすればよいですか?Webdriverで一時プロファイルを自分で作成したいのですが、設定できるフォルダーに作成します。

Linux、ruby 1.9.2p320、selenium-webdriver 2.26.0、およびwatir-webdriver0.6.1を使用しています。

あなたの助けに感謝!

4

2 に答える 2

3

一時プロファイルを含むディレクトリを指定する方法が組み込まれていないように見えるため、selenium-webdriver にモンキー パッチを適用する必要があると思います。

バックグラウンド

Seleium-webdriver (したがって、watir-webdriver) は、次directory in \selenium-webdriver-2.26.0\lib\selenium\webdriver\firefox\profile.rbのメソッドを使用して一時的な Firefox プロファイルを作成します。

def layout_on_disk
    profile_dir = @model ? create_tmp_copy(@model) : Dir.mktmpdir("webdriver-profile")
    FileReaper << profile_dir

    install_extensions(profile_dir)
    delete_lock_files(profile_dir)
    delete_extensions_cache(profile_dir)
    update_user_prefs_in(profile_dir)

    profile_dir
end

一時フォルダーは、次によって作成されます。

Dir.mktmpdir("webdriver-profile")

これはtmpdir ライブラリで定義されています。メソッドのDir.mktmpdir場合、2 番目のオプション パラメータは、親フォルダ (つまり、一時プロファイルを作成する場所) を定義します。この場合のように、値が指定されていない場合、一時フォルダが に作成されます。この場合、これDir.tmpdirは「tmp」フォルダです。

解決

一時フォルダーが作成される場所を変更するには、layout_on_diskメソッドにモンキー パッチを適用して、 の呼び出しで目的のディレクトリを指定しますDir.mktmpdir。次のようになります。

require 'watir-webdriver'

module Selenium
module WebDriver
module Firefox
class Profile
    def layout_on_disk

        #In the below line, replace 'your/desired/path' with
        #  the location of where you want the temporary profiles
        profile_dir = @model ?
            create_tmp_copy(@model) : 
            Dir.mktmpdir("webdriver-profile", 'your/desired/path')

        FileReaper << profile_dir

        install_extensions(profile_dir)
        delete_lock_files(profile_dir)
        delete_extensions_cache(profile_dir)
        update_user_prefs_in(profile_dir)

        profile_dir
    end
end
end
end
end

browser = Watir::Browser.new :ff
#=> The temporary directory will be created in 'your/desired/path'.
于 2012-11-30T17:59:20.923 に答える