2014-12-30 3 views
0

프로젝트 요구 사항으로 인해 Selenium 2.0에서 Watir 및 Cucumber 프레임 워크로 이동해야했습니다. 앞서 우리가 자바를 사용하고 자주 기본 파일 경로 설정 : 이제내 WATIR 프로젝트의 루트를 얻는 방법?

System.setProperty("webdriver.chrome.driver",System.getProperty("user.dir")+"/browsers/chromedriver.exe"); 

나는 또한 루비에서 비슷한 설정하려고하지만 루비에 새로운되는 오전, 나는의 루트 디렉토리를 얻기 위해 실패 해요 프로젝트. 현재 사용자가 작업중인 파일의 경로 만 __FILE__ 또는 Dir.pwd을 사용하여 가져옵니다.

내 Watir과 프로젝트 구조는 다음과 같다 :

root 
-config 
-features 
    -pages 
    -step_definitions 
    -support 
     -hooks.rb 
-browsers 
... 
... 

나는 그것이 "FF"인 경우 전달 된 매개 변수는 "크롬"인 경우, 다음 크롬 브라우저를 실행하는 것이 hooks.rb에 지정하려면, 그리고 Firefox 브라우저를 실행 시키지만 항상 현재 작업 디렉토리 경로를 제공하고 루트 디렉토리가 필요합니다.

저는 윈도우 7에 Ruby 버전 1.9.3p551을 사용하고 있습니다.

답변

1

루비의 File 클래스는 당신이 뭘하려는 건지에 대한 유용한 여러 가지 방법이 있으므로 absolute_path, expand_path, realdirpathrealpath에 대한 설명서를 읽어 보시기 바랍니다.

나는 absolute_path로 시작하는 것을 권 해드립니다 :

는 절대 경로로 경로를 변환합니다. 상대 경로는 dir_string을 지정하지 않으면 프로세스의 현재 작업 디렉토리에서 참조되며,이 경우 시작 경로로 사용됩니다. 주어진 경로명이 "~"로 시작하면 확장되지 않고 일반 디렉토리 이름으로 취급됩니다.

는 내 바탕 화면에서 내 테스트 디렉토리의 루트 디렉토리로 hooks.rb에서 경로를 구축하고, hooks.rb이 코드를 추가 : 그것은 보여줍니다 실행

PATH_TO_ROOT = File.absolute_path('../..', File.dirname(__FILE__)) 

을 :

PATH_TO_ROOT # => "/Users/ttm/Desktop/tests/ruby/root" 

항상 '../ ..'상대 문자열을 유지해야하지만 코드를 고정 된 절대 경로로 하드 와이어하는 것보다 쉽습니다.

특히 라이브러리 파일을 호출 할 때 여러 디렉토리가있는 프로젝트에서 이와 비슷한 코드를 사용하는 경향이 있습니다. 코드를 올바르게 작성하고 값을 상수에 할당하면이를 수행 할 수 있습니다. 그런 다음 설치의 절대 경로를 알아야 할 필요가있을 때마다 상수를 참조 할 수 있습니다.


book = Roo::Excel.new(File.join(File.absolute_path('../..', File.dirname(__FILE__)),"config/data/test.xls")) 

그것은 그보다 훨씬 쉽게 :

path_to_book = File.absolute_path('../../config/data/test.xls', File.dirname(__FILE__)) 
path_to_book # => "/Users/ttm/Desktop/tests/ruby/root/config/data/test.xls" 

File.dirname(__FILE__)이 상대 경로의 앵커입니다. 원하는 파일의 상대 경로를 정의하고 나머지는 Ruby가 처리하게하십시오.

+0

'book = Roo :: Excel.new (File.absolute_path ('../ ..', File.dirname (__ FILE __)), 'config/data/test.xls'))'마지막으로 나를 위해 일했다. 감사합니다. – paul

+0

닫기지만 간단하지는 않습니다. 답안에 추가 된 내용을보십시오. –

0

"Relative path to your project directory"은 Ruby의 상대 경로 지정에 대해 이야기합니다.

귀하의 질문에 대한 답변은 귀하가 hooks.rb에서 사용하려고 시도하는 코드에만 적용됩니다. hooks.rb에서 사용하고있는 코드의 샘플을 게시 할 수 있다면 좋을 것입니다. (지원 \ 루트 \는 기능) 첫 번째 매개 변수는 현재 디렉토리입니다

File.join(File.dirname(__FILE__), '../../') 

두 번째 매개 변수는 상대 경로가 될 것입니다 :하지만 당신의 질문에 대한 대답은 가능성이 몇 가지 다음의 조합이 될 것입니다 루트 디렉토리 ('../../')에 추가하십시오.

관련 문제