Getting Started


To get started with , follow these steps:

1. Installation

Install Mops via pip:

pip3 install mops

2. Write Simple Page Object


Note

For the PageObject example, the UI Automation Playground site is used.

from mops.base.element import Element
from mops.base.group import Group
from mops.base.page import Page


class Card(Group):
    view_page_button = Element('//a[.="View Page"]', name='view page button')

    def click_view_page_button(self):
        self.view_page_button.click()


class BasicControlsSection(Group):

    def __init__(self):
        super().__init__('//*[contains(@class, "card") and .//*[.="Basic Form Controls"]]', name='For page')

    python_checkbox = Element('check_python', name='python checkbox')
    checkbox_label = Element('check_validate', name='checkbox label')


class FormsPage(Page):

    def __init__(self):
        super().__init__('.container', name='Forms page')

    controls_section = BasicControlsSection()


class MainPage(Page):
    def __init__(self):
        super().__init__('//h1[.="The Playground"]', name='Playground page')

    frames_card = Card('//*[contains(@class, "card") and  contains(., "Frames")]', name='frames card')

    def navigate_to_frames_page(self) -> FormsPage:
        self.frames_card.click_view_page()
        return FormsPage()

3. Set Up The Driver


Selenium driver setup

import pytest  # noqa
from selenium.webdriver.chrome.webdriver import WebDriver as ChromeWebDriver

from mops.base.driver_wrapper import DriverWrapper
from mops.mixins.objects.driver import Driver


@pytest.fixture
def driver_wrapper():
    selenium_driver = Driver(driver=ChromeWebDriver())
    return DriverWrapper(selenium_driver)


Appium driver setup

import pytest  # noqa
from appium.webdriver.webdriver import WebDriver as SourceAppiumDriver
from appium.options.common.base import AppiumOptions

from mops.base.driver_wrapper import DriverWrapper
from mops.mixins.objects.driver import Driver


@pytest.fixture
def driver_wrapper():
    caps = {}  # Your device capabilities
    appium_ip, appium_port = None, None  # Your appium ip and port
    options = AppiumOptions().load_capabilities(caps)

    appium_driver = SourceAppiumDriver(
        command_executor=f'http://{appium_ip}:{appium_port}/wd/hub',
        options=options
    )

    return DriverWrapper(Driver(driver=appium_driver))


Playwright driver setup

Attention

Mops supports only sync API of playwright

import pytest  # noqa
from playwright.sync_api import sync_playwright
from mops.mixins.objects.driver import Driver

from mops.base.driver_wrapper import DriverWrapper


@pytest.fixture
def driver_wrapper():
    instance = sync_playwright().start().chromium.launch()
    context = instance.new_context()
    page = context.new_page()

    return DriverWrapper(Driver(driver=page, context=context, instance=instance))

4. Write A Test


from ... import MainPage  # noqa


# pytest function
def test_example(driver_wrapper):
    driver_wrapper.get("https://customenv.github.io/test-automation-playground/")
    forms_page = MainPage().navigate_to_frames_page()
    
    assert forms_page.is_page_opened(), 'Forms Page is not opened after navigation'
    assert not forms_page.controls_section.checkbox_label.is_visible(), 'Checkbox label unexpectedly visible'
    
    forms_page.controls_section.python_checkbox.click()
    
    assert forms_page.controls_section.checkbox_label.text == 'PYTHON'


For detailed information, please refer to the next section of the documentation that addresses your questions