@@ -48,6 +48,7 @@ def test_anything(self):
4848from seleniumbase .fixtures import page_utils
4949from seleniumbase .fixtures import xpath_to_css
5050from selenium .common .exceptions import (StaleElementReferenceException ,
51+ MoveTargetOutOfBoundsException ,
5152 WebDriverException )
5253from selenium .common import exceptions as selenium_exceptions
5354try :
@@ -122,17 +123,18 @@ def click(self, selector, by=By.CSS_SELECTOR,
122123 element = page_actions .wait_for_element_visible (
123124 self .driver , selector , by , timeout = timeout )
124125 element .click ()
125- except WebDriverException :
126+ except ( WebDriverException , MoveTargetOutOfBoundsException ) :
126127 self .wait_for_ready_state_complete ()
127- if not by == By .LINK_TEXT :
128- # Only use a JavaScript click if not clicking by Link Text
128+ try :
129129 self .__js_click (selector , by = by )
130- else :
131- # One more attempt to click on the element
132- element = page_actions .wait_for_element_visible (
133- self .driver , selector , by , timeout = timeout )
134- element .click ()
135-
130+ except Exception :
131+ try :
132+ self .__jquery_click (selector , by = by )
133+ except Exception :
134+ # One more attempt to click on the element
135+ element = page_actions .wait_for_element_visible (
136+ self .driver , selector , by , timeout = timeout )
137+ element .click ()
136138 if settings .WAIT_FOR_RSC_ON_CLICKS :
137139 self .wait_for_ready_state_complete ()
138140 if self .demo_mode :
@@ -2431,6 +2433,18 @@ def __js_click(self, selector, by=By.CSS_SELECTOR):
24312433 % css_selector )
24322434 self .execute_script (script )
24332435
2436+ def __jquery_click (self , selector , by = By .CSS_SELECTOR ):
2437+ """ Clicks an element using jQuery. Different from using pure JS. """
2438+ selector , by = self .__recalculate_selector (selector , by )
2439+ self .wait_for_element_present (
2440+ selector , by = by , timeout = settings .SMALL_TIMEOUT )
2441+ if self .is_element_visible (selector , by = by ):
2442+ self .__demo_mode_highlight_if_active (selector , by )
2443+ selector = self .convert_to_css_selector (selector , by = by )
2444+ selector = self .__make_css_match_first_element_only (selector )
2445+ click_script = """jQuery('%s')[0].click()""" % selector
2446+ self .safe_execute_script (click_script )
2447+
24342448 def __get_href_from_link_text (self , link_text , hard_fail = True ):
24352449 href = self .get_link_attribute (link_text , "href" , hard_fail )
24362450 if not href :
0 commit comments