Skip to content

Commit f3704a3

Browse files
committed
Add more methods directly into the raw "driver"
1 parent 8a46307 commit f3704a3

File tree

3 files changed

+81
-0
lines changed

3 files changed

+81
-0
lines changed

seleniumbase/core/browser_launcher.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,9 @@ def extend_driver(driver):
116116
page = types.SimpleNamespace()
117117
page.open = DM.open_url
118118
page.click = DM.click
119+
page.click_link = DM.click_link
120+
page.click_if_visible = DM.click_if_visible
121+
page.click_active_element = DM.click_active_element
119122
page.send_keys = DM.send_keys
120123
page.press_keys = DM.press_keys
121124
page.type = DM.update_text
@@ -134,10 +137,13 @@ def extend_driver(driver):
134137
page.is_element_visible = DM.is_element_visible
135138
page.is_text_visible = DM.is_text_visible
136139
page.is_exact_text_visible = DM.is_exact_text_visible
140+
page.is_attribute_present = DM.is_attribute_present
137141
page.get_text = DM.get_text
138142
page.find_element = DM.find_element
139143
page.find_elements = DM.find_elements
140144
page.locator = DM.locator
145+
page.get_page_source = DM.get_page_source
146+
page.get_title = DM.get_title
141147
driver.page = page
142148
js = types.SimpleNamespace()
143149
js.js_click = DM.js_click
@@ -150,6 +156,8 @@ def extend_driver(driver):
150156
driver.open = DM.open_url
151157
driver.click = DM.click
152158
driver.click_link = DM.click_link
159+
driver.click_if_visible = DM.click_if_visible
160+
driver.click_active_element = DM.click_active_element
153161
driver.send_keys = DM.send_keys
154162
driver.press_keys = DM.press_keys
155163
driver.type = DM.update_text
@@ -168,6 +176,7 @@ def extend_driver(driver):
168176
driver.is_element_visible = DM.is_element_visible
169177
driver.is_text_visible = DM.is_text_visible
170178
driver.is_exact_text_visible = DM.is_exact_text_visible
179+
driver.is_attribute_present = DM.is_attribute_present
171180
driver.get_text = DM.get_text
172181
driver.js_click = DM.js_click
173182
driver.get_active_element_css = DM.get_active_element_css
@@ -176,6 +185,10 @@ def extend_driver(driver):
176185
driver.get_user_agent = DM.get_user_agent
177186
driver.highlight = DM.highlight
178187
driver.sleep = time.sleep
188+
driver.get_page_source = DM.get_page_source
189+
driver.get_title = DM.get_title
190+
if hasattr(driver, "proxy"):
191+
driver.set_wire_proxy = DM.set_wire_proxy
179192
return driver
180193

181194

seleniumbase/core/sb_driver.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@ def locator(self, selector, by=None):
4141
pass
4242
raise Exception('No such Element: {%s} (by="%s")!' % (selector, by))
4343

44+
def get_page_source(self):
45+
return self.driver.page_source
46+
47+
def get_title(self):
48+
return self.driver.title
49+
4450
def open_url(self, *args, **kwargs):
4551
page_actions.open_url(self.driver, *args, **kwargs)
4652

@@ -50,6 +56,12 @@ def click(self, *args, **kwargs):
5056
def click_link(self, *args, **kwargs):
5157
page_actions.click_link(self.driver, *args, **kwargs)
5258

59+
def click_if_visible(self, *args, **kwargs):
60+
page_actions.click_if_visible(self.driver, *args, **kwargs)
61+
62+
def click_active_element(self, *args, **kwargs):
63+
page_actions.click_active_element(self.driver, *args, **kwargs)
64+
5365
def send_keys(self, *args, **kwargs):
5466
page_actions.send_keys(self.driver, *args, **kwargs)
5567

@@ -114,6 +126,9 @@ def get_text(self, *args, **kwargs):
114126
def js_click(self, *args, **kwargs):
115127
return page_actions.js_click(self.driver, *args, **kwargs)
116128

129+
def is_attribute_present(self, *args, **kwargs):
130+
return page_actions.has_attribute(self.driver, *args, **kwargs)
131+
117132
def get_active_element_css(self, *args, **kwargs):
118133
return js_utils.get_active_element_css(self.driver, *args, **kwargs)
119134

@@ -128,3 +143,26 @@ def get_user_agent(self, *args, **kwargs):
128143

129144
def highlight(self, *args, **kwargs):
130145
js_utils.highlight(self.driver, *args, **kwargs)
146+
147+
def set_wire_proxy(self, string):
148+
"""Set a proxy server for selenium-wire mode ("--wire")
149+
Examples: (ONLY avilable if using selenium-wire mode!)
150+
driver.set_wire_proxy("SERVER:PORT")
151+
driver.set_wire_proxy("socks5://SERVER:PORT")
152+
driver.set_wire_proxy("USERNAME:PASSWORD@SERVER:PORT")
153+
"""
154+
the_http = "http"
155+
the_https = "https"
156+
if string.startswith("socks4://"):
157+
the_http = "socks4"
158+
the_https = "socks4"
159+
elif string.startswith("socks5://"):
160+
the_http = "socks5"
161+
the_https = "socks5"
162+
string = string.split("//")[-1]
163+
if hasattr(self.driver, "proxy"):
164+
self.driver.proxy = {
165+
"http": "%s://%s" % (the_http, string),
166+
"https": "%s://%s" % (the_https, string),
167+
"no_proxy": "localhost,127.0.0.1",
168+
}

seleniumbase/fixtures/page_actions.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1533,6 +1533,27 @@ def click_link(driver, link_text, timeout=settings.SMALL_TIMEOUT):
15331533
element.click()
15341534

15351535

1536+
def click_if_visible(
1537+
driver, selector, by="css selector", timeout=0
1538+
):
1539+
selector, by = page_utils.recalculate_selector(selector, by)
1540+
if is_element_visible(driver, selector, by=by):
1541+
click(driver, selector, by=by, timeout=1)
1542+
elif timeout > 0:
1543+
try:
1544+
wait_for_element_visible(
1545+
driver, selector, by=by, timeout=timeout
1546+
)
1547+
except Exception:
1548+
pass
1549+
if is_element_visible(driver, selector, by=by):
1550+
click(driver, selector, by=by, timeout=1)
1551+
1552+
1553+
def click_active_element(driver):
1554+
driver.execute_script("document.activeElement.click();")
1555+
1556+
15361557
def js_click(
15371558
driver, selector, by="css selector", timeout=settings.SMALL_TIMEOUT
15381559
):
@@ -1611,6 +1632,15 @@ def submit(driver, selector, by="css selector"):
16111632
element.submit()
16121633

16131634

1635+
def has_attribute(
1636+
driver, selector, attribute, value=None, by="css selector"
1637+
):
1638+
selector, by = page_utils.recalculate_selector(selector, by)
1639+
return is_attribute_present(
1640+
driver, selector, attribute, value=value, by=by
1641+
)
1642+
1643+
16141644
def assert_element_visible(
16151645
driver, selector, by="css selector", timeout=settings.SMALL_TIMEOUT
16161646
):

0 commit comments

Comments
 (0)