ページオブジェクトモデルの適用
ページオブジェクトモデルとは?
Page Object Modelは、ロケータ、テストボックス、テストスイートルームなどをモジュール化して個別ファイルとして管理する設計モデルです
では、なぜPOMモードを使うのでしょうか.
Page Object Modelは、コードの重複を減らし、テスト事例を維持する上で非常に効果的です.
たとえば、ログインページの1つのElementが変更されたと仮定すると、Elementを変更するすべてのテストケースを1つずつ変更する必要がある場合があります.ただし、モジュール化されたファイルでこの要素を管理する場合は、1つのファイルを変更するだけで簡単にメンテナンスできます.
したがって、メンテナンスやコード再利用を容易にし、コードの可読性と信頼性を確保するためには、POMモードを使用することが望ましい.
POM構造例
手順1:共通のpage Baseモジュールの作成
すべてのページに共通するメソッドは
page_Base.py
モニタ検出情報に基づいてロケータを定義する
次に生成される
page_splash.py
テストケースにはLocatorが定義されていません.
Page Object Modelは、ロケータ、テストボックス、テストスイートルームなどをモジュール化して個別ファイルとして管理する設計モデルです
では、なぜPOMモードを使うのでしょうか.
Page Object Modelは、コードの重複を減らし、テスト事例を維持する上で非常に効果的です.
たとえば、ログインページの1つのElementが変更されたと仮定すると、Elementを変更するすべてのテストケースを1つずつ変更する必要がある場合があります.ただし、モジュール化されたファイルでこの要素を管理する場合は、1つのファイルを変更するだけで簡単にメンテナンスできます.
したがって、メンテナンスやコード再利用を容易にし、コードの可読性と信頼性を確保するためには、POMモードを使用することが望ましい.
POM構造例
├── Config # 공통으로 사용하는 정보들이 담긴 폴더 (계정 정보 등)
│ ├── __init__.py
│ └── config.py
├── Pages # Locator 와 page object들이 담긴 폴더
│ ├── __init__.py
│ ├── page_Base.py
│ └── page_splash.py
├── TestBase
│ ├── WebDriverSetup.py # WebDriver 셋팅 모듈이 담긴 폴더
│ ├── __init__.py
├── Tests # 테스트 케이스가 담긴 폴더
│ ├── TEST_BASIC
│ │ ├── BASIC_login.py
│ │ ├── __init__.py
│ ├── __init__.py
実際の応用POM手順1:共通のpage Baseモジュールの作成
すべてのページに共通するメソッドは
page_Base.py
に定義されています.各ページで特に使用される機能は、このページモジュールでメソッドとして作成され、使用されます.page_Base.py
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class BasePage:
""" 모든 페이지에서 공통으로 사용할 메서드를 정의한다 """
def __init__(self, driver):
self.driver = driver
# 엘러먼트 클릭
def click(self, by_locator):
WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(by_locator)).click()
# 엘러먼트에 키 입력
def send_keys(self, by_locator, text):
WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(by_locator)).send_keys(text)
手順2:画面固有のページモジュールを作成し、場所を定義するモニタ検出情報に基づいてロケータを定義する
次に生成される
page_splash.py
は、アプリケーションが初めて実行された後に露出したフラッシュページのロケータを識別することによって定義される.page_splash.py
from .page_Base import BasePage
from appium.webdriver.common.mobileby import MobileBy
class SplashPage(BasePage):
""" 앱 최초 실행 후 스플래시 페이지의 Locator """
btn_positive = (MobileBy.ID, "com.mrt.ducati.dev:id/btn_positive")
手順3:テストケースの作成テストケースにはLocatorが定義されていません.
from TestBase.WebDriverSetup import WebDriverSetup
from Pages.page_splash import SplashPage
class LoginTest:
def setUp(self):
""" 본 예제에서는 생략 """
def test_case_1(self):
""" 테스트 케이스 작성 """
splash = SplashPage(self.driver)
splash.click(SplashPage.btn_positive)
def tearDown(self):
""" 본 예제에서는 생략 """
Reference
この問題について(ページオブジェクトモデルの適用), 我々は、より多くの情報をここで見つけました https://velog.io/@tkjung/Appium-POM을-적용한-자동화-구조-설계テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol