SeleniumにおけるPage Objectパターンの実践: WeComを例に

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クラス内に限定され、メンテナンス性が向上します。

タグ: Page_Object Selenium WeCom テスト自動化

5月20日 06:29 投稿