seleniumbase 4.30.8__py3-none-any.whl → 4.31.0__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. sbase/__init__.py +1 -0
  2. seleniumbase/__init__.py +2 -3
  3. seleniumbase/__version__.py +1 -1
  4. seleniumbase/behave/behave_sb.py +47 -9
  5. seleniumbase/config/settings.py +4 -0
  6. seleniumbase/console_scripts/sb_behave_gui.py +5 -5
  7. seleniumbase/console_scripts/sb_caseplans.py +6 -6
  8. seleniumbase/console_scripts/sb_commander.py +5 -5
  9. seleniumbase/console_scripts/sb_install.py +10 -2
  10. seleniumbase/console_scripts/sb_recorder.py +4 -4
  11. seleniumbase/core/browser_launcher.py +138 -103
  12. seleniumbase/core/mysql.py +1 -4
  13. seleniumbase/core/recorder_helper.py +24 -5
  14. seleniumbase/core/sb_driver.py +2 -3
  15. seleniumbase/core/settings_parser.py +4 -0
  16. seleniumbase/fixtures/base_case.py +307 -492
  17. seleniumbase/fixtures/js_utils.py +19 -52
  18. seleniumbase/fixtures/page_actions.py +3 -6
  19. seleniumbase/fixtures/page_utils.py +20 -58
  20. seleniumbase/plugins/base_plugin.py +2 -3
  21. seleniumbase/plugins/driver_manager.py +169 -3
  22. seleniumbase/plugins/pytest_plugin.py +34 -21
  23. seleniumbase/plugins/sb_manager.py +170 -3
  24. seleniumbase/plugins/selenium_plugin.py +52 -6
  25. seleniumbase/undetected/__init__.py +13 -38
  26. seleniumbase/undetected/dprocess.py +4 -6
  27. seleniumbase/undetected/options.py +3 -6
  28. seleniumbase/undetected/patcher.py +2 -3
  29. {seleniumbase-4.30.8.dist-info → seleniumbase-4.31.0.dist-info}/METADATA +108 -123
  30. {seleniumbase-4.30.8.dist-info → seleniumbase-4.31.0.dist-info}/RECORD +34 -45
  31. {seleniumbase-4.30.8.dist-info → seleniumbase-4.31.0.dist-info}/WHEEL +1 -1
  32. sbase/ReadMe.txt +0 -2
  33. seleniumbase/ReadMe.md +0 -25
  34. seleniumbase/common/ReadMe.md +0 -71
  35. seleniumbase/console_scripts/ReadMe.md +0 -734
  36. seleniumbase/drivers/ReadMe.md +0 -27
  37. seleniumbase/extensions/ReadMe.md +0 -12
  38. seleniumbase/masterqa/ReadMe.md +0 -61
  39. seleniumbase/resources/ReadMe.md +0 -31
  40. seleniumbase/resources/favicon.ico +0 -0
  41. seleniumbase/utilities/selenium_grid/ReadMe.md +0 -84
  42. seleniumbase/utilities/selenium_ide/ReadMe.md +0 -111
  43. {seleniumbase-4.30.8.dist-info → seleniumbase-4.31.0.dist-info}/LICENSE +0 -0
  44. {seleniumbase-4.30.8.dist-info → seleniumbase-4.31.0.dist-info}/entry_points.txt +0 -0
  45. {seleniumbase-4.30.8.dist-info → seleniumbase-4.31.0.dist-info}/top_level.txt +0 -0
sbase/__init__.py CHANGED
@@ -11,3 +11,4 @@ from seleniumbase import MasterQA # noqa
11
11
  from seleniumbase import page_actions # noqa
12
12
  from seleniumbase import page_utils # noqa
13
13
  from seleniumbase import SB # noqa
14
+ from seleniumbase import translate # noqa
seleniumbase/__init__.py CHANGED
@@ -10,7 +10,7 @@ from selenium import webdriver
10
10
  from seleniumbase.__version__ import __version__
11
11
  from seleniumbase.common import decorators # noqa
12
12
  from seleniumbase.common import encryption # noqa
13
- from seleniumbase.core import colored_traceback
13
+ from seleniumbase.core import colored_traceback # noqa
14
14
  from seleniumbase.core.browser_launcher import get_driver # noqa
15
15
  from seleniumbase.fixtures import js_utils # noqa
16
16
  from seleniumbase.fixtures import page_actions # noqa
@@ -36,8 +36,7 @@ if sys.version_info[0] < 3 and "pdbp" in locals():
36
36
  pdb.DefaultConfig.sticky_by_default = True
37
37
  colored_traceback.add_hook()
38
38
  os.environ["SE_AVOID_STATS"] = "true" # Disable Selenium Manager stats
39
- if sys.version_info >= (3, 7):
40
- webdriver.TouchActions = None # Lifeline for past selenium-wire versions
39
+ webdriver.TouchActions = None # Lifeline for past selenium-wire versions
41
40
  if sys.version_info >= (3, 10):
42
41
  collections.Callable = collections.abc.Callable # Lifeline for nosetests
43
42
  del collections # Undo "import collections" / Simplify "dir(seleniumbase)"
@@ -1,2 +1,2 @@
1
1
  # seleniumbase package
2
- __version__ = "4.30.8"
2
+ __version__ = "4.31.0"
@@ -48,6 +48,7 @@ behave -D agent="User Agent String" -D demo
48
48
  -D headless2 (Use the new headless mode, which supports extensions.)
49
49
  -D headed (Run tests in headed/GUI mode on Linux OS, where not default.)
50
50
  -D xvfb (Run tests using the Xvfb virtual display server on Linux OS.)
51
+ -D xvfb-metrics=STRING (Set Xvfb display size on Linux: "Width,Height".)
51
52
  -D locale=LOCALE_CODE (Set the Language Locale Code for the web browser.)
52
53
  -D pdb (Activate Post Mortem Debug Mode if a test fails.)
53
54
  -D interval=SECONDS (The autoplay interval for presentations & tour steps)
@@ -90,6 +91,7 @@ behave -D agent="User Agent String" -D demo
90
91
  -D rcs | -D reuse-class-session (Reuse session for tests in class/feature)
91
92
  -D crumbs (Delete all cookies between tests reusing a session.)
92
93
  -D disable-beforeunload (Disable the "beforeunload" event on Chrome.)
94
+ -D window-position=X,Y (Set the browser's starting window position.)
93
95
  -D window-size=WIDTH,HEIGHT (Set the browser's starting window size.)
94
96
  -D maximize (Start tests with the browser window maximized.)
95
97
  -D screenshot (Save a screenshot at the end of each test.)
@@ -104,6 +106,7 @@ import colorama
104
106
  import os
105
107
  import re
106
108
  import sys
109
+ from contextlib import suppress
107
110
  from seleniumbase import config as sb_config
108
111
  from seleniumbase.config import settings
109
112
  from seleniumbase.core import download_helper
@@ -145,6 +148,7 @@ def get_configured_sb(context):
145
148
  sb.headless_active = False
146
149
  sb.headed = False
147
150
  sb.xvfb = False
151
+ sb.xvfb_metrics = None
148
152
  sb.start_page = None
149
153
  sb.locale_code = None
150
154
  sb.pdb_option = False
@@ -193,6 +197,7 @@ def get_configured_sb(context):
193
197
  sb._disable_beforeunload = False
194
198
  sb.visual_baseline = False
195
199
  sb.use_wire = False
200
+ sb.window_position = None
196
201
  sb.window_size = None
197
202
  sb.maximize_option = False
198
203
  sb.is_context_manager = False
@@ -302,6 +307,13 @@ def get_configured_sb(context):
302
307
  if low_key == "xvfb":
303
308
  sb.xvfb = True
304
309
  continue
310
+ # Handle: -D xvfb-metrics=STR / xvfb_metrics=STR
311
+ if low_key in ["xvfb-metrics", "xvfb_metrics"]:
312
+ xvfb_metrics = userdata[key]
313
+ if xvfb_metrics == "true":
314
+ xvfb_metrics = sb.xvfb_metrics # revert to default
315
+ sb.xvfb_metrics = xvfb_metrics
316
+ continue
305
317
  # Handle: -D start-page=URL / start_page=URL / url=URL
306
318
  if low_key in ["start-page", "start_page", "url"]:
307
319
  start_page = userdata[key]
@@ -601,6 +613,13 @@ def get_configured_sb(context):
601
613
  if low_key == "wire":
602
614
  sb.use_wire = True
603
615
  continue
616
+ # Handle: -D window-position=X,Y / window_position=X,Y
617
+ if low_key in ["window-position", "window_position"]:
618
+ window_position = userdata[key]
619
+ if window_position == "true":
620
+ window_position = sb.window_position # revert to default
621
+ sb.window_position = window_position
622
+ continue
604
623
  # Handle: -D window-size=Width,Height / window_size=Width,Height
605
624
  if low_key in ["window-size", "window_size"]:
606
625
  window_size = userdata[key]
@@ -904,6 +923,29 @@ def get_configured_sb(context):
904
923
  else:
905
924
  sb.enable_ws = False
906
925
  sb.disable_ws = True
926
+ if sb.window_position:
927
+ window_position = sb.window_position
928
+ if window_position.count(",") != 1:
929
+ message = (
930
+ '\n\n window_position expects an "x,y" string!'
931
+ '\n (Your input was: "%s")\n' % window_position
932
+ )
933
+ raise Exception(message)
934
+ window_position = window_position.replace(" ", "")
935
+ win_x = None
936
+ win_y = None
937
+ try:
938
+ win_x = int(window_position.split(",")[0])
939
+ win_y = int(window_position.split(",")[1])
940
+ except Exception:
941
+ message = (
942
+ '\n\n Expecting integer values for "x,y"!'
943
+ '\n (window_position input was: "%s")\n'
944
+ % window_position
945
+ )
946
+ raise Exception(message)
947
+ settings.WINDOW_START_X = win_x
948
+ settings.WINDOW_START_Y = win_y
907
949
  if sb.window_size:
908
950
  window_size = sb.window_size
909
951
  if window_size.count(",") != 1:
@@ -938,9 +980,11 @@ def get_configured_sb(context):
938
980
  sb_config.is_pytest = False
939
981
  sb_config.is_nosetest = False
940
982
  sb_config.is_context_manager = False
983
+ sb_config.window_position = sb.window_position
941
984
  sb_config.window_size = sb.window_size
942
985
  sb_config.maximize_option = sb.maximize_option
943
986
  sb_config.xvfb = sb.xvfb
987
+ sb_config.xvfb_metrics = sb.xvfb_metrics
944
988
  sb_config.reuse_class_session = sb._reuse_class_session
945
989
  sb_config.save_screenshot = sb.save_screenshot_after_test
946
990
  sb_config.no_screenshot = sb.no_screenshot_after_test
@@ -1162,12 +1206,10 @@ def behave_dashboard_prepare():
1162
1206
  sb_config.item_count_untested = sb_config.item_count
1163
1207
  dash_path = os.path.join(os.getcwd(), "dashboard.html")
1164
1208
  star_len = len("Dashboard: ") + len(dash_path)
1165
- try:
1209
+ with suppress(Exception):
1166
1210
  terminal_size = os.get_terminal_size().columns
1167
1211
  if terminal_size > 30 and star_len > terminal_size:
1168
1212
  star_len = terminal_size
1169
- except Exception:
1170
- pass
1171
1213
  stars = "*" * star_len
1172
1214
  c1 = ""
1173
1215
  cr = ""
@@ -1263,7 +1305,7 @@ def _perform_behave_unconfigure_():
1263
1305
 
1264
1306
 
1265
1307
  def do_final_driver_cleanup_as_needed():
1266
- try:
1308
+ with suppress(Exception):
1267
1309
  if hasattr(sb_config, "last_driver") and sb_config.last_driver:
1268
1310
  if (
1269
1311
  not is_windows
@@ -1271,8 +1313,6 @@ def do_final_driver_cleanup_as_needed():
1271
1313
  or sb_config.last_driver.service.process
1272
1314
  ):
1273
1315
  sb_config.last_driver.quit()
1274
- except Exception:
1275
- pass
1276
1316
 
1277
1317
 
1278
1318
  def _perform_behave_terminal_summary_():
@@ -1281,12 +1321,10 @@ def _perform_behave_terminal_summary_():
1281
1321
  )
1282
1322
  dash_path = os.path.join(os.getcwd(), "dashboard.html")
1283
1323
  equals_len = len("Dashboard: ") + len(dash_path)
1284
- try:
1324
+ with suppress(Exception):
1285
1325
  terminal_size = os.get_terminal_size().columns
1286
1326
  if terminal_size > 30 and equals_len > terminal_size:
1287
1327
  equals_len = terminal_size
1288
- except Exception:
1289
- pass
1290
1328
  equals = "=" * (equals_len + 2)
1291
1329
  c2 = ""
1292
1330
  cr = ""
@@ -110,6 +110,10 @@ DISABLE_CSP_ON_CHROME = False
110
110
  # (This applies when using --proxy=[PROXY_STRING] for using a proxy server.)
111
111
  RAISE_INVALID_PROXY_STRING_EXCEPTION = True
112
112
 
113
+ # Default browser coordinates when opening new windows for tests.
114
+ WINDOW_START_X = 20
115
+ WINDOW_START_Y = 54
116
+
113
117
  # Default browser resolutions when opening new windows for tests.
114
118
  # (Headless resolutions take priority, and include all browsers.)
115
119
  # (Firefox starts maximized by default when running in GUI Mode.)
@@ -16,16 +16,16 @@ Output:
16
16
  import colorama
17
17
  import subprocess
18
18
  import sys
19
+ import tkinter as tk
20
+ from seleniumbase.fixtures import shared_utils
21
+ from tkinter.scrolledtext import ScrolledText
19
22
 
20
- if sys.version_info <= (3, 7):
23
+ if sys.version_info <= (3, 8):
21
24
  current_version = ".".join(str(ver) for ver in sys.version_info[:3])
22
25
  raise Exception(
23
- "\n* SBase Commander requires Python 3.7 or newer!"
26
+ "\n* SBase Commander requires Python 3.8 or newer!"
24
27
  "\n** You are currently using Python %s" % current_version
25
28
  )
26
- from seleniumbase.fixtures import shared_utils
27
- import tkinter as tk # noqa: E402
28
- from tkinter.scrolledtext import ScrolledText # noqa: E402
29
29
 
30
30
 
31
31
  def set_colors(use_colors):
@@ -20,17 +20,17 @@ import colorama
20
20
  import os
21
21
  import subprocess
22
22
  import sys
23
+ import tkinter as tk
24
+ from seleniumbase.fixtures import shared_utils
25
+ from tkinter import messagebox
26
+ from tkinter.scrolledtext import ScrolledText
23
27
 
24
- if sys.version_info <= (3, 7):
28
+ if sys.version_info <= (3, 8):
25
29
  current_version = ".".join(str(ver) for ver in sys.version_info[:3])
26
30
  raise Exception(
27
- "\n* SBase Case Plans Generator requires Python 3.7 or newer!"
31
+ "\n* SBase Case Plans Generator requires Python 3.8 or newer!"
28
32
  "\n** You are currently using Python %s" % current_version
29
33
  )
30
- from seleniumbase.fixtures import shared_utils
31
- import tkinter as tk # noqa: E402
32
- from tkinter import messagebox # noqa: E402
33
- from tkinter.scrolledtext import ScrolledText # noqa: E402
34
34
 
35
35
 
36
36
  def set_colors(use_colors):
@@ -21,16 +21,16 @@ import colorama
21
21
  import os
22
22
  import subprocess
23
23
  import sys
24
+ import tkinter as tk
25
+ from seleniumbase.fixtures import shared_utils
26
+ from tkinter.scrolledtext import ScrolledText
24
27
 
25
- if sys.version_info <= (3, 7):
28
+ if sys.version_info <= (3, 8):
26
29
  current_version = ".".join(str(ver) for ver in sys.version_info[:3])
27
30
  raise Exception(
28
- "\n* SBase Commander requires Python 3.7 or newer!"
31
+ "\n* SBase Commander requires Python 3.8 or newer!"
29
32
  "\n** You are currently using Python %s" % current_version
30
33
  )
31
- from seleniumbase.fixtures import shared_utils
32
- import tkinter as tk # noqa: E402
33
- from tkinter.scrolledtext import ScrolledText # noqa: E402
34
34
 
35
35
 
36
36
  def set_colors(use_colors):
@@ -578,10 +578,18 @@ def main(override=None, intel_for_uc=None, force_uc=None):
578
578
  else:
579
579
  invalid_run_command()
580
580
  if IS_MAC:
581
- file_name = "geckodriver-%s-macos.tar.gz" % use_version
581
+ if IS_ARM_MAC:
582
+ file_name = "geckodriver-%s-macos-aarch64.tar.gz" % use_version
583
+ else:
584
+ file_name = "geckodriver-%s-macos.tar.gz" % use_version
582
585
  elif IS_LINUX:
583
586
  if "64" in ARCH:
584
- file_name = "geckodriver-%s-linux64.tar.gz" % use_version
587
+ if "aarch64" in platform.processor():
588
+ file_name = (
589
+ "geckodriver-%s-linux-aarch64.tar.gz" % use_version
590
+ )
591
+ else:
592
+ file_name = "geckodriver-%s-linux64.tar.gz" % use_version
585
593
  else:
586
594
  file_name = "geckodriver-%s-linux32.tar.gz" % use_version
587
595
  elif IS_WINDOWS:
@@ -18,23 +18,23 @@ import colorama
18
18
  import os
19
19
  import subprocess
20
20
  import sys
21
+ import tkinter as tk
21
22
  from seleniumbase import config as sb_config
22
23
  from seleniumbase.fixtures import page_utils
23
24
  from seleniumbase.fixtures import shared_utils
25
+ from tkinter import messagebox
24
26
 
25
27
  sb_config.rec_subprocess_p = None
26
28
  sb_config.rec_subprocess_used = False
27
29
  sys_executable = sys.executable
28
30
  if " " in sys_executable:
29
31
  sys_executable = "python"
30
- if sys.version_info <= (3, 7):
32
+ if sys.version_info <= (3, 8):
31
33
  current_version = ".".join(str(ver) for ver in sys.version_info[:3])
32
34
  raise Exception(
33
- "\n* Recorder Desktop requires Python 3.7 or newer!"
35
+ "\n* Recorder Desktop requires Python 3.8 or newer!"
34
36
  "\n*** You are currently using Python %s" % current_version
35
37
  )
36
- import tkinter as tk # noqa: E402
37
- from tkinter import messagebox # noqa: E402
38
38
 
39
39
 
40
40
  def set_colors(use_colors):