Skip to content

Commit d341191

Browse files
committed
Prevent "StaleElementReferenceException" with "js_click()"
1 parent c613b2d commit d341191

File tree

1 file changed

+22
-4
lines changed

1 file changed

+22
-4
lines changed

seleniumbase/fixtures/base_case.py

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5783,14 +5783,32 @@ def js_click(
57835783
self.__js_click_element(element)
57845784
except Exception:
57855785
self.wait_for_ready_state_complete()
5786+
time.sleep(0.05)
57865787
element = self.wait_for_element_present(
57875788
selector, by, timeout=settings.SMALL_TIMEOUT
57885789
)
5789-
time.sleep(0.05)
5790-
if self.is_element_clickable(selector):
5791-
self.__element_click(element)
5790+
if (
5791+
self.is_element_visible(selector)
5792+
and self.is_element_clickable(selector)
5793+
):
5794+
try:
5795+
self.__element_click(element)
5796+
except Exception:
5797+
try:
5798+
self.__js_click_element(element)
5799+
except Exception:
5800+
element = self.wait_for_element_present(
5801+
selector, by, timeout=settings.MINI_TIMEOUT
5802+
)
5803+
self.__js_click_element(element)
57925804
else:
5793-
self.__js_click_element(element)
5805+
try:
5806+
self.__js_click_element(element)
5807+
except Exception:
5808+
element = self.wait_for_element_present(
5809+
selector, by, timeout=settings.MINI_TIMEOUT
5810+
)
5811+
self.__js_click_element(element)
57945812
else:
57955813
if ":contains\\(" not in css_selector:
57965814
self.__js_click_all(selector, by=by)

0 commit comments

Comments
 (0)