2012-11-30 5 views
1

firefox에서 헤드리스 테스트를 실행하는 동안 Errno :: ENOSPC 오류가 발생합니다. 실제로이 오류의 원인은 루트가 아닌 사용자가 기록한 것입니다. 테스트를 실행하면 'tmp'폴더에 임시 Firefox 프로필의 디렉토리를 만듭니다. 'sudo'를 사용하지 않기 때문에이 오류가 발생합니다.임시 프로필이 만들어지는 기본 폴더 변경 firefox

'tmp'에 'mkdir xyz'를 입력하면 위와 같은 '장치에 공간이 없습니다'라는 오류가 표시됩니다.

webdriver가 임시 프로필을 만들려고하는 기본 프로필 폴더 ('/ tmp')를 어떻게 변경합니까? webdriver가 임시 프로필을 단독으로 만들지 만 설정할 수있는 폴더에 넣기를 원합니다.

저는 Linux, ruby ​​1.9.2p320, selenium-webdriver 2.26.0 및 watir-webdriver 0.6.1을 사용하고 있습니다.

감사합니다.

답변

2

임시 프로필이 포함 된 디렉토리를 지정하는 방법이 내장되어 있지 않으므로 Selenium-webdriver 원숭이 패치를해야한다고 생각합니다.

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") 

배경

Seleium-webdriver (따라서 Watir과 - webdriver)의 방법을 이용해서 임시 파이어 폭스 프로필 directory in \selenium-webdriver-2.26.0\lib\selenium\webdriver\firefox\profile.rb을 작성

tmpdir library에 정의되어 있습니다. Dir.mktmpdir 메서드의 경우 두 번째 선택적 매개 변수는 부모 폴더 (즉, 임시 프로필을 만들 위치)를 정의합니다. 이 경우와 같이 값을 지정하지 않으면 Dir.tmpdir에 임시 폴더가 만들어지며 상황에 따라 'tmp'폴더가됩니다.

솔루션

임시 폴더가 생성되는 경우, 당신은 원숭이 Dir.mktmpdir에 대한 호출에 원하는 디렉토리를 지정하는 layout_on_disk 방법을 패치 할 수 있습니다 변경합니다. TMPDIR는, 루비, 셀레늄을 원하는 자신의 임시 파일을 쓰기에 충분하다

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'.