2017-09-12 52 views
1

想象一下,有一個頁面說http://google.com/AddUser,在這裏輸入記錄的詳細信息並單擊保存。一旦你這樣做的頁面重定向到Selenium Java - 頁面對象模型查詢

http://google.com/userList

在這裏你可以看到用戶,包括您剛纔輸入的新記錄列表。

如果我們通過頁面的對象模型去的方法輸入詳細信息,並保存記錄應該存在於AddUser.java和方法來驗證,如果記錄實際上保存並顯示應在UserList.java

如果我們考慮ADDUSER和用戶列表是這兩個類將是類似下面相應的對象:

addUser.enterDetailsSaveRecord(); 

userList.validateSavedRecord(); 

所以在我的測試情況下,我需要調用2種獨立的方法,一個動作等進行驗證。

AddUser.javaUserList.java都有BasePage.java作爲超類。 有沒有辦法將他們都歸入單一方法,還是存在我正在以錯誤的方式進行的事情,並且有更好的方法嗎?

謝謝

+0

目前的方法有什麼問題。你描述的是你的實現,我發現沒有錯。 –

回答

1

使用PageFactory您有2個PageObjects爲AddUser.javaUserList.java。因此,假如你正在傳遞適當的參數,而調用方法,您以下工作:

addUser.enterDetailsSaveRecord(); 
userList.validateSavedRecord(); 

但是從最佳實踐一句話,Assertions should be done in a seperate utility/package/class這與@JeffC評論類似的一行:

Best practice is to keep the validation code out of the page objects

因此,你應該創建一個單獨的應用程序的通用/包/類,這將處理所有的Assertions。您也可以從PageObject課中調用class,其中包含Assertions

所以你的整個測試環境將包含3 Packages。一個包含main()/@Test類的包,一個包含例如PageObjects的包, AddUser.java和一個Utility封裝,包含Assertions例如validateSavedRecord()

0

您的方法是正確的。這些方法應該屬於不同的頁面。 請更新方法:

public UserList enterDetailsSaveRecord() { 
// your code to save the details 
return new UserList(); 
} 

因此,你可以使用它作爲:

addUser.enterDetailsSaveRecord().validateSavedRecord() 
+0

在用戶列表頁面上,您無法驗證保存的記錄。您上面列出的代碼沒有清楚地表明。 – JeffC

+0

只要您輸入詳情並點擊保存,網站就會自動將您重定向到新頁面。上面的代碼只是顯示了在測試腳本中不是創建一個新對象,我們可以在方法本身(Factory方法)中創建一個新對象,並且可以在同一行中用作鏈接 –

+0

是的,但這會變成一團糟,因爲如果你瘋了這個,你可以使用'page1.dosomeThingOnPage2()。dosomeThingOnPage3()。dosomeThingOnPage4()。dosomeThingOnPage5();'你最終得到一個在整個站點上瀏覽的內存。這使得很難跟蹤正在發生的事情。 – JeffC

1

我看不出有什麼毛病你的做法要麼,雖然,我的做法通常是邏輯上分離的功能互動與測試功能的應用程序。所以,我仍然有

addUser.enterDetailsSaveRecord(); 

但用戶列表我會用

UserItem foundUser = userList.findUser(targetUser); 

其中UserItem是在用戶表中的一行。然後我的測試將驗證找到的用戶是否正確。儘管這最後會有更多的代碼行,但它會導致對象模型乾淨利落地模擬被測試對象,並在測試本身中找到測試代碼。

+0

這也是我創建頁面對象的方式。最佳做法是將驗證代碼保留在頁面對象之外。解決這個問題的方法是讓頁面對象返回所需的數據,並讓腳本本身在'Assert'中進行驗證。 – JeffC

相關問題