Skip to content

Commit 055a02c

Browse files
authored
Merge pull request #35 from chavarera/main
#32 Resolved
2 parents 33f9c03 + c4a6fdc commit 055a02c

File tree

4 files changed

+107
-24
lines changed

4 files changed

+107
-24
lines changed

README.md

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,18 @@
2222
- WebDriver
2323
- Manage multiple web drivers such as chrome,chromium,firefox.
2424
- Different Utilities
25-
- Retrieve element with 5 different attribute.
26-
- Perform clicks on element
27-
- Take full page and element screenshot.
25+
- Retrieve elements with 5 different attributes.
26+
- Perform clicks on element,
27+
- Take a full page and element screenshot.
2828
- Hide and show elements.
2929
- Information filling on different form elements such as text,radio,checkbox.
30-
- Retrieves current cookies from browser.
31-
- Retrieve url and web page source
30+
- Retrieves current cookies from the browser.
31+
- Retrieve url and web page source.
32+
- Add or modify existing cookies.
33+
- Check Existence of an element on the page.
3234
- Element Parser
33-
- table Information
34-
- Retrieve dropdown options in dictionary
35+
- table Information.
36+
- Retrieve dropdown options in the dictionary.
3537

3638
## How To Use
3739

@@ -74,19 +76,19 @@ from s_tool.driver import SeleniumDriver
7476

7577

7678
class SBot(SeleniumDriver):
77-
"""Example Bot using s-tool"""
79+
"""Example Bot using s-tool"""
7880

79-
def __init__(self, *args, **kwargs):
80-
super().__init__(*args, **kwargs)
81+
def __init__(self, *args, **kwargs):
82+
super().__init__(*args, **kwargs)
8183

82-
def run(self):
83-
self.get("https://google.com")
84-
sessionid = self.session()
85-
url = self.url()
86-
cookies = self.cookies()
84+
def run(self):
85+
self.get("https://google.com")
86+
sessionid = self.session()
87+
url = self.url()
88+
cookies = self.cookies()
8789

88-
# print sessionid,url,cookies
89-
print(f"\nurl : {url} \nsession : {sessionid}\ncookies : {cookies}\n")
90+
# print sessionid,url,cookies
91+
print(f"\n url : {url} \n session : {sessionid}\n cookies : {cookies}\n")
9092

9193

9294
bot = SBot("firefox", headless=True) # change headless=False to run with gui mode
@@ -103,13 +105,13 @@ bot.close()
103105
from s_tool.driver import SeleniumDriver as SBot
104106

105107
with SBot("firefox", headless=True) as obj:
106-
obj.get("https://google.com")
107-
sessionid = obj.session()
108-
url = obj.url()
109-
cookies = obj.cookies()
108+
obj.get("https://google.com")
109+
sessionid = obj.session()
110+
url = obj.url()
111+
cookies = obj.cookies()
110112

111-
# print sessionid,url,cookies
112-
print(f"\nurl : {url} \nsession : {sessionid}\ncookies : {cookies}\n")
113+
# print sessionid,url,cookies
114+
print(f"\n url : {url} \n session : {sessionid}\n cookies : {cookies}\n")
113115

114116
```
115117

@@ -118,7 +120,7 @@ with SBot("firefox", headless=True) as obj:
118120
- Web driver utilities
119121
- Scrolling element and page.
120122
- Handling popup and alert boxes.
121-
- Switching windows,frame,tabs,iframes.
123+
- Switching windows,frames,tabs,iframes.
122124
- logger.
123125
- Element Parser
124126
- list

s_tool/driver.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
hide_show_elements,
1717
is_element,
1818
page_source,
19+
set_cookies,
1920
take_screenshot,
2021
visit,
2122
)
@@ -94,6 +95,7 @@ def _load_methods(self):
9495
self.hide = partial(hide_show_elements, self.driver)
9596
self.fill = partial(fill, self.driver)
9697
self.is_element = partial(is_element, self.driver)
98+
self.set_cookies = partial(set_cookies, self.driver)
9799

98100

99101
if __name__ == "__main__":

s_tool/utils.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,44 @@ def get_cookies(driver: webdriver) -> dict:
122122
return cookies_dict or {}
123123

124124

125+
def set_cookies(
126+
driver: webdriver,
127+
drop_all: bool = False,
128+
drop_keys: set = set(),
129+
**cookies,
130+
) -> None:
131+
"""Set cookies into webdriver instance
132+
133+
Args:
134+
driver : selenium webdriver.
135+
drop_all : default False, set it to True to delete all cookies.
136+
drop_keys : a set of cookie keys to delete from the browser.
137+
**cookies : variable length of cookies.
138+
139+
Returns:
140+
None
141+
142+
Usage:
143+
set_cookies(driver,name="s-tool",version=1)
144+
set_cookies(driver,drop_all=True,name="s-tool",version=1)
145+
set_cookies(driver,**{'name':"s-tool","version":1}
146+
"""
147+
# cookies name and value must be in string
148+
cookies = {str(k): str(v) for k, v in cookies.items()}
149+
150+
# Delete all cookies
151+
if drop_all:
152+
driver.delete_all_cookies()
153+
154+
# Delete only given cookies Name
155+
for name in drop_keys:
156+
driver.delete_cookie(name)
157+
158+
# Add new cookies
159+
for name, value in cookies.items():
160+
driver.add_cookie({"name": name, "value": value})
161+
162+
125163
def take_screenshot(driver: webdriver, element: tuple = None) -> Union[bytes, None]:
126164
"""take screenshot of given element if element is
127165
not given take a full page screeenshot and return

tests/test_driver.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
from s_tool.driver import SeleniumDriver
2+
3+
from . import TEST_URL
4+
5+
6+
def test_cookies():
7+
with SeleniumDriver("firefox", headless=True) as obj:
8+
obj.get("https://www.google.com/")
9+
10+
# Validate cookies type
11+
assert type(obj.cookies()) is dict
12+
13+
# Drop all cookies
14+
obj.set_cookies(drop_all=True)
15+
assert obj.cookies() == {}
16+
17+
# Set new cookies
18+
19+
obj.set_cookies(name="s-tool", version="1.0")
20+
cookies = obj.cookies()
21+
assert cookies.get("name") == "s-tool"
22+
23+
# Drop cookie by name
24+
obj.set_cookies(drop_keys={"version"})
25+
cookies = obj.cookies()
26+
assert cookies.get("version", 1) == 1
27+
28+
29+
def test_base():
30+
with SeleniumDriver("firefox", headless=True) as obj:
31+
URL = "https://www.google.com/"
32+
obj.get(URL)
33+
34+
# session
35+
assert type(obj.session()) is str
36+
37+
# current_url
38+
assert URL in obj.url()
39+
40+
# page_source
41+
assert len(obj.text()) > 100

0 commit comments

Comments
 (0)