Skip to content

Commit 2abdfa6

Browse files
committed
Time optimizations for different modes
1 parent ac0a730 commit 2abdfa6

File tree

1 file changed

+55
-17
lines changed

1 file changed

+55
-17
lines changed

seleniumbase/fixtures/base_case.py

Lines changed: 55 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,10 @@ def test_anything(self):
3232
"""
3333

3434
import codecs
35+
import fasteners
3536
import json
3637
import logging
38+
import math
3739
import os
3840
import re
3941
import shutil
@@ -169,6 +171,8 @@ def open(self, url):
169171
self.__check_browser()
170172
if self.__needs_minimum_wait():
171173
time.sleep(0.01)
174+
if self.undetectable:
175+
time.sleep(0.02)
172176
pre_action_url = None
173177
try:
174178
pre_action_url = self.driver.current_url
@@ -243,6 +247,8 @@ def open(self, url):
243247
self.wait_for_ready_state_complete()
244248
if self.__needs_minimum_wait():
245249
time.sleep(0.03) # Force a minimum wait, even if skipping waits.
250+
if self.undetectable:
251+
time.sleep(0.02)
246252
self.__demo_mode_pause_if_active()
247253

248254
def get(self, url):
@@ -289,6 +295,8 @@ def click(
289295
return
290296
if self.browser == "safari":
291297
self.wait_for_ready_state_complete()
298+
if self.__needs_minimum_wait():
299+
time.sleep(0.02)
292300
element = page_actions.wait_for_element_visible(
293301
self.driver,
294302
selector,
@@ -467,26 +475,34 @@ def click(
467475
except Exception:
468476
pass
469477
if self.__needs_minimum_wait():
470-
time.sleep(0.02)
478+
time.sleep(0.05)
471479
else:
472480
# A smaller subset of self.wait_for_ready_state_complete()
473481
try:
474482
self.wait_for_angularjs(timeout=settings.MINI_TIMEOUT)
475483
except Exception:
476484
pass
477485
if self.__needs_minimum_wait():
478-
time.sleep(0.01)
486+
time.sleep(0.025)
487+
if self.undetectable:
488+
time.sleep(0.025)
479489
try:
480490
if self.driver.current_url != pre_action_url:
481491
self.__ad_block_as_needed()
482492
self.__disable_beforeunload_as_needed()
493+
if self.__needs_minimum_wait():
494+
time.sleep(0.025)
495+
if self.undetectable:
496+
time.sleep(0.025)
483497
except Exception:
484498
try:
485499
self.wait_for_ready_state_complete()
486500
except Exception:
487501
pass
488502
if self.__needs_minimum_wait():
489-
time.sleep(0.02)
503+
time.sleep(0.025)
504+
if self.undetectable:
505+
time.sleep(0.025)
490506
if self.demo_mode:
491507
if self.driver.current_url != pre_action_url:
492508
self.__demo_mode_pause_if_active()
@@ -642,6 +658,8 @@ def update_text(
642658
self.__demo_mode_highlight_if_active(selector, by)
643659
if not self.demo_mode and not self.slow_mode:
644660
self.__scroll_to_element(element, selector, by)
661+
if self.__needs_minimum_wait():
662+
time.sleep(0.01)
645663
try:
646664
element.clear() # May need https://stackoverflow.com/a/50691625
647665
backspaces = Keys.BACK_SPACE * 42 # Is the answer to everything
@@ -703,6 +721,10 @@ def update_text(
703721
raise e
704722
if settings.WAIT_FOR_RSC_ON_PAGE_LOADS:
705723
self.wait_for_ready_state_complete()
724+
if self.__needs_minimum_wait():
725+
time.sleep(0.01)
726+
if self.undetectable:
727+
time.sleep(0.015)
706728
if (
707729
retry
708730
and element.get_attribute("value") != text
@@ -2880,11 +2902,16 @@ def switch_to_frame(self, frame, timeout=None):
28802902
timeout = settings.LARGE_TIMEOUT
28812903
if self.timeout_multiplier and timeout == settings.LARGE_TIMEOUT:
28822904
timeout = self.__get_new_timeout(timeout)
2905+
if self.__needs_minimum_wait():
2906+
time.sleep(0.03)
28832907
if type(frame) is str and self.is_element_visible(frame):
28842908
try:
28852909
self.scroll_to(frame, timeout=1)
28862910
except Exception:
28872911
pass
2912+
else:
2913+
if self.__needs_minimum_wait():
2914+
time.sleep(0.03)
28882915
if self.recorder_mode and self._rec_overrides_switch:
28892916
url = self.get_current_url()
28902917
if url and len(url) > 0:
@@ -2908,6 +2935,8 @@ def switch_to_frame(self, frame, timeout=None):
29082935
time.sleep(0.02)
29092936
page_actions.switch_to_frame(self.driver, frame, timeout)
29102937
self.wait_for_ready_state_complete()
2938+
if self.__needs_minimum_wait():
2939+
time.sleep(0.01)
29112940

29122941
def switch_to_default_content(self):
29132942
"""Brings driver control outside the current iframe.
@@ -3763,7 +3792,7 @@ def wait_for_ready_state_complete(self, timeout=None):
37633792
and hasattr(settings, "SKIP_JS_WAITS")
37643793
and settings.SKIP_JS_WAITS
37653794
):
3766-
time.sleep(0.03)
3795+
time.sleep(0.05)
37673796
return True
37683797

37693798
def wait_for_angularjs(self, timeout=None, **kwargs):
@@ -5041,6 +5070,10 @@ def highlight(self, selector, by="css selector", loops=None, scroll=True):
50415070
if self.browser == "ie":
50425071
loops = 1 # Override previous setting because IE is slow
50435072
loops = int(loops)
5073+
if self.headless or self.headless2 or self.xvfb:
5074+
# Headless modes have less need for highlighting elements.
5075+
# However, highlight() may be used as a sleep alternative.
5076+
loops = int(math.ceil(loops * 0.5))
50445077

50455078
o_bs = "" # original_box_shadow
50465079
try:
@@ -5615,13 +5648,16 @@ def ad_block(self):
56155648

56165649
def show_file_choosers(self):
56175650
"""Display hidden file-chooser input fields on sites if present."""
5651+
self.wait_for_ready_state_complete()
56185652
css_selector = 'input[type="file"]'
56195653
try:
56205654
self.wait_for_element_present(
56215655
css_selector, timeout=settings.MINI_TIMEOUT
56225656
)
56235657
except Exception:
56245658
pass
5659+
if self.__needs_minimum_wait():
5660+
time.sleep(0.05)
56255661
try:
56265662
self.show_elements(css_selector)
56275663
except Exception:
@@ -5701,13 +5737,19 @@ def get_unique_links(self):
57015737
"a"->"href", "img"->"src", "link"->"href", and "script"->"src".
57025738
"""
57035739
self.wait_for_ready_state_complete()
5740+
if self.__needs_minimum_wait():
5741+
time.sleep(0.05)
5742+
if self.undetectable:
5743+
time.sleep(0.05)
57045744
try:
57055745
self.wait_for_element_present("body", timeout=1.5)
57065746
self.wait_for_element_visible("body", timeout=1.5)
57075747
except Exception:
57085748
pass
57095749
if self.__needs_minimum_wait():
57105750
time.sleep(0.25)
5751+
if self.undetectable:
5752+
time.sleep(0.123)
57115753
soup = self.get_beautiful_soup(self.get_page_source())
57125754
page_url = self.get_current_url()
57135755
links = page_utils._get_unique_links(page_url, soup)
@@ -11558,7 +11600,7 @@ def check_window(
1155811600
"""
1155911601
self.wait_for_ready_state_complete()
1156011602
if self.__needs_minimum_wait():
11561-
time.sleep(0.02) # Force a minimum wait, even if skipping waits.
11603+
time.sleep(0.05) # Force a minimum wait, even if skipping waits.
1156211604
try:
1156311605
self.wait_for_element_visible(
1156411606
"body", timeout=settings.MINI_TIMEOUT
@@ -11792,8 +11834,6 @@ def check_window(
1179211834

1179311835
def __get_new_timeout(self, timeout):
1179411836
"""When using --timeout_multiplier=#.#"""
11795-
import math
11796-
1179711837
self.__check_scope()
1179811838
try:
1179911839
timeout_multiplier = float(self.timeout_multiplier)
@@ -11889,7 +11929,7 @@ def deferred_assert_element(
1188911929
try:
1189011930
url = self.get_current_url()
1189111931
if url == self.__last_url_of_deferred_assert:
11892-
timeout = 1 # Was already on page (full wait not needed)
11932+
timeout = 0.6 # Was already on page (full wait not needed)
1189311933
else:
1189411934
self.__last_url_of_deferred_assert = url
1189511935
except Exception:
@@ -11930,7 +11970,7 @@ def deferred_assert_element_present(
1193011970
try:
1193111971
url = self.get_current_url()
1193211972
if url == self.__last_url_of_deferred_assert:
11933-
timeout = 1 # Was already on page (full wait not needed)
11973+
timeout = 0.6 # Was already on page (full wait not needed)
1193411974
else:
1193511975
self.__last_url_of_deferred_assert = url
1193611976
except Exception:
@@ -11971,7 +12011,7 @@ def deferred_assert_text(
1197112011
try:
1197212012
url = self.get_current_url()
1197312013
if url == self.__last_url_of_deferred_assert:
11974-
timeout = 1 # Was already on page (full wait not needed)
12014+
timeout = 0.6 # Was already on page (full wait not needed)
1197512015
else:
1197612016
self.__last_url_of_deferred_assert = url
1197712017
except Exception:
@@ -12013,7 +12053,7 @@ def deferred_assert_exact_text(
1201312053
try:
1201412054
url = self.get_current_url()
1201512055
if url == self.__last_url_of_deferred_assert:
12016-
timeout = 1 # Was already on page (full wait not needed)
12056+
timeout = 0.6 # Was already on page (full wait not needed)
1201712057
else:
1201812058
self.__last_url_of_deferred_assert = url
1201912059
except Exception:
@@ -12250,7 +12290,7 @@ def __click_with_offset(
1225012290

1225112291
self.wait_for_ready_state_complete()
1225212292
if self.__needs_minimum_wait():
12253-
time.sleep(0.02) # Force a minimum wait, even if skipping waits.
12293+
time.sleep(0.03) # Force a minimum wait, even if skipping waits.
1225412294
if not timeout:
1225512295
timeout = settings.SMALL_TIMEOUT
1225612296
if self.timeout_multiplier and timeout == settings.SMALL_TIMEOUT:
@@ -12300,7 +12340,9 @@ def __click_with_offset(
1230012340
self.driver.execute_script(scroll_script)
1230112341
time.sleep(0.1)
1230212342
except Exception:
12303-
pass
12343+
time.sleep(0.05)
12344+
if self.__needs_minimum_wait():
12345+
time.sleep(0.05)
1230412346
try:
1230512347
if selenium4_or_newer and not center:
1230612348
element_rect = element.rect
@@ -12937,8 +12979,6 @@ def setUp(self, masterqa_mode=False):
1293712979
self.dashboard = sb_config.dashboard
1293812980
self._dash_initialized = sb_config._dashboard_initialized
1293912981
if self.dashboard and self._multithreaded:
12940-
import fasteners
12941-
1294212982
self.dash_lock = fasteners.InterProcessLock(
1294312983
constants.Dashboard.LOCKFILE
1294412984
)
@@ -13693,8 +13733,6 @@ def __create_log_path_as_needed(self, test_logpath):
1369313733

1369413734
def _process_dashboard_entry(self, has_exception, init=False):
1369513735
if self._multithreaded:
13696-
import fasteners
13697-
1369813736
self.dash_lock = fasteners.InterProcessLock(
1369913737
constants.Dashboard.LOCKFILE
1370013738
)

0 commit comments

Comments
 (0)