Skip to content

Commit 9b918aa

Browse files
committed
Optimize "self.click()" - (handle some edge cases)
1 parent 23fe017 commit 9b918aa

File tree

1 file changed

+72
-1
lines changed

1 file changed

+72
-1
lines changed

seleniumbase/fixtures/base_case.py

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,13 +175,84 @@ def click(self, selector, by=By.CSS_SELECTOR, timeout=None, delay=0):
175175
else:
176176
self.__js_click(selector, by=by)
177177
else:
178+
href = None
179+
new_tab = False
180+
onclick = None
181+
try:
182+
if self.headless and element.tag_name == "a":
183+
# Handle a special case of opening a new tab (headless)
184+
href = element.get_attribute("href").strip()
185+
onclick = element.get_attribute("onclick")
186+
target = element.get_attribute("target")
187+
if target == "_blank":
188+
new_tab = True
189+
if new_tab and self.__looks_like_a_page_url(href):
190+
if onclick:
191+
try:
192+
self.execute_script(onclick)
193+
except Exception:
194+
pass
195+
current_window = self.driver.current_window_handle
196+
self.open_new_window()
197+
try:
198+
self.open(href)
199+
except Exception:
200+
pass
201+
self.switch_to_window(current_window)
202+
return
203+
except Exception:
204+
pass
178205
# Normal click
179206
element.click()
180-
except (StaleElementReferenceException, ENI_Exception):
207+
except StaleElementReferenceException:
181208
self.wait_for_ready_state_complete()
182209
time.sleep(0.16)
183210
element = page_actions.wait_for_element_visible(
184211
self.driver, selector, by, timeout=timeout)
212+
try:
213+
self.__scroll_to_element(element, selector, by)
214+
except Exception:
215+
pass
216+
if self.browser == "safari":
217+
if by == By.LINK_TEXT:
218+
self.__jquery_click(selector, by=by)
219+
else:
220+
self.__js_click(selector, by=by)
221+
else:
222+
element.click()
223+
except ENI_Exception:
224+
self.wait_for_ready_state_complete()
225+
time.sleep(0.1)
226+
element = page_actions.wait_for_element_visible(
227+
self.driver, selector, by, timeout=timeout)
228+
href = None
229+
new_tab = False
230+
onclick = None
231+
try:
232+
if element.tag_name == "a":
233+
# Handle a special case of opening a new tab (non-headless)
234+
href = element.get_attribute("href").strip()
235+
onclick = element.get_attribute("onclick")
236+
target = element.get_attribute("target")
237+
if target == "_blank":
238+
new_tab = True
239+
if new_tab and self.__looks_like_a_page_url(href):
240+
if onclick:
241+
try:
242+
self.execute_script(onclick)
243+
except Exception:
244+
pass
245+
current_window = self.driver.current_window_handle
246+
self.open_new_window()
247+
try:
248+
self.open(href)
249+
except Exception:
250+
pass
251+
self.switch_to_window(current_window)
252+
return
253+
except Exception:
254+
pass
255+
self.__scroll_to_element(element, selector, by)
185256
if self.browser == "safari":
186257
if by == By.LINK_TEXT:
187258
self.__jquery_click(selector, by=by)

0 commit comments

Comments
 (0)