我们在页面上有n个具有相同类名的div。
<div class="errors">
</div>
<div class="errors">
Foo is invalid
</div>
我们要做的是检查并查看其中任何带有“错误”类的div是否有消息“Foo无效”。
我们可以做到这一点 @ browser.div(:class =&gt;'errors',:index =&gt; 2)
但这并不包括消息在第一个或第n个div中的情况。
如果我们可以将所有匹配的div作为数组返回,将其展平,然后执行我们的断言,那将是多么美妙。
或许可以找回匹配的div的数量,以便我们可以迭代它们。
我们正在使用Watir 1.9.2
答案 0 :(得分:5)
如果您升级到Watir 2.0或者如果您使用watir-webdriver gem,这将返回所有具有类errors
和文本(完全)Foo is invalid
的div(如果这是您要执行的操作) ):
browser.divs(:class => "errors", :text => "Foo is invalid")
答案 1 :(得分:1)
很容易陷入复杂的解决方案。首先从一般(甚至低效)步骤开始,然后在基本解决方案工作后简化代码。这将适用于Watir 1.9.2:
@divs_with_error = [] #create a new array for the divs with class == "error"
@divs_invalid = [] #create a new array for the divs with text == "Foo is invalid"
browser.divs.each do |div| #for each div on the page
if div.class == "error" #if the class == "error"
@divs_with_error << div #add it to our array
end
end
@divs_with_error.each do |div| #for each div in the @divs_with_error array
if div.text == "Foo is invalid" #if the text == "Foo is invalid"
@divs_invalid << div #add it to our next array
end
end
如果这会收集您要查找的数据,您可以将其简化为一个块:
@divs_with_error = [] #create a new array
browser.divs.each do |div|
if ((div.text == "Foo is invalid") && (div.class == "error"))
@divs_with_error << div
end
end
您可能需要使用div.text.include?如果失败的div元素中有其他文本。你也可以使用收藏!使用数组的方法可以节省更多空间。与往常一样,您只需收集某些属性,而不是收集整个div元素:
@divs_with_error << [div.text, div.index]
@divs_with_error << div.class
希望有所帮助!