@@ -48,6 +48,7 @@ def test_anything(self):
48
48
from seleniumbase .fixtures import page_utils
49
49
from seleniumbase .fixtures import xpath_to_css
50
50
from selenium .common .exceptions import (StaleElementReferenceException ,
51
+ MoveTargetOutOfBoundsException ,
51
52
WebDriverException )
52
53
from selenium .common import exceptions as selenium_exceptions
53
54
try :
@@ -122,17 +123,18 @@ def click(self, selector, by=By.CSS_SELECTOR,
122
123
element = page_actions .wait_for_element_visible (
123
124
self .driver , selector , by , timeout = timeout )
124
125
element .click ()
125
- except WebDriverException :
126
+ except ( WebDriverException , MoveTargetOutOfBoundsException ) :
126
127
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 :
129
129
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 ()
136
138
if settings .WAIT_FOR_RSC_ON_CLICKS :
137
139
self .wait_for_ready_state_complete ()
138
140
if self .demo_mode :
@@ -2431,6 +2433,18 @@ def __js_click(self, selector, by=By.CSS_SELECTOR):
2431
2433
% css_selector )
2432
2434
self .execute_script (script )
2433
2435
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
+
2434
2448
def __get_href_from_link_text (self , link_text , hard_fail = True ):
2435
2449
href = self .get_link_attribute (link_text , "href" , hard_fail )
2436
2450
if not href :
0 commit comments