在Watir中查找具有特定类的div列表

时间:2011-09-29 14:07:22

标签: watir

我们在页面上有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

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

希望有所帮助!