Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 2 additions & 6 deletions s_tool/driver.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
from webdriver_manager.firefox import GeckoDriverManager
from webdriver_manager.utils import ChromeType

from s_tool.exceptions import SToolException
from s_tool.utils import (
SToolException,
click,
current_url,
get_cookies,
Expand Down Expand Up @@ -93,8 +93,4 @@ def _load_methods(self):


if __name__ == "__main__":

# Create A Driver Object
with SeleniumDriver("firefox", headless=False) as obj:
# visit https:example.com
obj.visit(r"https://quotes.toscrape.com/")
pass
File renamed without changes.
29 changes: 25 additions & 4 deletions s_tool/parser.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,26 @@
class Parser(object):
"""Parse data from webdriver"""
from s_tool.utils import get_element

def __init__(self, driver):
self.driver = driver

def select_options(element, swap=None, text_exclude=[]):
"""Return dropdown option in key value pair

Args:
element : An select element
text_exclude : list of values to exclude from result

Returns:
return dict of values and text of select element,
return empty dict() if element is not valid or not exists
"""
option_dict = dict()
if element and hasattr(element, "tag_name") and element.tag_name == "select":
options = get_element(element, "tag_name", "option", many=True)
for option in options:
func = option.get_attribute
text, value = func("text"), func("value")
if text not in text_exclude:
if swap:
text, value = value, text
option_dict[value] = text

return option_dict
33 changes: 20 additions & 13 deletions s_tool/utils/driver_utils.py → s_tool/utils.py
Original file line number Diff line number Diff line change
@@ -1,32 +1,35 @@
from typing import Union

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException, TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

from s_tool.utils.driver_exceptions import SToolException
from s_tool.exceptions import SToolException


def get_session(driver):
def get_session(driver: webdriver) -> str:
"""Return Selenium Driver session id"""
return driver.session_id


def visit(driver, url):
def visit(driver: webdriver, url: str) -> None:
"""visit given url"""
driver.get(url)


def page_source(driver):
def page_source(driver: webdriver) -> str:
"""Return html page source"""
return driver.page_source


def current_url(driver):
def current_url(driver: webdriver) -> str:
"""Return current url"""
return driver.current_url


def get_locator(locator_type, locator_text):
def get_locator(locator_type: str, locator_text: str) -> tuple:
"""Return element locator

Args:
Expand All @@ -40,7 +43,9 @@ def get_locator(locator_type, locator_text):
return getattr(By, locator), locator_text


def get_element(driver, locator_type, locator_text, many=None):
def get_element(
driver: webdriver, locator_type: str, locator_text: str, many: bool = None
):
"""Get element using locator type and locator text

Args:
Expand Down Expand Up @@ -72,7 +77,9 @@ def get_element(driver, locator_type, locator_text, many=None):
raise SToolException("INVALID_SELECTOR")


def click(driver, locator_type, locator_text, click_time=10):
def click(
driver: webdriver, locator_type: str, locator_text: str, click_time: int = 10
) -> Union[bool, None]:
"""Return True if element clicked otherwise return None

Args:
Expand All @@ -99,7 +106,7 @@ def click(driver, locator_type, locator_text, click_time=10):
raise SToolException(ex)


def get_cookies(driver):
def get_cookies(driver: webdriver) -> dict:
"""Accept driver object and return cookies in dictionary

Args:
Expand All @@ -114,7 +121,7 @@ def get_cookies(driver):
return cookies_dict or {}


def take_screenshot(driver, element=None):
def take_screenshot(driver: webdriver, element: tuple = None) -> Union[bytes, None]:
"""take screenshot of given element if element is
not given take a full page screeenshot and return
data in bytes
Expand Down Expand Up @@ -143,7 +150,7 @@ def take_screenshot(driver, element=None):
return driver.get_screenshot_as_png()


def display_element(driver, element, hide=None):
def display_element(driver: webdriver, element, hide=None) -> None:
"""hide or show single element

Args:
Expand All @@ -159,7 +166,7 @@ def display_element(driver, element, hide=None):
driver.execute_script(f"arguments[0].style.display = '{hide_or_show}';", element)


def hide_show_elements(driver, elements, hide=None):
def hide_show_elements(driver: webdriver, elements: list, hide: bool = None) -> None:
"""hide or show multiple elements

Args:
Expand All @@ -174,7 +181,7 @@ def hide_show_elements(driver, elements, hide=None):
"""
for element_locator in elements:
locator_type, locator_value = element_locator
element_list = get_element(driver, locator_type, locator_value, 1)
element_list = get_element(driver, locator_type, locator_value, many=True)
if element_list:
for element in element_list:
display_element(driver, element, hide)
29 changes: 0 additions & 29 deletions s_tool/utils/__init__.py

This file was deleted.

7 changes: 7 additions & 0 deletions tests/test_webdrivers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from s_tool.driver import SeleniumDriver


def test_firefox_driver():
"""Test firefox driver with headless"""
with SeleniumDriver("firefox", headless=True) as obj:
assert "firefox" in obj.browser_list