seleniumbase 4.34.15__tar.gz → 4.34.17__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {seleniumbase-4.34.15/seleniumbase.egg-info → seleniumbase-4.34.17}/PKG-INFO +6 -6
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/requirements.txt +5 -5
- seleniumbase-4.34.17/seleniumbase/__version__.py +2 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/core/browser_launcher.py +7 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/core/sb_cdp.py +139 -35
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/fixtures/base_case.py +14 -3
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/fixtures/js_utils.py +31 -9
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/plugins/base_plugin.py +12 -15
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/plugins/selenium_plugin.py +1 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/undetected/cdp_driver/browser.py +2 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/undetected/cdp_driver/cdp_util.py +104 -2
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/undetected/cdp_driver/config.py +10 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17/seleniumbase.egg-info}/PKG-INFO +6 -6
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase.egg-info/requires.txt +5 -5
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/setup.py +6 -6
- seleniumbase-4.34.15/seleniumbase/__version__.py +0 -2
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/.gitignore +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/LICENSE +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/MANIFEST.in +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/README.md +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/install.sh +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/pyproject.toml +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/pytest.ini +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/sbase/__init__.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/sbase/__main__.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/sbase/steps.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/__init__.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/behave/behave_sb.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/common/decorators.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/common/exceptions.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/config/proxy_list.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/config/settings.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/console_scripts/run.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/console_scripts/sb_install.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/console_scripts/sb_recorder.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/core/detect_b_ver.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/core/log_helper.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/core/mysql.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/core/proxy_helper.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/core/recorder_helper.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/core/report_helper.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/core/sb_driver.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/extensions/__init__.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/fixtures/__init__.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/fixtures/constants.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/fixtures/page_actions.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/fixtures/page_utils.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/fixtures/shared_utils.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/fixtures/xpath_to_css.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/js_code/__init__.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/masterqa/__init__.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/masterqa/master_qa.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/plugins/__init__.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/plugins/driver_manager.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/plugins/pytest_plugin.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/plugins/sb_manager.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/resources/__init__.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/translate/master_dict.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/undetected/__init__.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/undetected/cdp.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/undetected/cdp_driver/element.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/undetected/patcher.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/undetected/webelement.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/utilities/__init__.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase.egg-info/SOURCES.txt +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/setup.cfg +0 -0
- {seleniumbase-4.34.15 → seleniumbase-4.34.17}/virtualenv_install.sh +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: seleniumbase
|
3
|
-
Version: 4.34.
|
3
|
+
Version: 4.34.17
|
4
4
|
Summary: A complete web automation framework for end-to-end testing.
|
5
5
|
Home-page: https://github.com/seleniumbase/SeleniumBase
|
6
6
|
Author: Michael Mintz
|
@@ -68,12 +68,12 @@ Requires-Dist: attrs>=25.1.0
|
|
68
68
|
Requires-Dist: certifi>=2025.1.31
|
69
69
|
Requires-Dist: exceptiongroup>=1.2.2
|
70
70
|
Requires-Dist: websockets~=13.1; python_version < "3.9"
|
71
|
-
Requires-Dist: websockets>=
|
71
|
+
Requires-Dist: websockets>=15.0; python_version >= "3.9"
|
72
72
|
Requires-Dist: filelock~=3.16.1; python_version < "3.9"
|
73
73
|
Requires-Dist: filelock>=3.17.0; python_version >= "3.9"
|
74
74
|
Requires-Dist: fasteners>=0.19
|
75
75
|
Requires-Dist: mycdp>=1.1.0
|
76
|
-
Requires-Dist: pynose>=1.5.
|
76
|
+
Requires-Dist: pynose>=1.5.4
|
77
77
|
Requires-Dist: platformdirs>=4.3.6
|
78
78
|
Requires-Dist: typing-extensions>=4.12.2
|
79
79
|
Requires-Dist: sbvirtualdisplay>=1.4.0
|
@@ -99,8 +99,8 @@ Requires-Dist: sniffio==1.3.1
|
|
99
99
|
Requires-Dist: h11==0.14.0
|
100
100
|
Requires-Dist: outcome==1.3.0.post0
|
101
101
|
Requires-Dist: trio==0.27.0; python_version < "3.9"
|
102
|
-
Requires-Dist: trio==0.
|
103
|
-
Requires-Dist: trio-websocket==0.
|
102
|
+
Requires-Dist: trio==0.29.0; python_version >= "3.9"
|
103
|
+
Requires-Dist: trio-websocket==0.12.1
|
104
104
|
Requires-Dist: wsproto==1.2.0
|
105
105
|
Requires-Dist: websocket-client==1.8.0
|
106
106
|
Requires-Dist: selenium==4.27.1; python_version < "3.9"
|
@@ -137,7 +137,7 @@ Requires-Dist: pytest-cov>=5.0.0; python_version < "3.9" and extra == "coverage"
|
|
137
137
|
Requires-Dist: pytest-cov>=6.0.0; python_version >= "3.9" and extra == "coverage"
|
138
138
|
Provides-Extra: flake8
|
139
139
|
Requires-Dist: flake8==5.0.4; python_version < "3.9" and extra == "flake8"
|
140
|
-
Requires-Dist: flake8==7.1.
|
140
|
+
Requires-Dist: flake8==7.1.2; python_version >= "3.9" and extra == "flake8"
|
141
141
|
Requires-Dist: mccabe==0.7.0; extra == "flake8"
|
142
142
|
Requires-Dist: pyflakes==2.5.0; python_version < "3.9" and extra == "flake8"
|
143
143
|
Requires-Dist: pyflakes==3.2.0; python_version >= "3.9" and extra == "flake8"
|
@@ -7,12 +7,12 @@ attrs>=25.1.0
|
|
7
7
|
certifi>=2025.1.31
|
8
8
|
exceptiongroup>=1.2.2
|
9
9
|
websockets~=13.1;python_version<"3.9"
|
10
|
-
websockets>=
|
10
|
+
websockets>=15.0;python_version>="3.9"
|
11
11
|
filelock~=3.16.1;python_version<"3.9"
|
12
12
|
filelock>=3.17.0;python_version>="3.9"
|
13
13
|
fasteners>=0.19
|
14
14
|
mycdp>=1.1.0
|
15
|
-
pynose>=1.5.
|
15
|
+
pynose>=1.5.4
|
16
16
|
platformdirs>=4.3.6
|
17
17
|
typing-extensions>=4.12.2
|
18
18
|
sbvirtualdisplay>=1.4.0
|
@@ -38,8 +38,8 @@ sniffio==1.3.1
|
|
38
38
|
h11==0.14.0
|
39
39
|
outcome==1.3.0.post0
|
40
40
|
trio==0.27.0;python_version<"3.9"
|
41
|
-
trio==0.
|
42
|
-
trio-websocket==0.
|
41
|
+
trio==0.29.0;python_version>="3.9"
|
42
|
+
trio-websocket==0.12.1
|
43
43
|
wsproto==1.2.0
|
44
44
|
websocket-client==1.8.0
|
45
45
|
selenium==4.27.1;python_version<"3.9"
|
@@ -74,7 +74,7 @@ coverage>=7.6.12;python_version>="3.9"
|
|
74
74
|
pytest-cov>=5.0.0;python_version<"3.9"
|
75
75
|
pytest-cov>=6.0.0;python_version>="3.9"
|
76
76
|
flake8==5.0.4;python_version<"3.9"
|
77
|
-
flake8==7.1.
|
77
|
+
flake8==7.1.2;python_version>="3.9"
|
78
78
|
mccabe==0.7.0
|
79
79
|
pyflakes==2.5.0;python_version<"3.9"
|
80
80
|
pyflakes==3.2.0;python_version>="3.9"
|
@@ -718,6 +718,10 @@ def uc_open_with_cdp_mode(driver, url=None):
|
|
718
718
|
cdp.is_selected = CDPM.is_selected
|
719
719
|
cdp.is_element_present = CDPM.is_element_present
|
720
720
|
cdp.is_element_visible = CDPM.is_element_visible
|
721
|
+
cdp.is_text_visible = CDPM.is_text_visible
|
722
|
+
cdp.is_exact_text_visible = CDPM.is_exact_text_visible
|
723
|
+
cdp.wait_for_text = CDPM.wait_for_text
|
724
|
+
cdp.wait_for_text_not_visible = CDPM.wait_for_text_not_visible
|
721
725
|
cdp.wait_for_element_visible = CDPM.wait_for_element_visible
|
722
726
|
cdp.assert_element = CDPM.assert_element
|
723
727
|
cdp.assert_element_visible = CDPM.assert_element_visible
|
@@ -731,6 +735,7 @@ def uc_open_with_cdp_mode(driver, url=None):
|
|
731
735
|
cdp.assert_url_contains = CDPM.assert_url_contains
|
732
736
|
cdp.assert_text = CDPM.assert_text
|
733
737
|
cdp.assert_exact_text = CDPM.assert_exact_text
|
738
|
+
cdp.assert_text_not_visible = CDPM.assert_text_not_visible
|
734
739
|
cdp.assert_true = CDPM.assert_true
|
735
740
|
cdp.assert_false = CDPM.assert_false
|
736
741
|
cdp.assert_equal = CDPM.assert_equal
|
@@ -2280,6 +2285,7 @@ def _set_chrome_options(
|
|
2280
2285
|
or proxy_string
|
2281
2286
|
):
|
2282
2287
|
chrome_options.add_argument("--ignore-certificate-errors")
|
2288
|
+
chrome_options.add_argument("--ignore-ssl-errors=yes")
|
2283
2289
|
if not enable_ws:
|
2284
2290
|
chrome_options.add_argument("--disable-web-security")
|
2285
2291
|
if (
|
@@ -4231,6 +4237,7 @@ def get_local_driver(
|
|
4231
4237
|
edge_options.add_argument("--log-level=3")
|
4232
4238
|
edge_options.add_argument("--no-first-run")
|
4233
4239
|
edge_options.add_argument("--ignore-certificate-errors")
|
4240
|
+
edge_options.add_argument("--ignore-ssl-errors=yes")
|
4234
4241
|
if devtools and not headless:
|
4235
4242
|
edge_options.add_argument("--auto-open-devtools-for-tabs")
|
4236
4243
|
edge_options.add_argument("--allow-file-access-from-files")
|
@@ -56,12 +56,16 @@ class CDPMethods():
|
|
56
56
|
element, *args, **kwargs
|
57
57
|
)
|
58
58
|
element.focus = lambda: self.__focus(element)
|
59
|
+
element.gui_click = (
|
60
|
+
lambda *args, **kwargs: self.__gui_click(element, *args, **kwargs)
|
61
|
+
)
|
59
62
|
element.highlight_overlay = lambda: self.__highlight_overlay(element)
|
60
63
|
element.mouse_click = lambda: self.__mouse_click(element)
|
61
64
|
element.mouse_drag = (
|
62
65
|
lambda destination: self.__mouse_drag(element, destination)
|
63
66
|
)
|
64
67
|
element.mouse_move = lambda: self.__mouse_move(element)
|
68
|
+
element.press_keys = lambda text: self.__press_keys(element, text)
|
65
69
|
element.query_selector = (
|
66
70
|
lambda selector: self.__query_selector(element, selector)
|
67
71
|
)
|
@@ -211,7 +215,8 @@ class CDPMethods():
|
|
211
215
|
element = self.__add_sync_methods(element.parent)
|
212
216
|
return self.__add_sync_methods(element)
|
213
217
|
elif (
|
214
|
-
element.parent
|
218
|
+
element.parent
|
219
|
+
and element.parent.parent
|
215
220
|
and tag_name in element.parent.parent.tag_name.lower()
|
216
221
|
and text.strip() in element.parent.parent.text
|
217
222
|
):
|
@@ -272,7 +277,8 @@ class CDPMethods():
|
|
272
277
|
if element not in updated_elements:
|
273
278
|
updated_elements.append(element)
|
274
279
|
elif (
|
275
|
-
element.parent
|
280
|
+
element.parent
|
281
|
+
and element.parent.parent
|
276
282
|
and tag_name in element.parent.parent.tag_name.lower()
|
277
283
|
and text.strip() in element.parent.parent.text
|
278
284
|
):
|
@@ -423,6 +429,39 @@ class CDPMethods():
|
|
423
429
|
self.loop.run_until_complete(element.focus_async())
|
424
430
|
)
|
425
431
|
|
432
|
+
def __gui_click(self, element, timeframe=None):
|
433
|
+
element.scroll_into_view()
|
434
|
+
self.__add_light_pause()
|
435
|
+
position = element.get_position()
|
436
|
+
x = position.x
|
437
|
+
y = position.y
|
438
|
+
e_width = position.width
|
439
|
+
e_height = position.height
|
440
|
+
# Relative to window
|
441
|
+
element_rect = {"height": e_height, "width": e_width, "x": x, "y": y}
|
442
|
+
window_rect = self.get_window_rect()
|
443
|
+
w_bottom_y = window_rect["y"] + window_rect["height"]
|
444
|
+
viewport_height = window_rect["innerHeight"]
|
445
|
+
x = window_rect["x"] + element_rect["x"]
|
446
|
+
y = w_bottom_y - viewport_height + element_rect["y"]
|
447
|
+
y_scroll_offset = window_rect["pageYOffset"]
|
448
|
+
y = y - y_scroll_offset
|
449
|
+
x = x + window_rect["scrollX"]
|
450
|
+
y = y + window_rect["scrollY"]
|
451
|
+
# Relative to screen
|
452
|
+
element_rect = {"height": e_height, "width": e_width, "x": x, "y": y}
|
453
|
+
e_width = element_rect["width"]
|
454
|
+
e_height = element_rect["height"]
|
455
|
+
e_x = element_rect["x"]
|
456
|
+
e_y = element_rect["y"]
|
457
|
+
x, y = ((e_x + e_width / 2.0) + 0.5), ((e_y + e_height / 2.0) + 0.5)
|
458
|
+
if not timeframe or not isinstance(timeframe, (int, float)):
|
459
|
+
timeframe = 0.25
|
460
|
+
if timeframe > 3:
|
461
|
+
timeframe = 3
|
462
|
+
self.gui_click_x_y(x, y, timeframe=timeframe)
|
463
|
+
return self.loop.run_until_complete(self.page.wait())
|
464
|
+
|
426
465
|
def __highlight_overlay(self, element):
|
427
466
|
return (
|
428
467
|
self.loop.run_until_complete(element.highlight_overlay_async())
|
@@ -445,6 +484,21 @@ class CDPMethods():
|
|
445
484
|
self.loop.run_until_complete(element.mouse_move_async())
|
446
485
|
)
|
447
486
|
|
487
|
+
def __press_keys(self, element, text):
|
488
|
+
element.scroll_into_view()
|
489
|
+
submit = False
|
490
|
+
if text.endswith("\n") or text.endswith("\r"):
|
491
|
+
submit = True
|
492
|
+
text = text[:-1]
|
493
|
+
for key in text:
|
494
|
+
element.send_keys(key)
|
495
|
+
time.sleep(0.044)
|
496
|
+
if submit:
|
497
|
+
element.send_keys("\r\n")
|
498
|
+
time.sleep(0.044)
|
499
|
+
self.__slow_mode_pause_if_set()
|
500
|
+
return self.loop.run_until_complete(self.page.wait())
|
501
|
+
|
448
502
|
def __query_selector(self, element, selector):
|
449
503
|
selector = self.__convert_to_css_if_xpath(selector)
|
450
504
|
element2 = self.loop.run_until_complete(
|
@@ -1681,21 +1735,79 @@ class CDPMethods():
|
|
1681
1735
|
return True
|
1682
1736
|
return False
|
1683
1737
|
|
1684
|
-
def
|
1738
|
+
def is_text_visible(self, text, selector="body"):
|
1739
|
+
selector = self.__convert_to_css_if_xpath(selector)
|
1740
|
+
text = text.strip()
|
1741
|
+
element = None
|
1742
|
+
try:
|
1743
|
+
element = self.find_element(selector, timeout=0.1)
|
1744
|
+
except Exception:
|
1745
|
+
return False
|
1746
|
+
with suppress(Exception):
|
1747
|
+
if text in element.text_all:
|
1748
|
+
return True
|
1749
|
+
return False
|
1750
|
+
|
1751
|
+
def is_exact_text_visible(self, text, selector="body"):
|
1752
|
+
selector = self.__convert_to_css_if_xpath(selector)
|
1753
|
+
text = text.strip()
|
1754
|
+
element = None
|
1755
|
+
try:
|
1756
|
+
element = self.find_element(selector, timeout=0.1)
|
1757
|
+
except Exception:
|
1758
|
+
return False
|
1759
|
+
with suppress(Exception):
|
1760
|
+
if text == element.text_all.strip():
|
1761
|
+
return True
|
1762
|
+
return False
|
1763
|
+
|
1764
|
+
def wait_for_text(self, text, selector="body", timeout=None):
|
1685
1765
|
if not timeout:
|
1686
1766
|
timeout = settings.SMALL_TIMEOUT
|
1767
|
+
start_ms = time.time() * 1000.0
|
1768
|
+
stop_ms = start_ms + (timeout * 1000.0)
|
1769
|
+
text = text.strip()
|
1770
|
+
element = None
|
1687
1771
|
try:
|
1688
|
-
self.
|
1772
|
+
element = self.find_element(selector, timeout=timeout)
|
1689
1773
|
except Exception:
|
1690
|
-
raise Exception("Element {%s}
|
1691
|
-
for i in range(
|
1692
|
-
|
1693
|
-
|
1774
|
+
raise Exception("Element {%s} not found!" % selector)
|
1775
|
+
for i in range(int(timeout * 10)):
|
1776
|
+
with suppress(Exception):
|
1777
|
+
element = self.find_element(selector, timeout=0.1)
|
1778
|
+
if text in element.text_all:
|
1779
|
+
return True
|
1780
|
+
now_ms = time.time() * 1000.0
|
1781
|
+
if now_ms >= stop_ms:
|
1782
|
+
break
|
1694
1783
|
time.sleep(0.1)
|
1695
|
-
raise Exception(
|
1784
|
+
raise Exception(
|
1785
|
+
"Text {%s} not found in {%s}! Actual text: {%s}"
|
1786
|
+
% (text, selector, element.text_all)
|
1787
|
+
)
|
1696
1788
|
|
1697
|
-
def
|
1698
|
-
|
1789
|
+
def wait_for_text_not_visible(self, text, selector="body", timeout=None):
|
1790
|
+
if not timeout:
|
1791
|
+
timeout = settings.SMALL_TIMEOUT
|
1792
|
+
text = text.strip()
|
1793
|
+
start_ms = time.time() * 1000.0
|
1794
|
+
stop_ms = start_ms + (timeout * 1000.0)
|
1795
|
+
for i in range(int(timeout * 10)):
|
1796
|
+
if not self.is_text_visible(text, selector):
|
1797
|
+
return True
|
1798
|
+
now_ms = time.time() * 1000.0
|
1799
|
+
if now_ms >= stop_ms:
|
1800
|
+
break
|
1801
|
+
time.sleep(0.1)
|
1802
|
+
plural = "s"
|
1803
|
+
if timeout == 1:
|
1804
|
+
plural = ""
|
1805
|
+
raise Exception(
|
1806
|
+
"Text {%s} in {%s} was still visible after %s second%s!"
|
1807
|
+
% (text, selector, timeout, plural)
|
1808
|
+
)
|
1809
|
+
|
1810
|
+
def wait_for_element_visible(self, selector, timeout=None):
|
1699
1811
|
if not timeout:
|
1700
1812
|
timeout = settings.SMALL_TIMEOUT
|
1701
1813
|
try:
|
@@ -1704,10 +1816,15 @@ class CDPMethods():
|
|
1704
1816
|
raise Exception("Element {%s} was not found!" % selector)
|
1705
1817
|
for i in range(30):
|
1706
1818
|
if self.is_element_visible(selector):
|
1707
|
-
return
|
1819
|
+
return self.select(selector)
|
1708
1820
|
time.sleep(0.1)
|
1709
1821
|
raise Exception("Element {%s} was not visible!" % selector)
|
1710
1822
|
|
1823
|
+
def assert_element(self, selector, timeout=None):
|
1824
|
+
"""Same as assert_element_visible()"""
|
1825
|
+
self.assert_element_visible(selector, timeout=timeout)
|
1826
|
+
return True
|
1827
|
+
|
1711
1828
|
def assert_element_visible(self, selector, timeout=None):
|
1712
1829
|
"""Same as assert_element()"""
|
1713
1830
|
if not timeout:
|
@@ -1852,29 +1969,9 @@ class CDPMethods():
|
|
1852
1969
|
raise Exception(error % (expected, actual))
|
1853
1970
|
|
1854
1971
|
def assert_text(self, text, selector="body", timeout=None):
|
1855
|
-
|
1856
|
-
|
1857
|
-
|
1858
|
-
stop_ms = start_ms + (timeout * 1000.0)
|
1859
|
-
text = text.strip()
|
1860
|
-
element = None
|
1861
|
-
try:
|
1862
|
-
element = self.find_element(selector, timeout=timeout)
|
1863
|
-
except Exception:
|
1864
|
-
raise Exception("Element {%s} not found!" % selector)
|
1865
|
-
for i in range(int(timeout * 10)):
|
1866
|
-
with suppress(Exception):
|
1867
|
-
element = self.find_element(selector, timeout=0.1)
|
1868
|
-
if text in element.text_all:
|
1869
|
-
return True
|
1870
|
-
now_ms = time.time() * 1000.0
|
1871
|
-
if now_ms >= stop_ms:
|
1872
|
-
break
|
1873
|
-
time.sleep(0.1)
|
1874
|
-
raise Exception(
|
1875
|
-
"Text {%s} not found in {%s}! Actual text: {%s}"
|
1876
|
-
% (text, selector, element.text_all)
|
1877
|
-
)
|
1972
|
+
"""Same as wait_for_text()"""
|
1973
|
+
self.wait_for_text(text, selector=selector, timeout=timeout)
|
1974
|
+
return True
|
1878
1975
|
|
1879
1976
|
def assert_exact_text(self, text, selector="body", timeout=None):
|
1880
1977
|
if not timeout:
|
@@ -1904,6 +2001,13 @@ class CDPMethods():
|
|
1904
2001
|
% (text, element.text_all, selector)
|
1905
2002
|
)
|
1906
2003
|
|
2004
|
+
def assert_text_not_visible(self, text, selector="body", timeout=None):
|
2005
|
+
"""Raises an exception if the text is still visible after timeout."""
|
2006
|
+
self.wait_for_text_not_visible(
|
2007
|
+
text, selector=selector, timeout=timeout
|
2008
|
+
)
|
2009
|
+
return True
|
2010
|
+
|
1907
2011
|
def assert_true(self, expression):
|
1908
2012
|
if not expression:
|
1909
2013
|
raise AssertionError("%s is not true" % expression)
|
@@ -1454,6 +1454,8 @@ class BaseCase(unittest.TestCase):
|
|
1454
1454
|
|
1455
1455
|
def is_text_visible(self, text, selector="body", by="css selector"):
|
1456
1456
|
"""Returns whether the text substring is visible in the element."""
|
1457
|
+
if self.__is_cdp_swap_needed():
|
1458
|
+
return self.cdp.is_text_visible(text, selector)
|
1457
1459
|
self.wait_for_ready_state_complete()
|
1458
1460
|
time.sleep(0.01)
|
1459
1461
|
selector, by = self.__recalculate_selector(selector, by)
|
@@ -1464,6 +1466,8 @@ class BaseCase(unittest.TestCase):
|
|
1464
1466
|
def is_exact_text_visible(self, text, selector="body", by="css selector"):
|
1465
1467
|
"""Returns whether the text is exactly equal to the element text.
|
1466
1468
|
(Leading and trailing whitespace is ignored in the verification.)"""
|
1469
|
+
if self.__is_cdp_swap_needed():
|
1470
|
+
return self.cdp.is_exact_text_visible(text, selector)
|
1467
1471
|
self.wait_for_ready_state_complete()
|
1468
1472
|
time.sleep(0.01)
|
1469
1473
|
selector, by = self.__recalculate_selector(selector, by)
|
@@ -9281,7 +9285,8 @@ class BaseCase(unittest.TestCase):
|
|
9281
9285
|
"bottom_left", "bottom_center", "bottom_right"]
|
9282
9286
|
max_messages: The limit of concurrent messages to display."""
|
9283
9287
|
self.__check_scope()
|
9284
|
-
self.
|
9288
|
+
if not self.__is_cdp_swap_needed():
|
9289
|
+
self._check_browser()
|
9285
9290
|
if not theme:
|
9286
9291
|
theme = "default" # "flat"
|
9287
9292
|
if not location:
|
@@ -9308,7 +9313,8 @@ class BaseCase(unittest.TestCase):
|
|
9308
9313
|
You can also post messages by using =>
|
9309
9314
|
self.execute_script('Messenger().post("My Message")') """
|
9310
9315
|
self.__check_scope()
|
9311
|
-
self.
|
9316
|
+
if not self.__is_cdp_swap_needed():
|
9317
|
+
self._check_browser()
|
9312
9318
|
if style not in ["info", "success", "error"]:
|
9313
9319
|
style = "info"
|
9314
9320
|
if not duration:
|
@@ -10326,6 +10332,10 @@ class BaseCase(unittest.TestCase):
|
|
10326
10332
|
if self.timeout_multiplier and timeout == settings.LARGE_TIMEOUT:
|
10327
10333
|
timeout = self.__get_new_timeout(timeout)
|
10328
10334
|
selector, by = self.__recalculate_selector(selector, by)
|
10335
|
+
if self.__is_cdp_swap_needed():
|
10336
|
+
return self.cdp.wait_for_text(
|
10337
|
+
text, selector=selector, timeout=timeout
|
10338
|
+
)
|
10329
10339
|
return page_actions.wait_for_text_not_visible(
|
10330
10340
|
self.driver, text, selector, by, timeout
|
10331
10341
|
)
|
@@ -13909,7 +13919,8 @@ class BaseCase(unittest.TestCase):
|
|
13909
13919
|
js_utils.highlight_element_with_js(self.driver, element, loops, o_bs)
|
13910
13920
|
|
13911
13921
|
def __highlight_with_jquery(self, selector, loops, o_bs):
|
13912
|
-
self.
|
13922
|
+
if not self.__is_cdp_swap_needed():
|
13923
|
+
self.wait_for_ready_state_complete()
|
13913
13924
|
js_utils.highlight_with_jquery(self.driver, selector, loops, o_bs)
|
13914
13925
|
|
13915
13926
|
def __highlight_with_js_2(self, message, selector, o_bs):
|
@@ -585,52 +585,60 @@ def highlight_with_jquery(driver, selector, loops=4, o_bs=""):
|
|
585
585
|
'0px 0px 6px 6px rgba(128, 128, 128, 0.5)');"""
|
586
586
|
% selector
|
587
587
|
)
|
588
|
-
|
588
|
+
with suppress(Exception):
|
589
|
+
safe_execute_script(driver, script)
|
589
590
|
for n in range(loops):
|
590
591
|
script = (
|
591
592
|
"""jQuery('%s').css('box-shadow',
|
592
593
|
'0px 0px 6px 6px rgba(255, 0, 0, 1)');"""
|
593
594
|
% selector
|
594
595
|
)
|
595
|
-
|
596
|
+
with suppress(Exception):
|
597
|
+
execute_script(driver, script)
|
596
598
|
time.sleep(0.0181)
|
597
599
|
script = (
|
598
600
|
"""jQuery('%s').css('box-shadow',
|
599
601
|
'0px 0px 6px 6px rgba(128, 0, 128, 1)');"""
|
600
602
|
% selector
|
601
603
|
)
|
602
|
-
|
604
|
+
with suppress(Exception):
|
605
|
+
execute_script(driver, script)
|
603
606
|
time.sleep(0.0181)
|
604
607
|
script = (
|
605
608
|
"""jQuery('%s').css('box-shadow',
|
606
609
|
'0px 0px 6px 6px rgba(0, 0, 255, 1)');"""
|
607
610
|
% selector
|
608
611
|
)
|
609
|
-
|
612
|
+
with suppress(Exception):
|
613
|
+
execute_script(driver, script)
|
610
614
|
time.sleep(0.0181)
|
611
615
|
script = (
|
612
616
|
"""jQuery('%s').css('box-shadow',
|
613
617
|
'0px 0px 6px 6px rgba(0, 255, 0, 1)');"""
|
614
618
|
% selector
|
615
619
|
)
|
616
|
-
|
620
|
+
with suppress(Exception):
|
621
|
+
execute_script(driver, script)
|
617
622
|
time.sleep(0.0181)
|
618
623
|
script = (
|
619
624
|
"""jQuery('%s').css('box-shadow',
|
620
625
|
'0px 0px 6px 6px rgba(128, 128, 0, 1)');"""
|
621
626
|
% selector
|
622
627
|
)
|
623
|
-
|
628
|
+
with suppress(Exception):
|
629
|
+
execute_script(driver, script)
|
624
630
|
time.sleep(0.0181)
|
625
631
|
script = (
|
626
632
|
"""jQuery('%s').css('box-shadow',
|
627
633
|
'0px 0px 6px 6px rgba(128, 0, 128, 1)');"""
|
628
634
|
% selector
|
629
635
|
)
|
630
|
-
|
636
|
+
with suppress(Exception):
|
637
|
+
execute_script(driver, script)
|
631
638
|
time.sleep(0.0181)
|
632
639
|
script = """jQuery('%s').css('box-shadow', '%s');""" % (selector, o_bs)
|
633
|
-
|
640
|
+
with suppress(Exception):
|
641
|
+
execute_script(driver, script)
|
634
642
|
|
635
643
|
|
636
644
|
def add_css_link(driver, css_link):
|
@@ -924,9 +932,20 @@ def post_message(driver, message, msg_dur=None, style="info"):
|
|
924
932
|
"""hideAfter: %s, hideOnNavigate: true});"""
|
925
933
|
% (message, style, msg_dur)
|
926
934
|
)
|
935
|
+
retry = False
|
927
936
|
try:
|
928
937
|
execute_script(driver, messenger_script)
|
938
|
+
except TypeError as e:
|
939
|
+
if (
|
940
|
+
shared_utils.is_cdp_swap_needed(driver)
|
941
|
+
and "cannot unpack non-iterable" in str(e)
|
942
|
+
):
|
943
|
+
pass
|
944
|
+
else:
|
945
|
+
retry = True
|
929
946
|
except Exception:
|
947
|
+
retry = True
|
948
|
+
if retry:
|
930
949
|
activate_messenger(driver)
|
931
950
|
set_messenger_theme(driver)
|
932
951
|
try:
|
@@ -1273,7 +1292,10 @@ def slow_scroll_to_element(driver, element, *args, **kwargs):
|
|
1273
1292
|
scroll_position = execute_script(driver, "return window.scrollY;")
|
1274
1293
|
element_location_y = None
|
1275
1294
|
try:
|
1276
|
-
|
1295
|
+
if shared_utils.is_cdp_swap_needed(driver):
|
1296
|
+
element.get_position().y
|
1297
|
+
else:
|
1298
|
+
element_location_y = element.location["y"]
|
1277
1299
|
except Exception:
|
1278
1300
|
element.location_once_scrolled_into_view
|
1279
1301
|
return
|
@@ -208,7 +208,6 @@ class Base(Plugin):
|
|
208
208
|
self.duration = float(0)
|
209
209
|
self.page_results_list = []
|
210
210
|
self.test_count = 0
|
211
|
-
self.import_error = False
|
212
211
|
log_path = constants.Logs.LATEST + "/"
|
213
212
|
archive_logs = options.archive_logs
|
214
213
|
log_helper.log_folder_setup(log_path, archive_logs)
|
@@ -238,6 +237,7 @@ class Base(Plugin):
|
|
238
237
|
)
|
239
238
|
else:
|
240
239
|
variables = {}
|
240
|
+
test.test.test_id = test.id()
|
241
241
|
test.test.is_nosetest = True
|
242
242
|
test.test.environment = self.options.environment
|
243
243
|
test.test.env = self.options.environment # Add a shortened version
|
@@ -263,17 +263,16 @@ class Base(Plugin):
|
|
263
263
|
)
|
264
264
|
log_helper.clear_empty_logs()
|
265
265
|
if self.report_on:
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
)
|
266
|
+
report_helper.add_bad_page_log_file(self.page_results_list)
|
267
|
+
report_log_path = report_helper.archive_new_report_logs()
|
268
|
+
report_helper.build_report(
|
269
|
+
report_log_path,
|
270
|
+
self.page_results_list,
|
271
|
+
self.successes,
|
272
|
+
self.failures,
|
273
|
+
self.options.browser,
|
274
|
+
self.show_report,
|
275
|
+
)
|
277
276
|
|
278
277
|
def addSuccess(self, test, capt):
|
279
278
|
if self.report_on:
|
@@ -293,9 +292,6 @@ class Base(Plugin):
|
|
293
292
|
"%.2fs" % (float(time.time()) - float(self.start_time))
|
294
293
|
)
|
295
294
|
if test.id() == "nose.failure.Failure.runTest":
|
296
|
-
print(">>> ERROR: Could not locate tests to run!")
|
297
|
-
print(">>> The Test Report WILL NOT be generated!")
|
298
|
-
self.import_error = True
|
299
295
|
return
|
300
296
|
self.failures.append(test.id())
|
301
297
|
self.page_results_list.append(
|
@@ -314,6 +310,7 @@ class Base(Plugin):
|
|
314
310
|
test._log_fail_data()
|
315
311
|
sb_config._excinfo_tb = err
|
316
312
|
log_path = None
|
313
|
+
source = None
|
317
314
|
if hasattr(sb_config, "_test_logpath"):
|
318
315
|
log_path = sb_config._test_logpath
|
319
316
|
if hasattr(sb_config, "_last_page_source"):
|
@@ -1309,6 +1309,7 @@ class SeleniumBrowser(Plugin):
|
|
1309
1309
|
test.test.dashboard = False
|
1310
1310
|
test.test._multithreaded = False
|
1311
1311
|
test.test._reuse_session = False
|
1312
|
+
sb_config.recorder_mode = test.test.recorder_mode
|
1312
1313
|
sb_config.no_screenshot = test.test.no_screenshot_after_test
|
1313
1314
|
if test.test.servername != "localhost":
|
1314
1315
|
# Using Selenium Grid
|
@@ -265,6 +265,8 @@ class Browser:
|
|
265
265
|
:param new_window: Open new window
|
266
266
|
:return: Page
|
267
267
|
"""
|
268
|
+
if url and ":" not in url:
|
269
|
+
url = "https://" + url
|
268
270
|
if new_tab or new_window:
|
269
271
|
# Create new target using the browser session.
|
270
272
|
target_id = await self.connection.send(
|