Developer Interface¶
This part of the documentation describes the interfaces for using PyPOM.
Page¶
-
class
pypom.page.
Page
(driver, base_url=None, timeout=10, **url_kwargs)¶ A page object.
Used as a base class for your project’s page objects.
Parameters: Usage (Selenium):
from pypom import Page from selenium.webdriver import Firefox class Mozilla(Page): URL_TEMPLATE = 'https://www.mozilla.org/{locale}' driver = Firefox() page = Mozilla(driver, locale='en-US') page.open()
Usage (Splinter):
from pypom import Page from splinter import Browser class Mozilla(Page): URL_TEMPLATE = 'https://www.mozilla.org/{locale}' driver = Browser() page = Mozilla(driver, locale='en-US') page.open()
-
find_elements
(strategy, locator)¶ Finds elements on the page.
Parameters: - strategy (str) – Location strategy to use. See
By
orALLOWED_STRATEGIES
. - locator (str) – Location of target elements.
Returns: List of
WebElement
orElementList
Return type: list
- strategy (str) – Location strategy to use. See
-
is_element_displayed
(strategy, locator)¶ Checks whether an element is displayed.
Parameters: - strategy (str) – Location strategy to use. See
By
orALLOWED_STRATEGIES
. - locator (str) – Location of target element.
Returns: True
if element is displayed, elseFalse
.Return type: bool
- strategy (str) – Location strategy to use. See
-
is_element_present
(strategy, locator)¶ Checks whether an element is present.
Parameters: - strategy (str) – Location strategy to use. See
By
orALLOWED_STRATEGIES
. - locator (str) – Location of target element.
Returns: True
if element is present, elseFalse
.Return type: bool
- strategy (str) – Location strategy to use. See
-
loaded
¶ Loaded state of the page.
By default the driver will try to wait for any page loads to be complete, however it’s not uncommon for it to return early. To address this you can override
loaded
to returnTrue
when the page has finished loading.Returns: True
if page is loaded, elseFalse
.Return type: bool Usage (Selenium):
from pypom import Page from selenium.webdriver.common.by import By class Mozilla(Page): @property def loaded(self): body = self.find_element(By.TAG_NAME, 'body') return 'loaded' in body.get_attribute('class')
Usage (Splinter):
from pypom import Page class Mozilla(Page): def loaded(self): body = self.find_element('tag', 'body') return 'loaded' in body['class']
Examples:
# wait for the seed_url value to be in the current URL self.seed_url in self.selenium.current_url
-
open
()¶ Open the page.
Navigates to
seed_url
and callswait_for_page_to_load()
.Returns: The current page object. Return type: Page
Raises: UsageError
-
seed_url
¶ A URL that can be used to open the page.
The URL is formatted from
URL_TEMPLATE
, which is then appended tobase_url
unless the template results in an absolute URL.Returns: URL that can be used to open the page. Return type: str
-
selenium
¶ Backwards compatibility attribute
-
wait_for_page_to_load
()¶ Wait for the page to load.
-
Region¶
-
class
pypom.region.
Region
(page, root=None)¶ A page region object.
Used as a base class for your project’s page region objects.
Parameters: - page (
Page
) – Page object this region appears in. - root (
WebElement
orWebDriverElement
) – (optional) element that serves as the root for the region.
Usage (Selenium):
from pypom import Page, Region from selenium.webdriver import Firefox from selenium.webdriver.common.by import By class Mozilla(Page): URL_TEMPLATE = 'https://www.mozilla.org/' @property def newsletter(self): return Newsletter(self) class Newsletter(Region): _root_locator = (By.ID, 'newsletter-form') _submit_locator = (By.ID, 'footer_email_submit') def sign_up(self): self.find_element(*self._submit_locator).click() driver = Firefox() page = Mozilla(driver).open() page.newsletter.sign_up()
Usage (Splinter):
from pypom import Page, Region from splinter import Browser class Mozilla(Page): URL_TEMPLATE = 'https://www.mozilla.org/' @property def newsletter(self): return Newsletter(self) class Newsletter(Region): _root_locator = ('id', 'newsletter-form') _submit_locator = ('id', 'footer_email_submit') def sign_up(self): self.find_element(*self._submit_locator).click() driver = Browser() page = Mozilla(driver).open() page.newsletter.sign_up()
-
find_element
(strategy, locator)¶ Finds an element on the page.
Parameters: - strategy (str) – Location strategy to use. See
By
orALLOWED_STRATEGIES
. - locator (str) – Location of target element.
Returns: An element.
Rytpe: WebElement
orWebDriverElement
- strategy (str) – Location strategy to use. See
-
find_elements
(strategy, locator)¶ Finds elements on the page.
Parameters: - strategy (str) – Location strategy to use. See
By
orALLOWED_STRATEGIES
. - locator (str) – Location of target elements.
Returns: List of
WebElement
orElementList
Return type: list
- strategy (str) – Location strategy to use. See
-
is_element_displayed
(strategy, locator)¶ Checks whether an element is displayed.
Parameters: - strategy (str) – Location strategy to use. See
By
orALLOWED_STRATEGIES
. - locator (str) – Location of target element.
Returns: True
if element is displayed, elseFalse
.Return type: bool
- strategy (str) – Location strategy to use. See
-
is_element_present
(strategy, locator)¶ Checks whether an element is present.
Parameters: - strategy (str) – Location strategy to use. See
By
orALLOWED_STRATEGIES
. - locator (str) – Location of target element.
Returns: True
if element is present, elseFalse
.Return type: bool
- strategy (str) – Location strategy to use. See
-
loaded
¶ Loaded state of the page region.
You may need to initialise your page region before it’s ready for you to interact with it. If this is the case, you can override
loaded
to returnTrue
when the region has finished loading.Returns: True
if page is loaded, elseFalse
.Return type: bool Usage (Selenium):
from pypom import Page, Region from selenium.webdriver.common.by import By class Mozilla(Page): URL_TEMPLATE = 'https://www.mozilla.org/' @property def newsletter(self): return Newsletter(self) class Newsletter(Region): _root_locator = (By.ID, 'newsletter-form') @property def loaded(self): return 'loaded' in self.root.get_attribute('class')
Usage (Splinter):
from pypom import Page, Region class Mozilla(Page): URL_TEMPLATE = 'https://www.mozilla.org/' @property def newsletter(self): return Newsletter(self) class Newsletter(Region): _root_locator = ('id', 'newsletter-form') @property def loaded(self): return 'loaded' in self.root['class']
-
root
¶ Root element for the page region.
Page regions should define a root element either by passing this on instantiation or by defining a
_root_locator
attribute. To reduce the chances of hittingStaleElementReferenceException
or similar you should use_root_locator
, as this is looked up every time theroot
property is accessed.
-
selenium
¶ Backwards compatibility attribute
-
wait_for_region_to_load
()¶ Wait for the page region to load.
- page (