如何在每次重复中使用已更改的变量对一串命令进行分组和重复

时间:2011-07-21 08:40:50

标签: ruby watir repeat

我想在Watir中重复相同的过程,将(word)作为一个不同的变量,而不是在我的.rb文件中再次写出整个代码。所以没有必须写这个:


website = somewebsite.com
word = someword 
browser.goto(website)
  if browser.text.include?(word)
    puts(website)
  end
word = someotherword 
browser.goto(website)
  if browser.text.include?(word)
    puts(website)
  end
word = anotherword 
browser.goto(website)
  if browser.text.include?(word)
    puts(website)
  end

我该怎么做?

感谢。

4 个答案:

答案 0 :(得分:6)

网站是一样的吗?把它留在循环外面。

browser.goto(website)
content = browser.text
%w(some_word some_other_word another_word).each do |word|
  puts(website) if content.include?(word)
end

如果您想获得更好的性能,请完全省略循环:

words = %w(some_word some_other_word another_word)
browser.goto(website)
puts website if browser.text.match(Regexp.union(words))

答案 1 :(得分:3)

%w(some_word some_other_word another_word).each do |word|
  browser.goto(website) 
  puts(website) if browser.text.include?(word)
end

答案 2 :(得分:3)

虽然您可以对测试代码中的数据进行硬编码,但更好的想法可能是通过将更改的数据放入电子表格,CSV或XML文件等文件中来进行更多数据驱动的测试,然后在当你循环时(你可能需要一些像rubcel或xml这样的文件格式的ruby gem)

在wiki的watir examples page

中有这种事情的例子

= - = - = - = - = - = - =

我要超越你的问题要求,但是因为看起来你刚刚开始,我想引导你看看我看来是一个'正确方向'的例子

另一个选择是使用像Cucumber这样的工具作为测试框架。这允许您通过可执行规范来驱动测试,您可以使用简单语言格式指定测试应该执行的操作。更重要的是,对于这个讨论,它使得使用不同的数据多次重复相同的场景变得非常容易。用Cucumber编写的程序“特征”的“场景”看起来像这样

Scenario outline: The expected text is found on page
  Given I navigate the browser to <webpage>
  Then I should see <phrase> on the page

| webpage | phrase |
| bandershatch | vorpal sword |
| mobyDick | heart I stab at thee |
| wookie | walking carpet |

每个文本步骤(以Given和Then开头的行)映射到您在ruby / watir中编写的编码步骤,该工具将遍历表中每行数据的步骤集(三次)在这种情况下)将值从表传递到步骤。

步骤的代码最终会看起来像这样

Then /^I should see "([^\"]*)" on the page$/ do |expected_phrase|
  browser.text.should include expected_phrase
end

.should方法类似于assert,如果你使用了单元测试框架,它基本上告诉系统“寻找这个是真的”。如果.should方法失败,那么该工具会将该步骤报告为失败,从而导致该场景在该行数据上失败。

它实际上是一个非常优雅的系统,在整个组织中都有优势(不仅仅是在测试中),而且恰好是我最喜欢的推动测试的方式,特别是因为它可以很好地处理不同数据的重复步骤或场景,我们大多数人最终做了很多事情。

这个blog posting在详细介绍这个过程方面做了大量工作,从开始使用PO开始定义步骤,到创建页面对象(如果开发人员那么,抽象层使得更容易更新测试改变ID或名称等)使用ruby / Watir编码实际的黄瓜步骤。

就我个人而言,如果没有其他原因,它可以很容易地在小组中进行测试,并提供现成的结果报告。

这是great video of a session where Cucumber is explained in more depth。如果你搜索该网站的黄瓜,你会发现一堆好东西,展示如何最好地使用该工具。

答案 3 :(得分:0)

以上更好的答案,但这是我最后使用的:

Array1 = [word1, word2, word3,]

for x in array1.each do
if browser.text.include?(x)
puts(x found on website)
else puts "not found"
end
end