2015-09-01 43 views
0

我正在編寫代碼來測試java中的網頁,並且在我自己的抽象網絡中遇到了一些問題。我使用Selenium,但這不是真正的問題。我有一組頁面對象和一組junit測試類。但由於網頁有很多類似的表單元素,我不想重複每次測試。所以我創建了junit測試實例化的testfragments。 junit測試基本上只是調用片段類的方法。 現在,這是我的問題:我需要將頁面對象傳遞給片段類,以便他們可以在網頁上執行操作。但是由於每個片段都必須傳遞大量不同的頁面對象,而且方法不同,所以我很難抽象化。在java中創建supermetaclass時傳遞類

我做了什麼使這項工作看起來像我非常糟糕的代碼。我創建了一個由所有頁面對象繼承的類,其中包含任何頁面對象類中可能發生的所有可能的方法。

有沒有更好的方法?有沒有設計模式我還沒有學習?

+0

這個問題本身並不十分清楚,你能否提供一個你正在做什麼的基本例子? –

回答

0

確實有更好的方法。你可能想在看向封裝組成

你可以把行爲在自己的類,並創建了不同的頁面類別行爲的複合材料。

例如考慮PageA和PageB。他們都有一些共同的形式元素,但也有一些差異。例如,他們共享一個UserForm。

class PageA 
{ 
    Field username 
    Field password 
    //other fields specific to A 
} 

class PageB 
{ 
    Field username 
    Field password 
    //fields that are the userform 
    //otherfields specific to B 
} 

您看到A和B都共享一些特定的表單字段。

你可以但子類中的「字段是用戶表單」,並且使PageAPageB包含UserForm

class PageA 
{ 
    UserFormFields userformfields 
    //other fields specific to A 
} 

class PageB 
{ 
    UserFormFields userformfields 
    //otherfields specific to B 
} 

您的測試可以用一組代碼測試UserFormFields,因爲網頁A和網頁B都具有相同的UserFormFields。這樣你就不必重寫這段代碼。 UserFormFields的邏輯可以在它自己的類中。

+0

謝謝,你把我放在正確的軌道上。我可以把你所說的userFormFields放到Interfaces中,而不是將頁面對象作爲類類型傳遞,我把它作爲一個接口傳遞。 –

+0

現在,我必須多次將同一個網頁傳遞給我的fragmentClasses,每個字段組合一次,但整個過程仍然更清晰 –