由于项目要求,我不得不从Selenium 2.0迁移到Watir和Cucumber框架。之前我们使用Java并经常将默认文件路径设置为:
System.setProperty("webdriver.chrome.driver",System.getProperty("user.dir")+"/browsers/chromedriver.exe");
现在我也尝试在Ruby中设置类似的东西,但是对Ruby来说是新手,我无法获得项目的根目录。它仅使用__FILE__
或Dir.pwd
获取当前用户正在使用的文件的路径。
我的Watir项目结构如下:
root
-config
-features
-pages
-step_definitions
-support
-hooks.rb
-browsers
...
...
我想在hooks.rb中指定如果传递的参数是“Chrome”,则运行Chrome浏览器,当它是“FF”时运行Firefox浏览器,但它总是给我当前的工作目录路径和我需要根目录。
我在WINDOWS 7上,使用Ruby版本1.9.3p551。
答案 0 :(得分:1)
Ruby的File类有几种不同的方法可用于您尝试执行的操作,因此请阅读absolute_path
,expand_path
,{的文档。 {1}}和realdirpath
。
我建议从absolute_path
开始:
将路径名转换为绝对路径名。除非给出dir_string,否则从进程的当前工作目录引用相对路径,在这种情况下,它将用作起始点。如果给定的路径名以“〜”开头,则不会展开,它将被视为普通目录名。
我构建了从hooks.rb到我桌面上test目录中根目录的路径,并将此代码添加到hooks.rb:
realpath
运行它显示:
PATH_TO_ROOT = File.absolute_path('../..', File.dirname(__FILE__))
你总是要保持' ../.. 39;相对字符串,但这比使用固定绝对路径硬编码代码更容易。
我倾向于在任何具有多个目录的项目中放置与此类似的代码,尤其是在我调用库文件时。正确编写代码,并且可以在将值赋值给常量后执行此操作,然后可以在需要知道安装的绝对路径的任何位置引用该常量。
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"
是您相对路径的锚点。只需定义所需文件的相对路径,让Ruby完成剩下的工作。
答案 1 :(得分:0)
“Relative path to your project directory”谈论Ruby中的相对路径。
您的问题的答案将特定于您尝试在hooks.rb中使用的代码。如果你可以从hooks.rb发布一个你正在使用的代码示例,那就太好了。但是你的问题的答案可能是以下几种组合:
File.join(File.dirname(__FILE__), '../../')
第一个参数是当前目录(root \ features \ support),第二个参数是根目录的相对路径('../../').