Skip to content

Commit 6959483

Browse files
authored
Merge pull request #23 from levi-rs/add-find-write
Add find_elements to waiter
2 parents 2450902 + c00c175 commit 6959483

File tree

2 files changed

+59
-0
lines changed

2 files changed

+59
-0
lines changed

explicit/waiter.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,30 @@ def find_element(driver, elem_path, by=CSS, timeout=TIMEOUT, poll_frequency=0.5)
4242
return wait.until(EC.presence_of_element_located((by, elem_path)))
4343

4444

45+
def find_elements(driver, elem_path, by=CSS, timeout=TIMEOUT, poll_frequency=0.5):
46+
""" Find and return all elements once located
47+
48+
find_elements locates all elements on the page, waiting
49+
for up to timeout seconds. The elements, when located,
50+
are returned. If not located, a TimeoutException is raised.
51+
52+
Args:
53+
driver (selenium webdriver or element): A driver or element
54+
elem_path (str): String used to located the element
55+
by (selenium By): Selenium By reference
56+
timeout (int): Selenium Wait timeout, in seconds
57+
poll_frequency (float): Selenium Wait polling frequency, in seconds
58+
59+
Returns:
60+
list of elements: Selenium element
61+
62+
Raises:
63+
TimeoutException: Raised when target element isn't located
64+
"""
65+
wait = WebDriverWait(driver, timeout, poll_frequency)
66+
return wait.until(EC.presence_of_all_elements_located((by, elem_path)))
67+
68+
4569
def find_write(driver, elem_path, write_str, clear_first=True, send_enter=False,
4670
by=CSS, timeout=TIMEOUT, poll_frequency=0.5):
4771
""" Find a writable element and write to it

tests/test_waiter.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,41 @@ def test_find_element_with_non_defaults(driver, element):
4444
mock.call(By.XPATH, mock_xpath_path)]
4545

4646

47+
def test_find_elements_with_defaults(driver, element):
48+
""" Verify the waiter can find and return all elements
49+
"""
50+
mock_css_path = "div.mock-css-path"
51+
52+
driver.find_elements.side_effect = [None, [element, element]]
53+
54+
elem_list = waiter.find_elements(driver, mock_css_path)
55+
56+
assert driver.find_elements.called
57+
assert isinstance(elem_list, list)
58+
assert all(map(lambda x: x is element, elem_list))
59+
assert len(driver.mock_calls) == 2
60+
assert driver.find_elements.call_args_list == [mock.call(CSS, mock_css_path),
61+
mock.call(CSS, mock_css_path)]
62+
63+
64+
def test_find_elements_with_non_defaults(driver, element):
65+
""" Verify the waiter can find and return all elements when using
66+
non-default kwargs
67+
"""
68+
mock_xpath_path = "div[@id=mock-id]"
69+
70+
driver.find_elements.side_effect = [None, [element, element]]
71+
72+
elem_list = waiter.find_elements(driver, mock_xpath_path, by=By.XPATH)
73+
74+
assert driver.find_elements.called
75+
assert isinstance(elem_list, list)
76+
assert all(map(lambda x: x is element, elem_list))
77+
assert len(driver.mock_calls) == 2
78+
assert driver.find_elements.call_args_list == [mock.call(By.XPATH, mock_xpath_path),
79+
mock.call(By.XPATH, mock_xpath_path)]
80+
81+
4782
def test_find_write_with_defaults(driver, element):
4883
""" Verify the waiter can find and write to an element, using
4984
default kwargs

0 commit comments

Comments
 (0)