foxpuppet/windows/base.py (22 lines of code) (raw):
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at http://mozilla.org/MPL/2.0/.
"""Handles creation of a base object for interacting with Firefox windows."""
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.remote.webdriver import WebDriver
from selenium.webdriver.remote.webelement import WebElement
class BaseWindow(object):
"""A base window model."""
_document_element = (By.CSS_SELECTOR, ":root")
def __init__(self, selenium: WebDriver, handle: str) -> None:
"""Create a BaseWindow object.
Args:
selenium:
(:py:class:`~selenium.webdriver.remote.webdriver.WebDriver`):
Firefox WebDriver object.
handle: (str): WebDriver Firefox window handle.
"""
self.selenium: WebDriver = selenium
self.handle: str = handle
self.wait: WebDriverWait = WebDriverWait(self.selenium, timeout=10)
@property
def document_element(self) -> WebElement:
"""Return the inner DOM window element.
Returns:
:py:class:`~selenium.webdriver.remote.webelement.WebElement`:
WebDriver element object for the DOM window element.
"""
return self.selenium.find_element(*self._document_element)
@property
def firefox_version(self) -> int:
"""Major version of Firefox in use.
Returns:
int: Major component of the Firefox version.
"""
version: str = self.selenium.capabilities["browserVersion"]
return int(version.partition(".")[0])
def close(self) -> None:
"""Close the window."""
self.switch_to()
self.selenium.close()
def switch_to(self) -> None:
"""Switch focus for Selenium commands to this window."""
self.selenium.switch_to.window(self.handle)