UI測試pattern Page Object 與 Page Factory


Page Object Pattern
就是將畫面上的功能抽象化為程式中的method,這樣做有甚麼好處?



將行為抽象為較高的層面,比較容易理解
舉例來說登入,我需要找出帳號/密碼的欄位,輸入帳號/密碼,按下登入的程式實作,但我們可以將實作封裝成login(account, password),不用在意更詳細的細節,用這樣的方式隱藏細節。






















舉上圖例子來說
登入頁 => LoginPage
動作
  1. 返回 => LoginPage.back()
  2. 點選登入說明 => LoginPage.explanation()
  3. 登入 => LoginPage.login(String account, String password)
  4. 點忘記帳號 ...
  5. 點忘記密碼 ...
  6. 點FB登入 ...
 
Page Factory Pattern
在跨平台的測試上可達成同樣的業務流程,不同的測試實作
在Android或iOS上測試程式的實作會有不相同的地方,但對於業務的邏輯與流程上來說是相同的,這邊就可以利用多型,注入不同的實作來達成測試場景的reuse。

以Appium來說android與iOS的不同實作在於元件的尋找方式,本來要利用多型來分開實作,但Page Factory提供了更容易更優雅的方式來解決這個問題

找原件(Element)
  1. 返回按鈕
  2. 說明按鈕
  3. 輸入帳號框
  4. 輸入密碼框
  5. 登入按鈕
  6. 忘記密碼
  7. 忘記帳號
  8. FB登入按鈕
程式範例
@iOSFindBy(id = "login_button")
@AndroidFindBy(id = "login_button")
private MobileElement loginButton;

架構圖


參考
移動UI自動化-Page Objects Pattern - cosyman - 博客園 - http://goo.gl/S9S1xw
Appium手機自動化測試模擬手勢的基本操作 | 軟體品管的專業思維 - http://goo.gl/F2VgMT
以Page Factory撰寫Selenium測試程式 - Pete's Dev Life - http://goo.gl/cttxAe
Selenium Page Factory 模式源碼分析» 社區» TesterHome - https://goo.gl/pFLDHp

Page Object
https://code.google.com/p/selenium/wiki/PageObjects
http://www.petekcchen.com/2014/04/writing-selenium-test-using-page-object-pattern.html
http://www.qa-knowhow.com/?p=2427
http://blog.csdn.net/kittyboy0001/article/details/25219053
https://kkboxsqa.wordpress.com/2014/04/28/%E8%87%AA%E5%8B%95%E5%8C%96%E6%B8%AC%E8%A9%A6%E7%9A%84-desing-pattern%EF%BC%9Apage-objects/

Page Factory
https://code.google.com/p/selenium/wiki/PageFactory
http://www.petekcchen.com/2014/04/writing-selenium-test-using-page-factory.html

Both
http://www.toptal.com/selenium/test-automation-in-selenium-using-page-object-model-and-page-factory

留言