2012-02-02 62 views
3

當您自動化Web UI測試時,您希望組織測試,以便它們可以維護,並且儘可能地減少代碼重複。在去的路上是Page Object pattern頁面對象模式和替代方法

你在真實世界的項目中試過嗎?有沒有其他的選擇?你如何模擬複雜的網站(很少嵌套的母版頁,彈出窗口,瘋狂驗證的大型表單)?我對一般模式以及特定情況感興趣(Selenium/ASP.NET MVC/NUnit)。

回答

5

你問了很多問題,我會盡量回答其中的一些問題。我已經使用Selenium和桌面WinForms應用程序(雖然這不是嚴格的頁面對象,我用它以相同的方式 - 查看對象,也許?)的Web應用程序中使用頁面對象。我的判決是,它的效果很好,我肯定會推薦它。

這裏是一個什麼樣的測試可能看起來像一個小例子,在路上,我們寫的:

[Test] 
public void AccountPageNameIsLoggedInUsersName() 
{ 
    FirstPage() // Returns FirstPage 
     .LoginAs("tobbe", "s3cr3t") // Returns LoggedInPage 
     .ClickOnMyAccount() // Returns MyAccountPage 
     .AssertThat(p => p.Name, Is.EqualTo("tobbe")); // p is of type MyAccountPage 
} 

這裏,硒魔放在第一頁()方法和頁面中。這樣你可以隱藏測試中所有不必要的實現細節。我想你可以弄清楚這些方法是如何實現的。

將Selenium隱藏在頁面內的好處是,您可以在不更改測試的情況下將其轉換爲一個Model-View-Presenter測試,其中PageObject代表視圖(這與我在WinForms應用程序中做的相似)。

關於母版頁,我們所做的事情是,我們的裝飾與接口的頁面和創建擴展方法對這些接口:

public class LoggedInPage : Page<LoggedInPage>, IMainMenuHolder { ... } 

public static class MainMenuHolderExtensions 
{ 
    public static MyAccountPage ClickOnMyAccount(this IMainMenuHoder me) { ... } 
} 
2

我們開始使用它,因爲它很有意義。但是我們不想寫自己的通用代碼,所以我們四處尋找一些我們可以利用的庫。我們找到Geb。我們已經在使用Spock,所以Geb + Spock是非常好的搭配。