Getting Started


To get started with Dyatel Wrapper, follow these steps:

1. Installation

Install Dyatel Wrapper via pip:

pip3 install dyatel-wrapper

2. Write Simple Page Object


Note

For the PageObject example, the Dyatel Wrapper Playground page is used.

from dyatel.base.element import Element
from dyatel.base.group import Group
from dyatel.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 dyatel.base.driver_wrapper import DriverWrapper
from dyatel.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 dyatel.base.driver_wrapper import DriverWrapper
from dyatel.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

Dyatel Wrapper supports only sync API of playwright

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

from dyatel.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 == 'PYTHON'


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