更改firefox创建临时配置文件的默认文件夹

时间:2012-11-30 02:38:00

标签: firefox watir profile headless

我在尝试在firefox上无头地运行watir测试时遇到Errno :: ENOSPC错误。实际上这个错误的原因是我从非root用户登录它,当我运行我的测试时,它尝试在'tmp'文件夹中为临时firefox配置文件创建目录。因为它不使用'sudo',所以它给出了这个错误。

如果我在'tmp'中执行'mkdir xyz',它会给出'设备中没有空格'错误,这与上面相同。

如何更改webdriver尝试创建临时配置文件的默认配置文件夹(即'/ tmp')?我希望webdriver能够自己创建临时配置文件,但是在我可以设置的文件夹中。

我正在使用Linux,ruby 1.9.2p320,selenium-webdriver 2.26.0和watir-webdriver 0.6.1。

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

我相信你必须使用补丁selenium-webdriver,因为似乎没有内置的方法来指定包含临时配置文件的目录。

<强>背景

Seleium-webdriver(以及watir-webdriver)使用以下方法创建临时Firefox配置文件directory in \selenium-webdriver-2.26.0\lib\selenium\webdriver\firefox\profile.rb

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 library中定义了哪个。对于Dir.mktmpdir方法,第二个可选参数定义父文件夹(即创建临时配置文件的位置)。如果没有指定值,就像在这种情况下,临时文件夹是在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'.

答案 1 :(得分:2)

设置环境变量TMPDIR足以让ruby和selenium在他们想要的地方写下他们的临时文件。

来自http://ruby-doc.org/stdlib-1.9.3/libdoc/tempfile/rdoc/Tempfile.html

Dir.tmpdir‘s return value might come from environment variables (e.g. $TMPDIR).

所以,如果你在你的shell中:

export TMPDIR="/whatever/you/want/"