Skip to content

Commit 813ff3d

Browse files
committed
Simplify hover actions
1 parent a811e87 commit 813ff3d

File tree

3 files changed

+42
-36
lines changed

3 files changed

+42
-36
lines changed

help_docs/method_summary.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,9 @@ self.is_element_in_an_iframe(selector, by="css selector")
151151

152152
self.switch_to_frame_of_element(selector, by="css selector")
153153

154-
self.hover_on_element(selector, by="css selector")
154+
self.hover(selector, by="css selector", timeout=None)
155+
# Duplicates: self.hover_on_element(selector, by="css selector", timeout=None)
156+
# self.hover_over_element(selector, by="css selector", timeout=None)
155157

156158
self.hover_and_click(
157159
hover_selector, click_selector,

seleniumbase/fixtures/base_case.py

Lines changed: 37 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2243,50 +2243,34 @@ def switch_to_frame_of_element(self, selector, by="css selector"):
22432243
"element {%s}!" % selector
22442244
)
22452245

2246-
def hover_on_element(self, selector, by="css selector"):
2246+
def hover(self, selector, by="css selector", timeout=None):
22472247
self.__check_scope()
2248+
if not timeout:
2249+
timeout = settings.SMALL_TIMEOUT
2250+
if self.timeout_multiplier and timeout == settings.SMALL_TIMEOUT:
2251+
timeout = self.__get_new_timeout(timeout)
22482252
original_selector = selector
22492253
original_by = by
22502254
selector, by = self.__recalculate_selector(selector, by)
22512255
self.wait_for_element_visible(
2252-
original_selector, by=original_by, timeout=settings.SMALL_TIMEOUT
2256+
original_selector, by=original_by, timeout=timeout
22532257
)
22542258
self.__demo_mode_highlight_if_active(original_selector, original_by)
22552259
self.scroll_to(selector, by=by)
22562260
time.sleep(0.05) # Settle down from scrolling before hovering
2257-
if self.browser != "chrome":
2258-
return page_actions.hover_on_element(self.driver, selector, by)
2259-
# Using Chrome
2260-
# (Pure hover actions won't work on early chromedriver versions)
2261-
try:
2262-
return page_actions.hover_on_element(self.driver, selector, by)
2263-
except WebDriverException:
2264-
driver_capabilities = self.driver.capabilities
2265-
if "version" in driver_capabilities:
2266-
chrome_version = driver_capabilities["version"]
2267-
else:
2268-
chrome_version = driver_capabilities["browserVersion"]
2269-
major_chrome_version = chrome_version.split(".")[0]
2270-
chrome_dict = self.driver.capabilities["chrome"]
2271-
chromedriver_version = chrome_dict["chromedriverVersion"]
2272-
chromedriver_version = chromedriver_version.split(" ")[0]
2273-
major_chromedriver_version = chromedriver_version.split(".")[0]
2274-
install_sb = (
2275-
"seleniumbase get chromedriver %s" % major_chrome_version
2276-
)
2277-
if int(major_chromedriver_version) < int(major_chrome_version):
2278-
# Upgrading the driver is required for performing hover actions
2279-
message = (
2280-
"You need a newer version of\n"
2281-
"chromedriver to perform hover actions!\n"
2282-
"Your version of chromedriver is: %s\n"
2283-
"And your version of Chrome is: %s\n"
2284-
"You can fix this issue by running:\n>>> %s\n"
2285-
% (chromedriver_version, chrome_version, install_sb)
2286-
)
2287-
raise Exception(message)
2288-
else:
2289-
raise
2261+
element = page_actions.hover_on_element(self.driver, selector, by)
2262+
if self.recorder_mode:
2263+
url = self.get_current_url()
2264+
if url and len(url) > 0:
2265+
if ("http:") in url or ("https:") in url or ("file:") in url:
2266+
if self.get_session_storage_item("pause_recorder") == "no":
2267+
if by == By.XPATH:
2268+
selector = original_selector
2269+
time_stamp = self.execute_script("return Date.now();")
2270+
origin = self.get_origin()
2271+
action = ["hover", selector, origin, time_stamp]
2272+
self.__extra_actions.append(action)
2273+
return element
22902274

22912275
def hover_and_click(
22922276
self,
@@ -7589,6 +7573,24 @@ def click_partial_link(self, partial_link_text, timeout=None):
75897573
timeout = self.__get_new_timeout(timeout)
75907574
self.click_partial_link_text(partial_link_text, timeout=timeout)
75917575

7576+
def hover_on_element(self, selector, by="css selector", timeout=None):
7577+
"""Same as self.hover()"""
7578+
self.__check_scope()
7579+
if not timeout:
7580+
timeout = settings.SMALL_TIMEOUT
7581+
if self.timeout_multiplier and timeout == settings.SMALL_TIMEOUT:
7582+
timeout = self.__get_new_timeout(timeout)
7583+
return self.hover(selector, by=by, timeout=timeout)
7584+
7585+
def hover_over_element(self, selector, by="css selector", timeout=None):
7586+
"""Same as self.hover()"""
7587+
self.__check_scope()
7588+
if not timeout:
7589+
timeout = settings.SMALL_TIMEOUT
7590+
if self.timeout_multiplier and timeout == settings.SMALL_TIMEOUT:
7591+
timeout = self.__get_new_timeout(timeout)
7592+
return self.hover(selector, by=by, timeout=timeout)
7593+
75927594
def wait_for_element_visible(
75937595
self, selector, by="css selector", timeout=None
75947596
):

seleniumbase/fixtures/page_actions.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ def hover_on_element(driver, selector, by="css selector"):
174174
element = driver.find_element(by=by, value=selector)
175175
hover = ActionChains(driver).move_to_element(element)
176176
hover.perform()
177+
return element
177178

178179

179180
def hover_element(driver, element):
@@ -182,6 +183,7 @@ def hover_element(driver, element):
182183
"""
183184
hover = ActionChains(driver).move_to_element(element)
184185
hover.perform()
186+
return element
185187

186188

187189
def timeout_exception(exception, message):

0 commit comments

Comments
 (0)