如何获得我的WATIR项目的根目录?

时间:2014-12-30 19:40:02

标签: java ruby selenium watir

由于项目要求,我不得不从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。

2 个答案:

答案 0 :(得分:1)

Ruby的File类有几种不同的方法可用于您尝试执行的操作,因此请阅读absolute_pathexpand_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),第二个参数是根目录的相对路径('../../').