Page Objectパターンの基本概念
Page ObjectパターンはUIテスト自動化において、ページ要素と操作ロジックをカプセル化する設計手法です。WeComのウェブインターフェースを例に、このパターンの実装方法を解説します。
プロジェクト構造
BasePage/
├── base_page.py
├── home_page.py
├── login_page.py
└── register_page.py
TestCases/
└── test_registration.py
基底ページクラス
from selenium import webdriver
from selenium.webdriver.remote.webdriver import WebDriver
class BasePage:
BASE_URL = ""
def __init__(self, driver: WebDriver = None):
if not driver:
self.driver = webdriver.Chrome()
else:
self.driver = driver
if self.BASE_URL:
self.driver.get(self.BASE_URL)
def locate_element(self, by, selector):
return self.driver.find_element(by, selector)
ホームページ実装
from .base_page import BasePage
from .login_page import LoginPage
from .register_page import RegisterPage
class HomePage(BasePage):
BASE_URL = "https://work.weixin.qq.com/"
def navigate_to_register(self):
return RegisterPage(self.driver)
def navigate_to_login(self):
return LoginPage(self.driver)
登録ページ実装
from selenium.webdriver.common.by import By
from .base_page import BasePage
class RegisterPage(BasePage):
def complete_registration(self):
company_field = self.locate_element(By.ID, "corp_name")
company_field.send_keys("テスト企業")
return company_field.get_attribute("value")
ログインページ実装
from .base_page import BasePage
from .register_page import RegisterPage
class LoginPage(BasePage):
def perform_qr_scan(self):
# QRコードスキャン処理
return True
def navigate_to_register(self):
return RegisterPage(self.driver)
テストケース実装
from BasePage.home_page import HomePage
class RegistrationTests:
def setup(self):
self.home = HomePage()
def test_registration_flow(self):
registration = self.home.navigate_to_register()
assert registration.complete_registration() == "テスト企業"
from_login = self.home.navigate_to_login().navigate_to_register()
assert from_login.complete_registration() == "テスト企業"
パターンの利点
この実装により、テストコードとページロジックが明確に分離されます。ページ構造が変更された場合でも、対応箇所がPage Objectクラス内に限定され、メンテナンス性が向上します。