5

我很難習慣WebDriver PageObject模式。請分享您使用PageObjects模式和loadableComponents的經驗和方式。如何在PageObjects模式中使用WebDriver/Selenium 2 LoadComponents?

由於PageObject通常代表的功能的組件或部分,它發生,我起初,我應該用它做一些實際的事情負載(),看看它做什麼,它應該在isLoaded()。

然後我意識到它應該只用於「加載」對象(可能是初始化),就像在網站中移動時一樣,每個對象都有自己的url。並使用isLoaded()來測試對象是否準備好進行測試。

但是,如果你有一個複雜的JavaScript順序提交器來測試,那就是JS文件上傳器,基於2個獨立部分的JS表單,並且有三種訂單,你不會隨意移動(關於URL ),只是元素的狀態正在改變。

考慮get()方法。您使用交互式表單進入頁面。它在頁面上存在表單時加載。然後你有form1和form2對象......他們的load()和isLoaded()方法應該是什麼樣子,他們已經準備好立即採取行動,因爲他們不需要任何加載,只需測試他們的服務。

這是一個爛攤子,一個不知道是否用於檢查對象是否加載,還是加載對象isLoaded()方法,是正確安裝。但我想前一種方法是正確的,在測試中應確保設置的有效性。

場景:

Testing first part of html form - test that field client side validation works 
Testing the second one that depends on the first one 
Testing the following file uploader - upload, canceling, clearing, order, fileIDs 
Testing the overall html form submission - ServerSide validation errors, results 

文檔說:

  • LoadableComponent
  • PageObjects

    1. 公共方法代表日該頁面提供

      驗證,上傳,上傳多張,取消E服務,明確

    2. 儘量不要暴露是發生在我的唯一的事情是具有頁面

      的內部將驅動程序實例隱藏到UnitTests中並使用僅PageComponent來保留PageObjects中的所有字段名稱,css類名稱+爲PageObjects提供輸入數據並聲明服務/功能的布爾結果

    3. 種方法返回其他PageObjects

      這是習慣的最困難的事情。對於一個交互式表單有4個頁面對象有點不自然。他們建議Form1上,窗體2(Form1的),上傳(窗體2),提交(上傳),但我發現到前面的物體非常混亂的引用鏈接和移交。在測試方法調用get()上所有的人似乎更好。但我想,這背後的想法是不爲驅動程序實例暴露在測試,但只使用正在使用的驅動程序實例PageObjects內部

    4. 爲同樣的動作不同的結果建模爲不同的方法 我猜想這意味着它不應該決定關於Page對象側的行動的有效性,但在測試邊

回答

0

寫頁面對象時,我有一點不同的方法。翻譯成您的條款load()方法以有條件的等待結束,確保頁面包含您想要的內容。然後我不需要任何isLoaded() - 要麼我在那裏,要麼拋出Exception。

頁面中的組件是包含它們的頁面的屬性,我設置了組件和頁面之間的雙向關係。它們不是全功能的頁面對象。也許你的表單也可以用這種方式建模。

0

可加載組件是頁面對象模式的擴展。 WebDriver庫中的LoadableComponent類將幫助測試用例開發人員確保成功加載頁面或頁面組件。它極大地減少了調試測試用例的努力。的頁面對象應該擴展此可加載組件抽象類和作爲結果,它被綁定到用於下面兩種方法提供實現:

保護抽象無效負載()

保護抽象無效isLoaded() throws java.lang.Error

必須在load()和isLoaded()方法中加載的頁面或組件確定頁面是否已完全加載。如果未完全加載,則會引發錯誤。

https://code.google.com/p/selenium/wiki/LoadableComponent

+0

你知道isLoaded會先被調用嗎?這樣可以避免重複加載頁面,如果我們已經在頁面上。 – CodyK 2015-05-26 15:33:38

相關問題