我想在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
我该怎么做?
感谢。
答案 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