Skip to content

Commit 6c11ace

Browse files
committed
Add hover_and_double_click() method
1 parent c4781d7 commit 6c11ace

File tree

3 files changed

+57
-0
lines changed

3 files changed

+57
-0
lines changed

help_docs/method_summary.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,9 @@ self.hover_on_element(selector, by=By.CSS_SELECTOR)
230230
self.hover_and_click(hover_selector, click_selector,
231231
hover_by=By.CSS_SELECTOR, click_by=By.CSS_SELECTOR, timeout=settings.SMALL_TIMEOUT)
232232

233+
self.hover_and_double_click(hover_selector, click_selector,
234+
hover_by=By.CSS_SELECTOR, click_by=By.CSS_SELECTOR, timeout=settings.SMALL_TIMEOUT)
235+
233236
self.select_option_by_text(dropdown_selector, option,
234237
dropdown_by=By.CSS_SELECTOR, timeout=settings.SMALL_TIMEOUT)
235238

seleniumbase/fixtures/base_case.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1987,6 +1987,35 @@ def hover_and_click(self, hover_selector, click_selector,
19871987
self.__demo_mode_pause_if_active(tiny=True)
19881988
return element
19891989

1990+
def hover_and_double_click(self, hover_selector, click_selector,
1991+
hover_by=By.CSS_SELECTOR,
1992+
click_by=By.CSS_SELECTOR,
1993+
timeout=settings.SMALL_TIMEOUT):
1994+
""" When you want to hover over an element or dropdown menu,
1995+
and then double-click an element that appears after that. """
1996+
if self.timeout_multiplier and timeout == settings.SMALL_TIMEOUT:
1997+
timeout = self.__get_new_timeout(timeout)
1998+
hover_selector, hover_by = self.__recalculate_selector(
1999+
hover_selector, hover_by)
2000+
hover_selector = self.convert_to_css_selector(
2001+
hover_selector, hover_by)
2002+
click_selector, click_by = self.__recalculate_selector(
2003+
click_selector, click_by)
2004+
hover_element = self.wait_for_element_visible(
2005+
hover_selector, by=hover_by, timeout=timeout)
2006+
self.__demo_mode_highlight_if_active(hover_selector, hover_by)
2007+
self.scroll_to(hover_selector, by=hover_by)
2008+
pre_action_url = self.driver.current_url
2009+
click_element = page_actions.hover_element_and_double_click(
2010+
self.driver, hover_element, click_selector,
2011+
click_by=By.CSS_SELECTOR, timeout=timeout)
2012+
if self.demo_mode:
2013+
if self.driver.current_url != pre_action_url:
2014+
self.__demo_mode_pause_if_active()
2015+
else:
2016+
self.__demo_mode_pause_if_active(tiny=True)
2017+
return click_element
2018+
19902019
def __select_option(self, dropdown_selector, option,
19912020
dropdown_by=By.CSS_SELECTOR, option_by="text",
19922021
timeout=settings.SMALL_TIMEOUT):

seleniumbase/fixtures/page_actions.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,31 @@ def hover_element_and_click(driver, element, click_selector,
158158
(click_selector, timeout))
159159

160160

161+
def hover_element_and_double_click(driver, element, click_selector,
162+
click_by=By.CSS_SELECTOR,
163+
timeout=settings.SMALL_TIMEOUT):
164+
start_ms = time.time() * 1000.0
165+
stop_ms = start_ms + (timeout * 1000.0)
166+
hover = ActionChains(driver).move_to_element(element)
167+
hover.perform()
168+
for x in range(int(timeout * 10)):
169+
try:
170+
element_2 = driver.find_element(by=click_by, value=click_selector)
171+
actions = ActionChains(driver)
172+
actions.move_to_element(element_2)
173+
actions.double_click(element_2)
174+
actions.perform()
175+
return element_2
176+
except Exception:
177+
now_ms = time.time() * 1000.0
178+
if now_ms >= stop_ms:
179+
break
180+
time.sleep(0.1)
181+
raise NoSuchElementException(
182+
"Element {%s} was not present after %s seconds!" %
183+
(click_selector, timeout))
184+
185+
161186
def wait_for_element_present(driver, selector, by=By.CSS_SELECTOR,
162187
timeout=settings.LARGE_TIMEOUT):
163188
"""

0 commit comments

Comments
 (0)