Skip to content

Commit 8d18333

Browse files
committed
Improve and add driver methods
1 parent 1e219ce commit 8d18333

File tree

3 files changed

+64
-1
lines changed

3 files changed

+64
-1
lines changed

seleniumbase/core/browser_launcher.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,14 +108,18 @@ def make_driver_executable_if_not(driver_path):
108108
def extend_driver(driver):
109109
# Extend the driver with new methods
110110
driver.default_find_element = driver.find_element
111+
driver.default_find_elements = driver.find_elements
111112
DM = sb_driver.DriverMethods(driver)
112113
driver.find_element = DM.find_element
114+
driver.find_elements = DM.find_elements
113115
driver.locator = DM.locator
114116
page = types.SimpleNamespace()
115117
page.open = DM.open_url
116118
page.click = DM.click
117119
page.send_keys = DM.send_keys
120+
page.press_keys = DM.press_keys
118121
page.type = DM.update_text
122+
page.submit = DM.submit
119123
page.assert_element = DM.assert_element_visible
120124
page.assert_element_present = DM.assert_element_present
121125
page.assert_element_not_visible = DM.assert_element_not_visible
@@ -131,6 +135,9 @@ def extend_driver(driver):
131135
page.is_text_visible = DM.is_text_visible
132136
page.is_exact_text_visible = DM.is_exact_text_visible
133137
page.get_text = DM.get_text
138+
page.find_element = DM.find_element
139+
page.find_elements = DM.find_elements
140+
page.locator = DM.locator
134141
driver.page = page
135142
js = types.SimpleNamespace()
136143
js.js_click = DM.js_click
@@ -142,8 +149,11 @@ def extend_driver(driver):
142149
driver.js = js
143150
driver.open = DM.open_url
144151
driver.click = DM.click
152+
driver.click_link = DM.click_link
145153
driver.send_keys = DM.send_keys
154+
driver.press_keys = DM.press_keys
146155
driver.type = DM.update_text
156+
driver.submit = DM.submit
147157
driver.assert_element = DM.assert_element_visible
148158
driver.assert_element_present = DM.assert_element_present
149159
driver.assert_element_not_visible = DM.assert_element_not_visible

seleniumbase/core/sb_driver.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,26 @@ class DriverMethods():
88
def __init__(self, driver):
99
self.driver = driver
1010

11-
def find_element(self, by, value=None):
11+
def find_element(self, by=None, value=None):
1212
if not value:
1313
value = by
1414
by = "css selector"
15+
elif not by:
16+
by = "css selector"
1517
else:
1618
value, by = page_utils.swap_selector_and_by_if_reversed(value, by)
1719
return self.driver.default_find_element(by=by, value=value)
1820

21+
def find_elements(self, by=None, value=None):
22+
if not value:
23+
value = by
24+
by = "css selector"
25+
elif not by:
26+
by = "css selector"
27+
else:
28+
value, by = page_utils.swap_selector_and_by_if_reversed(value, by)
29+
return self.driver.default_find_elements(by=by, value=value)
30+
1931
def locator(self, selector, by=None):
2032
if not by:
2133
by = "css selector"
@@ -35,12 +47,21 @@ def open_url(self, *args, **kwargs):
3547
def click(self, *args, **kwargs):
3648
page_actions.click(self.driver, *args, **kwargs)
3749

50+
def click_link(self, *args, **kwargs):
51+
page_actions.click_link(self.driver, *args, **kwargs)
52+
3853
def send_keys(self, *args, **kwargs):
3954
page_actions.send_keys(self.driver, *args, **kwargs)
4055

56+
def press_keys(self, *args, **kwargs):
57+
page_actions.press_keys(self.driver, *args, **kwargs)
58+
4159
def update_text(self, *args, **kwargs):
4260
page_actions.update_text(self.driver, *args, **kwargs)
4361

62+
def submit(self, *args, **kwargs):
63+
page_actions.submit(self.driver, *args, **kwargs)
64+
4465
def assert_element_visible(self, *args, **kwargs):
4566
page_actions.assert_element_visible(self.driver, *args, **kwargs)
4667

seleniumbase/fixtures/page_actions.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
from selenium.common.exceptions import NoSuchWindowException
2929
from selenium.common.exceptions import StaleElementReferenceException
3030
from selenium.webdriver.common.action_chains import ActionChains
31+
from selenium.webdriver.common.keys import Keys
3132
from seleniumbase.common.exceptions import LinkTextNotFoundException
3233
from seleniumbase.common.exceptions import TextNotVisibleException
3334
from seleniumbase.config import settings
@@ -1525,6 +1526,13 @@ def click(driver, selector, by="css selector", timeout=settings.SMALL_TIMEOUT):
15251526
element.click()
15261527

15271528

1529+
def click_link(driver, link_text, timeout=settings.SMALL_TIMEOUT):
1530+
element = wait_for_element_clickable(
1531+
driver, link_text, by="link text", timeout=timeout
1532+
)
1533+
element.click()
1534+
1535+
15281536
def js_click(
15291537
driver, selector, by="css selector", timeout=settings.SMALL_TIMEOUT
15301538
):
@@ -1564,6 +1572,22 @@ def send_keys(
15641572
element.submit()
15651573

15661574

1575+
def press_keys(
1576+
driver, selector, text, by="css selector", timeout=settings.LARGE_TIMEOUT
1577+
):
1578+
selector, by = page_utils.recalculate_selector(selector, by)
1579+
element = wait_for_element_clickable(
1580+
driver, selector, by=by, timeout=timeout
1581+
)
1582+
if not text.endswith("\n"):
1583+
for key in text:
1584+
element.send_keys(key)
1585+
else:
1586+
for key in text[:-1]:
1587+
element.send_keys(key)
1588+
element.send_keys(Keys.RETURN)
1589+
1590+
15671591
def update_text(
15681592
driver, selector, text, by="css selector", timeout=settings.LARGE_TIMEOUT
15691593
):
@@ -1579,6 +1603,14 @@ def update_text(
15791603
element.submit()
15801604

15811605

1606+
def submit(driver, selector, by="css selector"):
1607+
selector, by = page_utils.recalculate_selector(selector, by)
1608+
element = wait_for_element_clickable(
1609+
driver, selector, by=by, timeout=settings.SMALL_TIMEOUT
1610+
)
1611+
element.submit()
1612+
1613+
15821614
def assert_element_visible(
15831615
driver, selector, by="css selector", timeout=settings.SMALL_TIMEOUT
15841616
):

0 commit comments

Comments
 (0)