我想知道,考虑到这些全局变量的存在以及其他函数可以访问这些全局变量,是否有可能告诉函数使用一个或另一个变量,而不需要重写大量代码。我必须使用全局变量,因为我在calabash传递变量方面有局限性(如果我错了,请纠正我)。我希望能够调用一个函数来获取信息,并将其填充到几个全局变量中的一个。希望是这样的:
def add_five(my_var)
if my_var == "my_cats"
use $my_cats for my_var_nickname
elsif my_var == "my_dogs"
use $my_dogs for my_var_nickname
elsif my_var == "my_birds"
use $my_birds for my_var_nickname
end
my_var_nickname = my_var_nickname + 5
end
$my_cats = 2
$my_dogs = 3
$my_birds = 3
add_five("my_cats")
$my_cats = 7
$my_dogs = 3
$my_birds = 3
谢谢你的帮助!
我认为使用全局变量有臭味…
无论如何,你可以尝试使用散列:
$animal_counts = {}
def add_five(animal_type)
$animal_counts[animal_type] += 5
end
$animal_counts[:cats] = 2
$animal_counts[:dogs] = 3
$animal_counts[:birds] = 3
add_five(:cats)
$animal_counts[:cats] # => 7
$animal_counts[:dogs] # => 3
$animal_counts[:birds] # => 3
希望能有所帮助!
def record_as(stuff)
variable_to_use = if stuff == "foo"
$variableA
elsif stuff == "bar"
$variableB
end
#do stuff with variable_to_use
end
简单使用在您的ruby步骤文件中,定义一个类似的变量
$global_memory=""
在您的葫芦步骤中,可以放在另一个ruby步骤文件中。从查询中读取一些文本,并在运行时将其存储在该变量上。
Then I should memorize delivery time
在ruby步骤文件中定义的,比如这个
Then /^I should memorize delivery time$/ do
srctext=query("label marked:'lblOrderTime'",:text).first
srctext=srctext.to_s
$global_memory.replace(srctext)
end
稍后在场景中,您可以调用该值并像这样使用
Then I should see order dispatch time same as in checkout screen and receipt screen
在ruby步骤文件中定义的,比如这个
Then /^I should see order dispatch time same as in checkout screen and receipt screen$/ do |arg|
datetext=$global_memory
result = query("webView css:'SPAN' index:5").first["textContent"].include? "#{datetext}"
unless result
textFound = query("webView css:'TABLE' index:0").first["textContent"]
screenshot_and_raise "time #{datetext} not found instead #{textFound} is found"
end
end
此外,您可以使用Hash(键值对)同时存储多个变量并检索它们。