From 2e23435c9f47411dbba186070a9bb8c24af4a8e7 Mon Sep 17 00:00:00 2001 From: Ravishankar Chavare <33047641+chavarera@users.noreply.github.com> Date: Wed, 30 Jun 2021 11:55:18 +0530 Subject: [PATCH] Revert "restructuring project file structure" --- s_tool/driver.py | 8 +++-- s_tool/parser.py | 29 +++------------- s_tool/utils/__init__.py | 29 ++++++++++++++++ .../driver_exceptions.py} | 0 s_tool/{utils.py => utils/driver_utils.py} | 33 ++++++++----------- tests/test_webdrivers.py | 7 ---- 6 files changed, 52 insertions(+), 54 deletions(-) create mode 100644 s_tool/utils/__init__.py rename s_tool/{exceptions.py => utils/driver_exceptions.py} (100%) rename s_tool/{utils.py => utils/driver_utils.py} (84%) delete mode 100644 tests/test_webdrivers.py diff --git a/s_tool/driver.py b/s_tool/driver.py index e0762c2..235b818 100644 --- a/s_tool/driver.py +++ b/s_tool/driver.py @@ -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, @@ -93,4 +93,8 @@ def _load_methods(self): if __name__ == "__main__": - pass + + # Create A Driver Object + with SeleniumDriver("firefox", headless=False) as obj: + # visit https:example.com + obj.visit(r"https://quotes.toscrape.com/") diff --git a/s_tool/parser.py b/s_tool/parser.py index 3161e84..5a73247 100644 --- a/s_tool/parser.py +++ b/s_tool/parser.py @@ -1,26 +1,5 @@ -from s_tool.utils import get_element +class Parser(object): + """Parse data from webdriver""" - -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 + def __init__(self, driver): + self.driver = driver diff --git a/s_tool/utils/__init__.py b/s_tool/utils/__init__.py new file mode 100644 index 0000000..c2687b1 --- /dev/null +++ b/s_tool/utils/__init__.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- + +from utils.driver_exceptions import SToolException +from utils.driver_utils import ( + click, + current_url, + get_cookies, + get_element, + get_locator, + get_session, + hide_show_elements, + page_source, + take_screenshot, + visit, +) + +__all__ = [ + "SToolException", + "current_url", + "get_element", + "get_session", + "page_source", + "visit", + "get_locator", + "click", + "get_cookies", + "take_screenshot", + "hide_show_elements", +] diff --git a/s_tool/exceptions.py b/s_tool/utils/driver_exceptions.py similarity index 100% rename from s_tool/exceptions.py rename to s_tool/utils/driver_exceptions.py diff --git a/s_tool/utils.py b/s_tool/utils/driver_utils.py similarity index 84% rename from s_tool/utils.py rename to s_tool/utils/driver_utils.py index 9de3492..e216078 100644 --- a/s_tool/utils.py +++ b/s_tool/utils/driver_utils.py @@ -1,35 +1,32 @@ -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.exceptions import SToolException +from s_tool.utils.driver_exceptions import SToolException -def get_session(driver: webdriver) -> str: +def get_session(driver): """Return Selenium Driver session id""" return driver.session_id -def visit(driver: webdriver, url: str) -> None: +def visit(driver, url): """visit given url""" driver.get(url) -def page_source(driver: webdriver) -> str: +def page_source(driver): """Return html page source""" return driver.page_source -def current_url(driver: webdriver) -> str: +def current_url(driver): """Return current url""" return driver.current_url -def get_locator(locator_type: str, locator_text: str) -> tuple: +def get_locator(locator_type, locator_text): """Return element locator Args: @@ -43,9 +40,7 @@ def get_locator(locator_type: str, locator_text: str) -> tuple: return getattr(By, locator), locator_text -def get_element( - driver: webdriver, locator_type: str, locator_text: str, many: bool = None -): +def get_element(driver, locator_type, locator_text, many=None): """Get element using locator type and locator text Args: @@ -77,9 +72,7 @@ def get_element( raise SToolException("INVALID_SELECTOR") -def click( - driver: webdriver, locator_type: str, locator_text: str, click_time: int = 10 -) -> Union[bool, None]: +def click(driver, locator_type, locator_text, click_time=10): """Return True if element clicked otherwise return None Args: @@ -106,7 +99,7 @@ def click( raise SToolException(ex) -def get_cookies(driver: webdriver) -> dict: +def get_cookies(driver): """Accept driver object and return cookies in dictionary Args: @@ -121,7 +114,7 @@ def get_cookies(driver: webdriver) -> dict: return cookies_dict or {} -def take_screenshot(driver: webdriver, element: tuple = None) -> Union[bytes, None]: +def take_screenshot(driver, element=None): """take screenshot of given element if element is not given take a full page screeenshot and return data in bytes @@ -150,7 +143,7 @@ def take_screenshot(driver: webdriver, element: tuple = None) -> Union[bytes, No return driver.get_screenshot_as_png() -def display_element(driver: webdriver, element, hide=None) -> None: +def display_element(driver, element, hide=None): """hide or show single element Args: @@ -166,7 +159,7 @@ def display_element(driver: webdriver, element, hide=None) -> None: driver.execute_script(f"arguments[0].style.display = '{hide_or_show}';", element) -def hide_show_elements(driver: webdriver, elements: list, hide: bool = None) -> None: +def hide_show_elements(driver, elements, hide=None): """hide or show multiple elements Args: @@ -181,7 +174,7 @@ def hide_show_elements(driver: webdriver, elements: list, hide: bool = None) -> """ for element_locator in elements: locator_type, locator_value = element_locator - element_list = get_element(driver, locator_type, locator_value, many=True) + element_list = get_element(driver, locator_type, locator_value, 1) if element_list: for element in element_list: display_element(driver, element, hide) diff --git a/tests/test_webdrivers.py b/tests/test_webdrivers.py deleted file mode 100644 index f25e4ef..0000000 --- a/tests/test_webdrivers.py +++ /dev/null @@ -1,7 +0,0 @@ -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