我有一个像这样的黄瓜步骤(它不起作用,但它是一个概念):
And (/^I navigate to this url '(.*?)'$/) do |web|
web = $ + 'web' + '_url'
@browser.goto web
end
在另一个文件paths.rb中,我有这个硬编码的网址:
$google_url = http://www.google.com
我希望能够通过以下方式选择该网址:
And I navigate to this url 'google'
目前,我还没有找到一种方法来选择变量$ google_url的“真实内容”。有什么想法吗?
答案 0 :(得分:1)
解决方案 - 使用eval(糟糕的主意)
最快和最直接的解决方案是使用eval
来执行字符串以获取变量。但是,通常建议eval
是一个坏主意。
And (/^I navigate to this url '(.*?)'$/) do |web|
url = eval('$' + web + '_url')
@browser.goto url
end
解决方案 - 创建模块并使用发送
我认为更好的想法是创建一个包含所有路径常量的模块。这样做会更好,因为(1)您可以防止使用许多全局变量污染空间,(2)使用send
比eval
更安全。
在你的paths.rb中,你可以用一个可以返回不同网址的模块替换你的全局变量:
module Paths
class << self
def google_url()
'http://www.google.com'
end
end
end
然后,您将在步骤中使用send
将字符串转换为方法:
And (/^I navigate to this url '(.*?)'$/) do |web|
url = Paths.send(web + '_url')
@browser.goto url
end