Metadata-Version: 2.1
Name: selenium-elements
Version: 0.0.2
Summary: Page object model made easy.
Home-page: https://github.com/danclaudiupop/selenium_elements
Author: Dan Claudiu Pop
Author-email: danclaudiupop@gmail.com
License: BSD 2-Clause License
Keywords: selenium,tests,page model
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: Unix
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.7
Classifier: Topic :: Utilities
Requires-Python: >=3.7
Requires-Dist: selenium

========
Overview
========



Page object model made easy.

* Free software: BSD 2-Clause License

Installation
============

::

    pip install selenium-elements

Documentation
=============


To use the project:

.. code-block:: python

    from contextlib import contextmanager

    import pytest
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.expected_conditions import staleness_of
    from selenium.webdriver.support.wait import WebDriverWait

    from selenium_elements.conditions import clickable
    from selenium_elements.elements import PageElement, PageElements, RegionElements
    from selenium_elements.page import Page, Region
    from selenium_elements.validators import title_matches, url_contains


    @contextmanager
    def wait_for_page_load(driver, timeout=30):
        old_page = driver.find_element_by_tag_name("html")
        yield
        WebDriverWait(driver, timeout).until(staleness_of(old_page))


    class Show(Page):
        path = "/show/{show_slug}/"
        validators = [title_matches("^[a-zA-Z]+ | PBS$"), url_contains("pbs.org/")]

        official_website_btn = PageElement(By.CLASS_NAME, "btn--visit", condition=clickable)

        @property
        def official_website_link(self):
            return self.official_website_btn.get_attribute("href")


    class PromoShowRegion(Region):
        title_element = PageElement(By.CLASS_NAME, "carousel--show-strip__image-link")

        def open(self):
            with wait_for_page_load(self.driver):
                self.title_element.click()
            return Show(driver=self.driver, base_url=self.base_url, visit=False)

        def title(self):
            return self.title_element.get_attribute("data-gtm-label")


    class Home(Page):
        path = "/"
        load_timeout = 30
        validators = [
            title_matches("^PBS: Public Broadcasting Service$"),
            url_contains("pbs.org/"),
        ]

        promo_show_elements = PageElements(
            By.CLASS_NAME, "show-promo", find_on_page_load=True
        )
        promo_shows = RegionElements(
            region_class=PromoShowRegion, root_element=promo_show_elements
        )


    @pytest.fixture
    def driver():
        driver = webdriver.Chrome()
        yield driver
        driver.quit()


    def test_foo(driver):
        home = Home(driver=driver, base_url="https://www.pbs.org")
        for show in home.promo_shows:
            print(show.title())
        show = home.promo_shows[0].open()
        print(show.official_website_link)
        assert True




