0

我是 Ruby 和 Cucumber 自动化的新手,目前我正在尝试自动化一个基本游戏。

该游戏有大约 200 种产品,我正在运行一项测试,逐一检查这些产品是否已启用。

  prod1 = check_product '#product1.product'
  prod1.click unless prod1.nil?
  prod2 = check_product '#product2.product'
  prod2.click unless prod2.nil?
  prod3 = check_product '#product3.product'
  prod3.click unless prod3.nil?

我的问题是我不想列出代表产品的 200 行代码。我觉得我应该只能用一行代码用“x”替换产品编号,并告诉它用 1..200 替换 x。

就像是 :-

x = 1..200
      prod[x] = check_product '#product[x].product'
      prod[x].click unless prod[x].nil?

我知道这是非常错误的,但我希望它能证明我的意思。

有什么好方法可以完成我的要求吗?

为可能非常基本的问题和糟糕的代码道歉。我现在真的只是在学习绳索:-)

=====

更新下面的解决方案很有效。我的代码现在显示为:-

def product_skips_check
  n = 9
  products = []
  (0..n).each do |i|
  products[i] = check_product "#product#{i}.product"
  products[i].click unless products[i].nil?
  end
end

非常感谢所有回复:-)

4

1 回答 1

1

如果 check_product 方法接受字符串,则可以使用插值。在双引号字符串中,里面的所有内容都#{}被解释为普通的 ruby​​ 代码并执行,并且使用它的 to_s 方法将结果转换为字符串。

n = 300
products = []
(0..n).each do |i|
  products[i] = check_product "#product#{i+1}.product"
  products[i].click unless prod[i].nil?
end

一定要使用双引号,插值在单引号字符串中不起作用。

编辑:更改代码以使其更有意义

于 2013-10-10T18:35:29.310 回答