2016-12-02 31 views
0

我當時正在使用黃瓜/紅寶石/水豚/ siteprism框架並實施測試頁面。我已經達到了幾頁中每個頁面有很多單選按鈕(超過20個)的地步,並且我正在考慮在我的頁面對象模型中將所有這些映射爲靜態元素是否真的有好處?在頁面對象模型(如SitePrism)中定義單選按鈕而不是直接使用Capybara有什麼好處嗎?

即,想着它,它似乎更方便,只需要使用單選按鈕的文本在步驟定義並直接調用的水豚「選擇」的方法,像下面這樣,讓我不需要做任何事情都要爲那些20+單選按鈕,它都應該只是通過改變我們傳遞的功能參數工作:

cucumber feature: 
    When I select that "I am over 18" 

capybara step: 
    When /^I select that "(.*)"$/ |option| 
     choose(option) 

而對於像siteprism一個頁面的對象模型,我猜的實施將需要定義和獨立地維持所有那些元件類似的格式:

element :over_18_button, :radio_button, "I am over 18" 
element :over_12_button, :radio_button, "I am over 12" 
etc x50times 

而且使用它,應該創建頁面,撥打元素,這似乎並沒有直線前進給我嗎?

siteprism step: 
    When /^I select that "(.*)"$/ |option| 
    case option 
     when 'I am over 18' 
      over_18_button.click 
     when 'I am over 12' 
      over_12_button.click 

我想一個可以創建「元素」或「部分」與數組所有的按鈕,但隨後,我們將不得不把額外的邏輯來分析它們並點擊有關的一個地方呢在代碼中,雖然它將全部完成,並且不需要任何額外的代碼或通過水豚的「選擇」方法進行維護。

我是正確的假設,在使用水豚是一種更好的選擇,這個例子嗎? 或者如果最好在頁面對象模型中定義'ALL'網頁元素,那會有什麼好處呢?並且頁面目標代碼可以以不同的方式完成以利用任何可能的好處?

PS:添加頁面對象「,「的Watir」的標籤,以及我猜概念測試的結構是相似的,所以也許有人使用該架構可以很好的幫助...

回答

0

這種複雜的病例陳述是不必要的。

When /^I select that I am over "(\d\d)"$/ |age| 
    @page_object.select_age(age) 

我對site_prism不熟悉。我watir_drops寶石將讓你定義具有相同的圖案像這樣的東西:

element(:age_button) { |age| browser.radio_button(text: "I am over #{age}") 

與所述頁面對象這個方法:

def select_age(age) 
    age_button(age).set 
end 

我們還可以進入一個整體長時間的討論上使用聲明代替必要的步驟。此外,頁面對象使用的最佳實踐避免了直接調用已定義的元素。調用完成業務邏輯的方法以及這些方法將執行所有的實現,包括元素定義和對它們的操作。

+0

我明白你的意思,有一個函數,獲取參數,並通過它定義頁面對象元素的時候......但在這種情況下,究竟是採用「@ page_object.select_age(年齡)」與優勢新的實現(加上需要創建新的函數並定義元素),而不是直接使用水豚或watir方式 - 比如「選擇(年齡)」並避免所有其他位?我不明白爲什麼它會是一個好主意,但我可能會錯過頁面對象模型中的重要一點? – mickael

+0

頁面對象模式解決了幾個問題。1)從業務邏輯中抽象出實現邏輯(什麼和如何)2)保持代碼乾燥(一切都可以在一個地方更新)3)智能組織更容易維護(當頁面更改時,更新一個關聯頁面目的)。我無法與Capybara的最佳實踐交流,但Watir更像是一個圖書館(對於水豚的框架),它很適合這種抽象。 – titusfortner

相關問題