2014-02-17 96 views
1

我有一個應用程序頁面提供某種搜索,並將搜索結果項目列表返回給用戶。到應用程序 所以initally我的測試日誌,並開始在主頁這樣的搜索:Selenium PageObject模式:獲取對象列表

HomePage homePage = loginPage.login();  
homePage.searchFor(items); 

什麼是測試對搜索結果的最好熟練的方式包含了從設計方的預期列表中的項目?

  1. 我可以添加方法返回結果項到頁面對象,然後我可以做任何我想與他們在測試類。

    public void someTest(List<Items> expectedResultItems) { 
        ... 
        HomePage homePage = loginPage.login();  
        homePage.searchFor(items); 
        List<Item> resultItems = homePage.getItems(); 
        Util.compareItems(resultItems, expectedResultItems); 
    } 
    
  2. 我可以將比較方法添加到頁面對象本身。

    public void someTest(List<Items> expectedResultItems) { 
    
        ... 
        HomePage homePage = loginPage.login();  
        homePage.searchFor(items); 
        homePage.compareItems(List<Item expectedItems); 
    } 
    
+3

頁面對象不應該做任何斷言或任何形式的檢查。它應該負責**返回顯示在網頁上的結果,並且測試應該負責比較它。所以第一個更好。 – Arran

回答

0

herehere

有如何的頁面對象可以設計具有很大的靈活性, 但也有獲得所需 可維護性的一些基本規則你的測試代碼。頁面對象本身應該不會進行驗證或斷言。這是您的測試 的一部分,並且應始終位於測試代碼內,絕對不在頁面對象中。 頁面對象將包含頁面的表示形式,並通過方法提供頁面提供的服務,但沒有任何與正在測試的 相關的代碼應位於頁面對象內。

因此,根據這個指導方針去第一個。在測試中擁有斷言並且不會將其隱藏在頁面對象的某個位置,這使得測試更易於閱讀和理解它正在做什麼。

這就是說,我個人傾向於使用第二種方法,這主要是因爲我有點像這樣開始,現在我已經習慣了。所以我基本上只是在pageObject中有一個類似於public void validateSearchResults(List<?> expected) ...的公共方法,並且我對它做了一個單獨的調用。通過這個我的意思是我不寫鏈式方法如getSearchDataAndValidate(List<?> expected)這也會調用驗證方法。所以我可以單獨使用它們,如果我在另一個測試中需要它,我可以重新使用搜索方法,而無需進行實際驗證。您可能會質疑爲什麼不每次都驗證您的列表,但是如果您的測試套件變得更大,那麼它在性能方面可能會適得其反。