@@ -112,6 +112,7 @@ def __initialize_variables(self):
112
112
self.__frame_switch_layer = 0 # Used by Recorder-Mode
113
113
self.__frame_switch_multi = False # Used by Recorder-Mode
114
114
self.__last_saved_url = None # Used by Recorder-Mode
115
+ self.__uc_frame_layer = 0
115
116
self.__called_setup = False
116
117
self.__called_teardown = False
117
118
self.__start_time_ms = int(time.time() * 1000.0)
@@ -275,14 +276,25 @@ def open(self, url):
275
276
pass # Odd issue where the open did happen. Continue.
276
277
else:
277
278
raise
278
- if self.driver.current_url == pre_action_url and pre_action_url != url:
279
+ if (
280
+ self.undetectable
281
+ or (
282
+ self.driver.current_url == pre_action_url
283
+ and pre_action_url != url
284
+ )
285
+ ):
279
286
time.sleep(0.1) # Make sure load happens
280
287
if settings.WAIT_FOR_RSC_ON_PAGE_LOADS:
281
- self.wait_for_ready_state_complete()
288
+ if not self.undetectable:
289
+ self.wait_for_ready_state_complete()
290
+ else:
291
+ time.sleep(0.15)
282
292
if self.__needs_minimum_wait():
283
293
time.sleep(0.03) # Force a minimum wait, even if skipping waits.
284
294
if self.undetectable:
285
295
time.sleep(0.02)
296
+ if self.undetectable:
297
+ self.__uc_frame_layer = 0
286
298
if self.demo_mode:
287
299
if not js_utils.is_jquery_activated(self.driver):
288
300
js_utils.add_js_link(self.driver, constants.JQuery.MIN_JS)
@@ -383,7 +395,10 @@ def click(
383
395
except Exception:
384
396
pass
385
397
# Normal click
386
- element.click()
398
+ if not self.undetectable or self.__uc_frame_layer > 0:
399
+ element.click()
400
+ else:
401
+ element.uc_click()
387
402
except StaleElementReferenceException:
388
403
self.wait_for_ready_state_complete()
389
404
time.sleep(0.16)
@@ -401,7 +416,10 @@ def click(
401
416
if self.browser == "safari" and by == By.LINK_TEXT:
402
417
self.__jquery_click(selector, by=by)
403
418
else:
404
- element.click()
419
+ if not self.undetectable or self.__uc_frame_layer > 0:
420
+ element.click()
421
+ else:
422
+ element.uc_click()
405
423
except ENI_Exception:
406
424
self.wait_for_ready_state_complete()
407
425
time.sleep(0.1)
@@ -446,7 +464,10 @@ def click(
446
464
else:
447
465
self.__js_click(selector, by=by)
448
466
else:
449
- element.click()
467
+ if not self.undetectable or self.__uc_frame_layer > 0:
468
+ element.click()
469
+ else:
470
+ element.uc_click()
450
471
except MoveTargetOutOfBoundsException:
451
472
self.wait_for_ready_state_complete()
452
473
try:
@@ -463,7 +484,10 @@ def click(
463
484
timeout=timeout,
464
485
original_selector=original_selector,
465
486
)
466
- element.click()
487
+ if not self.undetectable or self.__uc_frame_layer > 0:
488
+ element.click()
489
+ else:
490
+ element.uc_click()
467
491
except WebDriverException as e:
468
492
if (
469
493
"cannot determine loading status" in e.msg
@@ -486,7 +510,10 @@ def click(
486
510
timeout=timeout,
487
511
original_selector=original_selector,
488
512
)
489
- element.click()
513
+ if not self.undetectable or self.__uc_frame_layer > 0:
514
+ element.click()
515
+ else:
516
+ element.uc_click()
490
517
latest_window_count = len(self.driver.window_handles)
491
518
if (
492
519
latest_window_count > pre_window_count
@@ -507,39 +534,39 @@ def click(
507
534
# switch to the last one if it exists.
508
535
self.switch_to_window(-1)
509
536
if settings.WAIT_FOR_RSC_ON_CLICKS:
510
- try:
511
- self.wait_for_ready_state_complete()
512
- except Exception:
513
- pass
514
- if self.__needs_minimum_wait():
515
- time.sleep(0.05)
516
- else:
517
- # A smaller subset of self.wait_for_ready_state_complete()
518
- try:
519
- self.wait_for_angularjs(timeout=settings.MINI_TIMEOUT)
520
- except Exception:
521
- pass
522
- if self.__needs_minimum_wait():
523
- time.sleep(0.026)
524
- if self.undetectable:
525
- time.sleep(0.024)
526
- try:
527
- if self.driver.current_url != pre_action_url:
528
- self.__ad_block_as_needed()
529
- self.__disable_beforeunload_as_needed()
530
- if self.__needs_minimum_wait():
531
- time.sleep(0.026)
532
- if self.undetectable:
533
- time.sleep(0.024)
534
- except Exception:
537
+ if not self.undetectable:
535
538
try:
536
539
self.wait_for_ready_state_complete()
537
540
except Exception:
538
541
pass
542
+ if self.__needs_minimum_wait():
543
+ time.sleep(0.05)
544
+ else:
545
+ time.sleep(0.08)
546
+ else:
547
+ if not self.undetectable:
548
+ # A smaller subset of self.wait_for_ready_state_complete()
549
+ try:
550
+ self.wait_for_angularjs(timeout=settings.MINI_TIMEOUT)
551
+ except Exception:
552
+ pass
539
553
if self.__needs_minimum_wait():
540
554
time.sleep(0.026)
541
- if self.undetectable:
542
- time.sleep(0.024)
555
+ try:
556
+ if self.driver.current_url != pre_action_url:
557
+ self.__ad_block_as_needed()
558
+ self.__disable_beforeunload_as_needed()
559
+ if self.__needs_minimum_wait():
560
+ time.sleep(0.026)
561
+ except Exception:
562
+ try:
563
+ self.wait_for_ready_state_complete()
564
+ except Exception:
565
+ pass
566
+ if self.__needs_minimum_wait():
567
+ time.sleep(0.026)
568
+ else:
569
+ time.sleep(0.08)
543
570
if self.demo_mode:
544
571
if self.driver.current_url != pre_action_url:
545
572
if not js_utils.is_jquery_activated(self.driver):
@@ -1384,7 +1411,10 @@ def click_link_text(self, link_text, timeout=None):
1384
1411
element = self.wait_for_link_text_visible(link_text, timeout=0.2)
1385
1412
self.__demo_mode_highlight_if_active(link_text, by="link text")
1386
1413
try:
1387
- element.click()
1414
+ if not self.undetectable or self.__uc_frame_layer > 0:
1415
+ element.click()
1416
+ else:
1417
+ element.uc_click()
1388
1418
except (
1389
1419
StaleElementReferenceException,
1390
1420
ENI_Exception,
@@ -1395,7 +1425,10 @@ def click_link_text(self, link_text, timeout=None):
1395
1425
element = self.wait_for_link_text_visible(
1396
1426
link_text, timeout=timeout
1397
1427
)
1398
- element.click()
1428
+ if not self.undetectable or self.__uc_frame_layer > 0:
1429
+ element.click()
1430
+ else:
1431
+ element.uc_click()
1399
1432
except Exception:
1400
1433
found_css = False
1401
1434
text_id = self.get_link_attribute(link_text, "id", False)
@@ -1432,7 +1465,10 @@ def click_link_text(self, link_text, timeout=None):
1432
1465
element = self.wait_for_link_text_visible(
1433
1466
link_text, timeout=settings.MINI_TIMEOUT
1434
1467
)
1435
- element.click()
1468
+ if not self.undetectable or self.__uc_frame_layer > 0:
1469
+ element.click()
1470
+ else:
1471
+ element.uc_click()
1436
1472
latest_window_count = len(self.driver.window_handles)
1437
1473
if (
1438
1474
latest_window_count > pre_window_count
@@ -1479,7 +1515,10 @@ def click_partial_link_text(self, partial_link_text, timeout=None):
1479
1515
if self.browser == "phantomjs":
1480
1516
if self.is_partial_link_text_visible(partial_link_text):
1481
1517
element = self.wait_for_partial_link_text(partial_link_text)
1482
- element.click()
1518
+ if not self.undetectable or self.__uc_frame_layer > 0:
1519
+ element.click()
1520
+ else:
1521
+ element.uc_click()
1483
1522
return
1484
1523
soup = self.get_beautiful_soup()
1485
1524
html_links = soup.fetch("a")
@@ -1519,7 +1558,10 @@ def click_partial_link_text(self, partial_link_text, timeout=None):
1519
1558
partial_link_text, by="link text"
1520
1559
)
1521
1560
try:
1522
- element.click()
1561
+ if not self.undetectable or self.__uc_frame_layer > 0:
1562
+ element.click()
1563
+ else:
1564
+ element.uc_click()
1523
1565
except (
1524
1566
StaleElementReferenceException,
1525
1567
ENI_Exception,
@@ -1530,7 +1572,10 @@ def click_partial_link_text(self, partial_link_text, timeout=None):
1530
1572
element = self.wait_for_partial_link_text(
1531
1573
partial_link_text, timeout=timeout
1532
1574
)
1533
- element.click()
1575
+ if not self.undetectable or self.__uc_frame_layer > 0:
1576
+ element.click()
1577
+ else:
1578
+ element.uc_click()
1534
1579
except Exception:
1535
1580
found_css = False
1536
1581
text_id = self.get_partial_link_text_attribute(
@@ -1575,7 +1620,10 @@ def click_partial_link_text(self, partial_link_text, timeout=None):
1575
1620
element = self.wait_for_partial_link_text(
1576
1621
partial_link_text, timeout=settings.MINI_TIMEOUT
1577
1622
)
1578
- element.click()
1623
+ if not self.undetectable or self.__uc_frame_layer > 0:
1624
+ element.click()
1625
+ else:
1626
+ element.uc_click()
1579
1627
latest_window_count = len(self.driver.window_handles)
1580
1628
if (
1581
1629
latest_window_count > pre_window_count
@@ -2317,6 +2365,8 @@ def switch_to_frame_of_element(self, selector, by="css selector"):
2317
2365
time.sleep(0.02)
2318
2366
try:
2319
2367
self.switch_to_frame(selector, timeout=1)
2368
+ if self.undetectable:
2369
+ self.__uc_frame_layer += 1
2320
2370
return selector
2321
2371
except Exception:
2322
2372
if self.is_element_present(selector, by=by):
@@ -3052,6 +3102,8 @@ def switch_to_frame(self, frame, timeout=None):
3052
3102
else:
3053
3103
if self.__needs_minimum_wait():
3054
3104
time.sleep(0.04)
3105
+ if self.undetectable:
3106
+ self.__uc_frame_layer += 1
3055
3107
if self.recorder_mode and self._rec_overrides_switch:
3056
3108
url = self.get_current_url()
3057
3109
if url and len(url) > 0:
@@ -3099,6 +3151,8 @@ def switch_to_default_content(self):
3099
3151
self.__extra_actions.append(action)
3100
3152
return
3101
3153
self.driver.switch_to.default_content()
3154
+ if self.undetectable:
3155
+ self.__uc_frame_layer = 0
3102
3156
3103
3157
def switch_to_parent_frame(self):
3104
3158
"""Brings driver control outside the current iframe.
@@ -3121,6 +3175,10 @@ def switch_to_parent_frame(self):
3121
3175
self.__extra_actions.append(action)
3122
3176
return
3123
3177
self.driver.switch_to.parent_frame()
3178
+ if self.undetectable:
3179
+ self.__uc_frame_layer -= 1
3180
+ if self.__uc_frame_layer < 0:
3181
+ self.__uc_frame_layer = 0
3124
3182
3125
3183
@contextmanager
3126
3184
def frame_switch(self, frame, timeout=None):
@@ -3135,7 +3193,13 @@ def frame_switch(self, frame, timeout=None):
3135
3193
if self.__frame_switch_layer >= 2:
3136
3194
self.__frame_switch_multi = True
3137
3195
self.switch_to_frame(frame, timeout=timeout)
3196
+ if self.undetectable:
3197
+ self.__uc_frame_layer += 1
3138
3198
yield
3199
+ if self.undetectable:
3200
+ self.__uc_frame_layer -= 1
3201
+ if self.__uc_frame_layer < 0:
3202
+ self.__uc_frame_layer = 0
3139
3203
self.switch_to_parent_frame()
3140
3204
if self.recorder_mode:
3141
3205
self.__frame_switch_layer -= 1
0 commit comments