Page Object Model

  1. Create a base_page.py file with a BasePage class that contains common methods used by all page objects:

class BasePage:
    def __init__(self, driver):
        self.driver = driver
    
    def click(self, locator):
        self.driver.find_element(*locator).click()
    
    def enter_text(self, locator, text):
        self.driver.find_element(*locator).send_keys(text)
    
    def get_element_text(self, locator):
        return self.driver.find_element(*locator).text
  1. Create a calculator_page.py file that represents the calculator screen and inherits from BasePage:

from selenium.webdriver.common.by import By
from base_page import BasePage

class CalculatorPage(BasePage):
    DISPLAY_RESULT = (By.ID, "result")
    DIGIT_BUTTONS = (By.CLASS_NAME, "digit")

    def get_display_result(self):
        return self.get_element_text(self.DISPLAY_RESULT)

    def enter_digit(self, digit):
        locator = (self.DIGIT_BUTTONS[0], "{}Button".format(digit))
        self.click(locator)
  1. Create a test_calculator.py file to write the tests:

from appium import webdriver
from calculator_page import CalculatorPage

class TestCalculator:
    def setup_method(self):
        desired_caps = {
            "platformName": "Android",
            "platformVersion": "10.0",
            "deviceName": "Android Emulator",
            "appPackage": "com.android.calculator2",
            "appActivity": "com.android.calculator2.Calculator",
            "noReset": True
        }
        self.driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)
    
    def teardown_method(self):
        self.driver.quit()

    def test_calculator_addition(self):
        calculator_page = CalculatorPage(self.driver)
        calculator_page.enter_digit(1)
        calculator_page.enter_digit(0)
        calculator_page.enter_digit(0)
        calculator_page.click(CalculatorPage.PLUS)
        calculator_page.enter_digit(2)
        calculator_page.enter_digit(0)
        calculator_page.enter_digit(0)
        assert calculator_page.get_display_result() == "300"

Last updated