@@ -175,13 +175,84 @@ def click(self, selector, by=By.CSS_SELECTOR, timeout=None, delay=0):
175
175
else :
176
176
self .__js_click (selector , by = by )
177
177
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
178
205
# Normal click
179
206
element .click ()
180
- except ( StaleElementReferenceException , ENI_Exception ) :
207
+ except StaleElementReferenceException :
181
208
self .wait_for_ready_state_complete ()
182
209
time .sleep (0.16 )
183
210
element = page_actions .wait_for_element_visible (
184
211
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 )
185
256
if self .browser == "safari" :
186
257
if by == By .LINK_TEXT :
187
258
self .__jquery_click (selector , by = by )
0 commit comments