2011-09-29 31 views
1

我們在頁面上使用相同類名的n個divs。在Watir找到一個特定類別的div列表

<div class="errors"> 
</div> 
<div class="errors"> 
      Foo is invalid 
</div> 

我們想要做的是檢查並查看是否有任何帶有「錯誤」類的div有消息「Foo無效」。

我們可以這樣做 @ browser.div(:類=>「錯誤」,:指數=> 2)

但是,在該消息是在所述第一或正不覆蓋的情況下第div。

如果我們可以將所有匹配的div作爲一個數組取回,然後進行我們的斷言,那麼最好的做法是什麼。

或者也許回來匹配的div的數量,以便我們可以遍歷它們。

我們對1.9.2的Watir

回答

4

如果升級到2.0的Watir或者如果您使用的Watir-webdriver的寶石,這將返回有errors類和文本的所有div(恰好)Foo is invalid(如果那是什麼你想要做的):

browser.divs(:class => "errors", :text => "Foo is invalid") 
1

很容易陷入複雜的解決方案。首先從一般的(甚至是低效的)步驟開始,然後在基本解決方案工作後簡化代碼。這將在1.9.2的Watir工作:

@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 。包括?如果在失敗的div元素中有其他文本。你也可以使用收集!方法與數組保存更多的空間。與往常一樣,不是收集整個div元素,只能收集某些屬性:

@divs_with_error << [div.text, div.index] 
@divs_with_error << div.class 

希望有所幫助!

+0

或者你也可以用.collect –

+0

我提到過,我只是沒有提供這個例子:D。 –

+0

對不起,只是看到:) –

相關問題