自動化測試 - Page Object Pattern 的使用與範例

自動化測試 - Page Object Pattern 的使用與範例
Photo by Hans-Peter Gauster / Unsplash

Page Object 是一個撰寫 UI 自動化測試,經常使用的一種設計模式 (Design Pattern),透過將網頁元素抽象化成元件的實作方式,讓你可以更有效的管理和組織你的測試程式碼,讓我們看看下面這個例子。

元件介紹

  • Login Test 和 Search Test 表示針對 Login 和 Search 頁面的測試,在登入相關的測試案例之中,我們需要執行登入的相關動作。
  • LoginPage / HomePage / Search Page 都表示各頁面的動作,以登入頁面為例,在登入頁面上,可以按下登入按鈕或是回到首頁按鈕。

程式碼實作

class LoginPage:
  def init(self, page):
    self.page = page
    
  def login(self):
    self.page.fill("#username", "user")
    self.page.fill("#password", "pass")
    self.page.click("#login")

  def clickHomeButton(self):
    self.page.click("#home")

LoginPage.py

class HomePage:
    def __init__(self, page):
        self.page = page

    def clickSignIn(self):
        self.page.click("#signIn")

    def search(self, query):
        self.page.fill("#search", query)
        self.page.click("#searchButton")

HomePage.py

class SearchPage:
    def __init__(self, page):
        self.page = page

    def getSearchName(self):
        return self.page.text_content("#searchResult")

SearchPage.py

def test_verify_login(page):
    login_page = LoginPage(page)
    home_page = HomePage(page)
    search_page = SearchPage(page)

    login_page.login()
    login_page.clickHomeButton()
    # 驗證登入後的操作

LoginTest.py

def test_verify_search(page):
    home_page = HomePage(page)
    search_page = SearchPage(page)

    home_page.clickSignIn()
    home_page.search("test")
    # 驗證搜尋結果

SearchTest.py

結論

這樣的設計模式能夠讓您的測試程式碼更加乾淨、有條理,並且便於維護。如果需要調整某個頁面的操作,只需修改對應的 Page 物件即可,無需改動所有相關的測試用例。

如果你對於自動化測試有興趣,請訂閱我的部落格,可以獲得最新的文章。

Subscribe to RyotaVL 測試工程師

Sign up now to get access to the library of members-only issues.
Jamie Larson
Subscribe