2012-09-18 54 views
2

自從一年以來我使用了黃瓜,並且我在幾個星期之後向它添加了page-object-gem。 當我執行測試,我得到消息:如何避免頁面對象棄用於複選框

棄用警告
要調用在commentPage.rb一個名爲複選框方法:23:在delete_comment'塊」。
此方法在頁面對象中不存在,因此它正被傳遞給驅動程序。
此功能將在不久的將來被刪除。
請更改您的代碼以調用正確的頁面對象方法。

(我已經得到了其他案件一樣,但這種「小事」的例子應該是更容易解釋)

我搜索的方式來避免這種情況,但它看起來很複雜。

對於測試,我正在檢查一個有表格的頁面。每行顯示一行,我需要檢查特定行的複選框。

我在pageObject代碼:

table(:comment_list, :class => 'comments') 
button(:delete, :text => "Delete") 

def delete_comment (text) 
    self.comment_list_element.each do |row| 
    if row.text.include? "#{text}" 
     row.checkbox.set 
     self.delete 
     return true 
    end 
    end 
    false 
end 

難道我需要我的表的預處理在測試過程中使用它?

+0

哪條線是#23? –

+0

row.checkbox.set(唯一帶有「複選框」的行; – Fabrice31

回答

5

你得到,因爲你的警告正在調用Watir中的方法,而不是頁面對象(表格行上的checkbox方法)。如果你想訪問複選框,你可以簡單地調用返回嵌套元素的方法。這會將呼叫的那部分更改爲row.checkbox_element。但你接下來的電話也會得到同樣的問題。首先在CheckBox上不存在set方法。在頁面對象中,方法是checkuncheck。完整的電話應該是:

row.checkbox_element.check

你所得到的折舊錯誤的原因是因爲我計劃要刪除的呼叫轉發到在未來的底層驅動。這種能力在複雜情況下確實會造成很多問題。

+0

啊。我試過'checkbox_element',但忘了它是'check'而不是'set'。我認爲這應該是加入的答案。 –

+0

對我來說,這似乎也是一種好方法。 – Fabrice31

+0

如何在不使用棄用方法的情況下取消選中複選框? –

1

在您的代碼中,rowPageObject::Elements::TableRow,它沒有定義checkbox方法。我還沒有遇到任何鏈接頁面對象元素的例子。

作爲一種變通方法,你可以做轉換PageObject::Elements::TableRow到正規Watir::TableRow

row.element 

所以您的代碼將工作,如果你這樣做:

row.element.checkbox.set 
+0

它的工作原理:)它非常簡單:) – Fabrice31