@@ -167,6 +167,8 @@ def click(self, selector, by=By.CSS_SELECTOR, timeout=None, delay=0):
167
167
self .__demo_mode_pause_if_active ()
168
168
else :
169
169
self .__demo_mode_pause_if_active (tiny = True )
170
+ elif self .slow_mode :
171
+ self .__slow_mode_pause_if_active ()
170
172
171
173
def slow_click (self , selector , by = By .CSS_SELECTOR , timeout = None ):
172
174
""" Similar to click(), but pauses for a brief moment before clicking.
@@ -221,6 +223,8 @@ def double_click(self, selector, by=By.CSS_SELECTOR, timeout=None):
221
223
self .__demo_mode_pause_if_active ()
222
224
else :
223
225
self .__demo_mode_pause_if_active (tiny = True )
226
+ elif self .slow_mode :
227
+ self .__slow_mode_pause_if_active ()
224
228
225
229
def click_chain (self , selectors_list , by = By .CSS_SELECTOR ,
226
230
timeout = None , spacing = 0 ):
@@ -338,6 +342,8 @@ def update_text(self, selector, new_value, by=By.CSS_SELECTOR,
338
342
self .__demo_mode_pause_if_active ()
339
343
else :
340
344
self .__demo_mode_pause_if_active (tiny = True )
345
+ elif self .slow_mode :
346
+ self .__slow_mode_pause_if_active ()
341
347
342
348
def add_text (self , selector , text , by = By .CSS_SELECTOR , timeout = None ):
343
349
""" The more-reliable version of driver.send_keys()
@@ -384,6 +390,8 @@ def add_text(self, selector, text, by=By.CSS_SELECTOR, timeout=None):
384
390
self .__demo_mode_pause_if_active ()
385
391
else :
386
392
self .__demo_mode_pause_if_active (tiny = True )
393
+ elif self .slow_mode :
394
+ self .__slow_mode_pause_if_active ()
387
395
388
396
def send_keys (self , selector , text , by = By .CSS_SELECTOR , timeout = None ):
389
397
""" Same as add_text() """
@@ -437,13 +445,15 @@ def go_back(self):
437
445
if self .browser == "safari" :
438
446
self .driver .refresh ()
439
447
self .wait_for_ready_state_complete ()
448
+ self .__demo_mode_pause_if_active ()
440
449
441
450
def go_forward (self ):
442
451
self .__last_page_load_url = None
443
452
self .driver .forward ()
444
453
if self .browser == "safari" :
445
454
self .driver .refresh ()
446
455
self .wait_for_ready_state_complete ()
456
+ self .__demo_mode_pause_if_active ()
447
457
448
458
def is_element_present (self , selector , by = By .CSS_SELECTOR ):
449
459
selector , by = self .__recalculate_selector (selector , by )
@@ -626,6 +636,8 @@ def click_link_text(self, link_text, timeout=None):
626
636
self .__demo_mode_pause_if_active ()
627
637
else :
628
638
self .__demo_mode_pause_if_active (tiny = True )
639
+ elif self .slow_mode :
640
+ self .__slow_mode_pause_if_active ()
629
641
630
642
def click_link (self , link_text , timeout = None ):
631
643
""" Same as self.click_link_text() """
@@ -738,6 +750,8 @@ def click_partial_link_text(self, partial_link_text, timeout=None):
738
750
self .__demo_mode_pause_if_active ()
739
751
else :
740
752
self .__demo_mode_pause_if_active (tiny = True )
753
+ elif self .slow_mode :
754
+ self .__slow_mode_pause_if_active ()
741
755
742
756
def get_text (self , selector , by = By .CSS_SELECTOR , timeout = None ):
743
757
if not timeout :
@@ -1094,6 +1108,8 @@ def hover_and_click(self, hover_selector, click_selector,
1094
1108
self .__demo_mode_pause_if_active ()
1095
1109
else :
1096
1110
self .__demo_mode_pause_if_active (tiny = True )
1111
+ elif self .slow_mode :
1112
+ self .__slow_mode_pause_if_active ()
1097
1113
return element
1098
1114
1099
1115
def hover_and_double_click (self , hover_selector , click_selector ,
@@ -1141,6 +1157,8 @@ def hover_and_double_click(self, hover_selector, click_selector,
1141
1157
self .__demo_mode_pause_if_active ()
1142
1158
else :
1143
1159
self .__demo_mode_pause_if_active (tiny = True )
1160
+ elif self .slow_mode :
1161
+ self .__slow_mode_pause_if_active ()
1144
1162
return element
1145
1163
1146
1164
def __select_option (self , dropdown_selector , option ,
@@ -1184,6 +1202,8 @@ def __select_option(self, dropdown_selector, option,
1184
1202
self .__demo_mode_pause_if_active ()
1185
1203
else :
1186
1204
self .__demo_mode_pause_if_active (tiny = True )
1205
+ elif self .slow_mode :
1206
+ self .__slow_mode_pause_if_active ()
1187
1207
1188
1208
def select_option_by_text (self , dropdown_selector , option ,
1189
1209
dropdown_by = By .CSS_SELECTOR ,
@@ -1604,7 +1624,7 @@ def scroll_to(self, selector, by=By.CSS_SELECTOR, timeout=None):
1604
1624
timeout = settings .SMALL_TIMEOUT
1605
1625
if self .timeout_multiplier and timeout == settings .SMALL_TIMEOUT :
1606
1626
timeout = self .__get_new_timeout (timeout )
1607
- if self .demo_mode :
1627
+ if self .demo_mode or self . slow_mode :
1608
1628
self .slow_scroll_to (selector , by = by , timeout = timeout )
1609
1629
return
1610
1630
element = self .wait_for_element_visible (
@@ -3634,14 +3654,22 @@ def __make_css_match_first_element_only(self, selector):
3634
3654
3635
3655
def __demo_mode_pause_if_active (self , tiny = False ):
3636
3656
if self .demo_mode :
3657
+ wait_time = settings .DEFAULT_DEMO_MODE_TIMEOUT
3637
3658
if self .demo_sleep :
3638
3659
wait_time = float (self .demo_sleep )
3639
- else :
3640
- wait_time = settings .DEFAULT_DEMO_MODE_TIMEOUT
3641
3660
if not tiny :
3642
3661
time .sleep (wait_time )
3643
3662
else :
3644
3663
time .sleep (wait_time / 3.4 )
3664
+ elif self .slow_mode :
3665
+ self .__slow_mode_pause_if_active ()
3666
+
3667
+ def __slow_mode_pause_if_active (self ):
3668
+ if self .slow_mode :
3669
+ wait_time = settings .DEFAULT_DEMO_MODE_TIMEOUT
3670
+ if self .demo_sleep :
3671
+ wait_time = float (self .demo_sleep )
3672
+ time .sleep (wait_time )
3645
3673
3646
3674
def __demo_mode_scroll_if_active (self , selector , by ):
3647
3675
if self .demo_mode :
@@ -3651,6 +3679,19 @@ def __demo_mode_highlight_if_active(self, selector, by):
3651
3679
if self .demo_mode :
3652
3680
# Includes self.slow_scroll_to(selector, by=by) by default
3653
3681
self .highlight (selector , by = by )
3682
+ elif self .slow_mode :
3683
+ # Just do the slow scroll part of the highlight() method
3684
+ selector , by = self .__recalculate_selector (selector , by )
3685
+ element = self .wait_for_element_visible (
3686
+ selector , by = by , timeout = settings .SMALL_TIMEOUT )
3687
+ try :
3688
+ self .__slow_scroll_to_element (element )
3689
+ except (StaleElementReferenceException , ENI_Exception ):
3690
+ self .wait_for_ready_state_complete ()
3691
+ time .sleep (0.05 )
3692
+ element = self .wait_for_element_visible (
3693
+ selector , by = by , timeout = settings .SMALL_TIMEOUT )
3694
+ self .__slow_scroll_to_element (element )
3654
3695
3655
3696
def __scroll_to_element (self , element ):
3656
3697
js_utils .scroll_to_element (self .driver , element )
@@ -3781,6 +3822,7 @@ def setUp(self, masterqa_mode=False):
3781
3822
self ._testMethodName )
3782
3823
self .browser = sb_config .browser
3783
3824
self .data = sb_config .data
3825
+ self .slow_mode = sb_config .slow_mode
3784
3826
self .demo_mode = sb_config .demo_mode
3785
3827
self .demo_sleep = sb_config .demo_sleep
3786
3828
self .highlights = sb_config .highlights
@@ -3991,6 +4033,7 @@ def tearDown(self):
3991
4033
You'll need to add the following line to the subclass's tearDown():
3992
4034
super(SubClassOfBaseCase, self).tearDown()
3993
4035
"""
4036
+ self .__slow_mode_pause_if_active ()
3994
4037
has_exception = False
3995
4038
if sys .version_info [0 ] >= 3 and hasattr (self , '_outcome' ):
3996
4039
if hasattr (self ._outcome , 'errors' ) and self ._outcome .errors :
0 commit comments