Skip to content

Commit 46d5eb7

Browse files
committed
make package s_tool and fix code quality
1 parent d1389ce commit 46d5eb7

File tree

7 files changed

+102
-67
lines changed

7 files changed

+102
-67
lines changed

s_tool/__init__.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
"""Package s-tool.
2+
3+
Selenium wrapper to make your life easy.
4+
5+
MIT License
6+
7+
Copyright (c) 2021 Python World
8+
"""
9+
10+
from importlib.metadata import version
11+
12+
__version__ = version(__package__)

stool/driver.py renamed to s_tool/driver.py

Lines changed: 35 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,25 @@
55
from webdriver_manager.firefox import GeckoDriverManager
66
from webdriver_manager.utils import ChromeType
77

8-
from utils import (SToolException, click, current_url, get_cookies,
9-
get_element, get_session, hide_show_elements, page_source,
10-
take_screenshot, visit)
8+
from s_tool.utils import (
9+
SToolException,
10+
click,
11+
current_url,
12+
get_cookies,
13+
get_element,
14+
get_session,
15+
hide_show_elements,
16+
page_source,
17+
take_screenshot,
18+
visit,
19+
)
1120

1221

1322
class SeleniumDriver:
14-
"""SeleniumDriver class to manage driver object and all utility functions at one place
15-
"""
23+
"""SeleniumDriver class to manage driver object and all utility functions at one place"""
1624

1725
def __init__(self, browser=None, headless=False):
18-
self.browser_list = ['chrome', 'chromium', 'firefox']
26+
self.browser_list = ["chrome", "chromium", "firefox"]
1927
self.driver = None
2028
self.browser = browser
2129
self.headless = headless
@@ -24,44 +32,45 @@ def __init__(self, browser=None, headless=False):
2432
self._load_methods()
2533

2634
def close(self):
27-
"""will stop driver after program execution
28-
"""
35+
"""will stop driver after program execution"""
2936
if self.driver:
3037
self.driver.quit()
3138

3239
def __exit__(self, type, value, traceback):
33-
"""release the resources occupied with the current session
34-
"""
40+
"""release the resources occupied with the current session"""
3541
self.close()
3642

3743
def __enter__(self):
3844
return self._load_driver()
3945

4046
def _load_driver(self):
41-
"""Create Selenium webdriver object
42-
"""
47+
"""Create Selenium webdriver object"""
4348
self.close()
4449
browser = self.browser.lower()
4550
if browser not in self.browser_list:
4651
raise SToolException(
47-
f"provided browser {browser} doesn't exists. available brower list:{self.browser_list}")
52+
f"provided browser {browser} doesn't exists. available brower list:{self.browser_list}"
53+
)
4854

4955
# add chrome and firefox different options
50-
options = getattr(webdriver, browser if browser !=
51-
'chromium' else 'chrome').options.Options()
56+
options = getattr(
57+
webdriver, browser if browser != "chromium" else "chrome"
58+
).options.Options()
5259
if self.headless:
53-
options.add_argument('--headless')
60+
options.add_argument("--headless")
5461

55-
if browser in ['chrome', 'chromium']:
56-
browser_type = ChromeType.CHROMIUM if browser == 'chromium' else ChromeType.GOOGLE
57-
self.driver = webdriver.Chrome(ChromeDriverManager(
58-
chrome_type=browser_type).install(),
59-
options=options)
62+
if browser in ["chrome", "chromium"]:
63+
browser_type = (
64+
ChromeType.CHROMIUM if browser == "chromium" else ChromeType.GOOGLE
65+
)
66+
self.driver = webdriver.Chrome(
67+
ChromeDriverManager(chrome_type=browser_type).install(), options=options
68+
)
6069

6170
if browser == "firefox":
6271
self.driver = webdriver.Firefox(
63-
executable_path=GeckoDriverManager().install(),
64-
options=options)
72+
executable_path=GeckoDriverManager().install(), options=options
73+
)
6574

6675
# Maximize window to give normal browser feel
6776
self.driver.maximize_window()
@@ -83,9 +92,9 @@ def _load_methods(self):
8392
self.hide = partial(hide_show_elements, self.driver)
8493

8594

86-
if __name__ == '__main__':
95+
if __name__ == "__main__":
8796

8897
# Create A Driver Object
89-
with SeleniumDriver('firefox', headless=False) as obj:
98+
with SeleniumDriver("firefox", headless=False) as obj:
9099
# visit https:example.com
91-
obj.visit(r'https://quotes.toscrape.com/')
100+
obj.visit(r"https://quotes.toscrape.com/")
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
class Parser(object):
2-
"""Parse data from webdriver
3-
"""
2+
"""Parse data from webdriver"""
43

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

s_tool/utils/__init__.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# -*- coding: utf-8 -*-
2+
3+
from utils.driver_exceptions import SToolException
4+
from utils.driver_utils import (
5+
click,
6+
current_url,
7+
get_cookies,
8+
get_element,
9+
get_locator,
10+
get_session,
11+
hide_show_elements,
12+
page_source,
13+
take_screenshot,
14+
visit,
15+
)
16+
17+
__all__ = [
18+
"SToolException",
19+
"current_url",
20+
"get_element",
21+
"get_session",
22+
"page_source",
23+
"visit",
24+
"get_locator",
25+
"click",
26+
"get_cookies",
27+
"take_screenshot",
28+
"hide_show_elements",
29+
]
Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
2-
31
class SToolException(Exception):
42
"""
53
Base Class for selenium tools Exceptions
Lines changed: 25 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,26 @@
33
from selenium.webdriver.support import expected_conditions as EC
44
from selenium.webdriver.support.ui import WebDriverWait
55

6-
from utils.driver_exceptions import SToolException
6+
from s_tool.utils.driver_exceptions import SToolException
77

88

99
def get_session(driver):
10-
"""Return Selenium Driver session id
11-
"""
10+
"""Return Selenium Driver session id"""
1211
return driver.session_id
1312

1413

1514
def visit(driver, url):
16-
"""visit given url
17-
"""
15+
"""visit given url"""
1816
driver.get(url)
1917

2018

2119
def page_source(driver):
22-
"""Return html page source
23-
"""
20+
"""Return html page source"""
2421
return driver.page_source
2522

2623

2724
def current_url(driver):
28-
"""Return current url
29-
"""
25+
"""Return current url"""
3026
return driver.current_url
3127

3228

@@ -56,19 +52,19 @@ def get_element(driver, locator_type, locator_text, many=None):
5652
5753
many : optional default None,
5854
1: select multiple element
59-
0: select single element
55+
0: select single element
6056
6157
Returns:
62-
Return an element object if found otherwise
58+
Return an element object if found otherwise
6359
return None
6460
"""
6561

6662
locator_type = locator_type.upper()
6763
if hasattr(By, locator_type):
6864
try:
6965
locator = get_locator(locator_type, locator_text)
70-
is_multiple = 's' if many else ''
71-
func = getattr(driver, f'find_element{is_multiple}')
66+
is_multiple = "s" if many else ""
67+
func = getattr(driver, f"find_element{is_multiple}")
7268
return func(*locator)
7369
except NoSuchElementException:
7470
return None
@@ -93,7 +89,8 @@ def click(driver, locator_type, locator_text, click_time=10):
9389
try:
9490
elem_locator = get_locator(locator_type, locator_text)
9591
element = WebDriverWait(driver, click_time).until(
96-
EC.element_to_be_clickable(elem_locator))
92+
EC.element_to_be_clickable(elem_locator)
93+
)
9794
element.click()
9895
return True
9996
except TimeoutException:
@@ -113,25 +110,25 @@ def get_cookies(driver):
113110
no cookies return an empty dictionary
114111
"""
115112
cookies = driver.get_cookies()
116-
cookies_dict = {cookie['name']: cookie['value'] for cookie in cookies}
113+
cookies_dict = {cookie["name"]: cookie["value"] for cookie in cookies}
117114
return cookies_dict or {}
118115

119116

120117
def take_screenshot(driver, element=None):
121118
"""take screenshot of given element if element is
122-
not given take a full page screeenshot and return
123-
data in bytes
119+
not given take a full page screeenshot and return
120+
data in bytes
124121
125-
Args:
126-
driver : selenium Webdriver
127-
element : default None, provide element locator
128-
example : element=('id','element_id')
122+
Args:
123+
driver : selenium Webdriver
124+
element : default None, provide element locator
125+
example : element=('id','element_id')
129126
130-
Returns:
131-
returns byte object,if element not present
132-
it will return None.
127+
Returns:
128+
returns byte object,if element not present
129+
it will return None.
133130
134-
full screenshot will work only in headless mode.
131+
full screenshot will work only in headless mode.
135132
"""
136133
if element and isinstance(element, tuple):
137134
locator_type, locator_text = element
@@ -147,7 +144,7 @@ def take_screenshot(driver, element=None):
147144

148145

149146
def display_element(driver, element, hide=None):
150-
""" hide or show single element
147+
"""hide or show single element
151148
152149
Args:
153150
driver : selenium webdriver
@@ -158,9 +155,8 @@ def display_element(driver, element, hide=None):
158155
None
159156
"""
160157

161-
hide_or_show = 'inline' if hide else 'None'
162-
driver.execute_script(
163-
f"arguments[0].style.display = '{hide_or_show}';", element)
158+
hide_or_show = "inline" if hide else "None"
159+
driver.execute_script(f"arguments[0].style.display = '{hide_or_show}';", element)
164160

165161

166162
def hide_show_elements(driver, elements, hide=None):

stool/utils/__init__.py

Lines changed: 0 additions & 8 deletions
This file was deleted.

0 commit comments

Comments
 (0)