Module pom_elements.page_object
Expand source code
from selenium import webdriver
class PageObject:
"""Class that allows for easily outlining your web pages as classes.
Todo:
Add type hints for the Selenium library to add Optional[webdriver].
Args:
webdriver (webdriver): A selenium webdriver instance for the PageObject.
"""
def __init__(self, webdriver: webdriver = None) -> None:
if webdriver is not None:
self.webdriver = webdriver
def __get__(self, instance, owner):
"""Return a PageObject and set the webdriver to the webdriver of the parent PageObject instance.
The PageObject class allows users to create any number of PageObject instances
as class variables on a PageObject class and pass the webdriver from parent
PageObject class to itself.
Additionally, we are propogating the webdriver as instance variables rather than
class variables, as this allows us to create any number of PageObject instances
under a single PageObject representing the Page and use separate webdrivers. For
example, one test can verify a PageObject with a WebDriver.session_id for Chrome,
while a separate instantiated PageObject Page can have a WebDriver.session_id
for Firefox, Safari, or any other browser as available with Selenium.
"""
instance_webdriver = getattr(instance, "webdriver", None)
if instance_webdriver is not None:
self.webdriver = instance_webdriver
return self
class Page(PageObject):
"""The class representing all of the methods and interactions of a web page.
A Page represents all of the functionality of the webdriver that is not encapsulated
in the PageElement objects. The attached methods are all interactions with the web
browser instance, and not elements on a single web page.
Args:
webdriver (webdriver): A selenium webdriver instance for the PageObject.
url (str): The url of the the PageObject.
"""
def __init__(self, webdriver: webdriver, url: str) -> None:
super().__init__(webdriver=webdriver)
self._url = url
@property
def url(self) -> str:
"""Get the url defined for this Page Object."""
return self._url
@url.setter
def url(self, url: str) -> None:
"""Set the url for this instance.
Args:
url: The url that this Page should be defined.
"""
self._url = url
@property
def current_url(self) -> str:
"""Return the url of the page currently being displayed by the webdriver."""
return self.webdriver.current_url
def go(self) -> None:
"""Navigate to the url set as the url for this Page object."""
self.webdriver.get(self.url)
def get(self, url: str) -> None:
"""Navigate to the provided url.
Args:
url: A url as a string.
"""
self.webdriver.get(url)
def back(self) -> None:
"""Navigate back one page on the web browser."""
self.webdriver.back()
def forward(self) -> None:
"""Navigate forward one page on the web browser."""
self.webdriver.forward()
def refresh(self) -> None:
"""Refresh the web browser."""
self.webdriver.refresh()
@property
def title(self) -> str:
"""The title of the current web page."""
return self.webdriver.title
def quit(self) -> None:
"""Quit the webdriver instance."""
self.webdriver.quit()
def maximize_window(self) -> None:
"""Maximize the web browser's window."""
self.webdriver.maximize_window()
def minimize_window(self) -> None:
"""Minimize the web browser's window."""
self.webdriver.minimize_window()
Classes
class Page (webdriver:, url: str) -
The class representing all of the methods and interactions of a web page.
A Page represents all of the functionality of the webdriver that is not encapsulated in the PageElement objects. The attached methods are all interactions with the web browser instance, and not elements on a single web page.
Args
webdriver:webdriver- A selenium webdriver instance for the PageObject.
url:str- The url of the the PageObject.
Expand source code
class Page(PageObject): """The class representing all of the methods and interactions of a web page. A Page represents all of the functionality of the webdriver that is not encapsulated in the PageElement objects. The attached methods are all interactions with the web browser instance, and not elements on a single web page. Args: webdriver (webdriver): A selenium webdriver instance for the PageObject. url (str): The url of the the PageObject. """ def __init__(self, webdriver: webdriver, url: str) -> None: super().__init__(webdriver=webdriver) self._url = url @property def url(self) -> str: """Get the url defined for this Page Object.""" return self._url @url.setter def url(self, url: str) -> None: """Set the url for this instance. Args: url: The url that this Page should be defined. """ self._url = url @property def current_url(self) -> str: """Return the url of the page currently being displayed by the webdriver.""" return self.webdriver.current_url def go(self) -> None: """Navigate to the url set as the url for this Page object.""" self.webdriver.get(self.url) def get(self, url: str) -> None: """Navigate to the provided url. Args: url: A url as a string. """ self.webdriver.get(url) def back(self) -> None: """Navigate back one page on the web browser.""" self.webdriver.back() def forward(self) -> None: """Navigate forward one page on the web browser.""" self.webdriver.forward() def refresh(self) -> None: """Refresh the web browser.""" self.webdriver.refresh() @property def title(self) -> str: """The title of the current web page.""" return self.webdriver.title def quit(self) -> None: """Quit the webdriver instance.""" self.webdriver.quit() def maximize_window(self) -> None: """Maximize the web browser's window.""" self.webdriver.maximize_window() def minimize_window(self) -> None: """Minimize the web browser's window.""" self.webdriver.minimize_window()Ancestors
Instance variables
var current_url : str-
Return the url of the page currently being displayed by the webdriver.
Expand source code
@property def current_url(self) -> str: """Return the url of the page currently being displayed by the webdriver.""" return self.webdriver.current_url var title : str-
The title of the current web page.
Expand source code
@property def title(self) -> str: """The title of the current web page.""" return self.webdriver.title var url : str-
Get the url defined for this Page Object.
Expand source code
@property def url(self) -> str: """Get the url defined for this Page Object.""" return self._url
Methods
def back(self) -> NoneType-
Navigate back one page on the web browser.
Expand source code
def back(self) -> None: """Navigate back one page on the web browser.""" self.webdriver.back() def forward(self) -> NoneType-
Navigate forward one page on the web browser.
Expand source code
def forward(self) -> None: """Navigate forward one page on the web browser.""" self.webdriver.forward() def get(self, url: str) -> NoneType-
Navigate to the provided url.
Args
url- A url as a string.
Expand source code
def get(self, url: str) -> None: """Navigate to the provided url. Args: url: A url as a string. """ self.webdriver.get(url) def go(self) -> NoneType-
Navigate to the url set as the url for this Page object.
Expand source code
def go(self) -> None: """Navigate to the url set as the url for this Page object.""" self.webdriver.get(self.url) def maximize_window(self) -> NoneType-
Maximize the web browser's window.
Expand source code
def maximize_window(self) -> None: """Maximize the web browser's window.""" self.webdriver.maximize_window() def minimize_window(self) -> NoneType-
Minimize the web browser's window.
Expand source code
def minimize_window(self) -> None: """Minimize the web browser's window.""" self.webdriver.minimize_window() def quit(self) -> NoneType-
Quit the webdriver instance.
Expand source code
def quit(self) -> None: """Quit the webdriver instance.""" self.webdriver.quit() def refresh(self) -> NoneType-
Refresh the web browser.
Expand source code
def refresh(self) -> None: """Refresh the web browser.""" self.webdriver.refresh()
class PageObject (webdriver:= None) -
Class that allows for easily outlining your web pages as classes.
Todo
Add type hints for the Selenium library to add Optional[webdriver].
Args
webdriver:webdriver- A selenium webdriver instance for the PageObject.
Expand source code
class PageObject: """Class that allows for easily outlining your web pages as classes. Todo: Add type hints for the Selenium library to add Optional[webdriver]. Args: webdriver (webdriver): A selenium webdriver instance for the PageObject. """ def __init__(self, webdriver: webdriver = None) -> None: if webdriver is not None: self.webdriver = webdriver def __get__(self, instance, owner): """Return a PageObject and set the webdriver to the webdriver of the parent PageObject instance. The PageObject class allows users to create any number of PageObject instances as class variables on a PageObject class and pass the webdriver from parent PageObject class to itself. Additionally, we are propogating the webdriver as instance variables rather than class variables, as this allows us to create any number of PageObject instances under a single PageObject representing the Page and use separate webdrivers. For example, one test can verify a PageObject with a WebDriver.session_id for Chrome, while a separate instantiated PageObject Page can have a WebDriver.session_id for Firefox, Safari, or any other browser as available with Selenium. """ instance_webdriver = getattr(instance, "webdriver", None) if instance_webdriver is not None: self.webdriver = instance_webdriver return selfSubclasses