seleniumbase 4.56.1__tar.gz → 4.56.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {seleniumbase-4.56.1/seleniumbase.egg-info → seleniumbase-4.56.3}/PKG-INFO +85 -47
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/README.md +70 -35
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/requirements.txt +8 -7
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/__version__.py +1 -1
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/common/decorators.py +17 -1
- {seleniumbase-4.56.1 → seleniumbase-4.56.3/seleniumbase.egg-info}/PKG-INFO +85 -47
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase.egg-info/requires.txt +20 -9
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/setup.py +14 -11
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/.gitignore +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/LICENSE +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/MANIFEST.in +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/install.sh +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/mcp_servers/__init__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/mcp_servers/server.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/pyproject.toml +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/pytest.ini +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/sbase/__init__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/sbase/__main__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/sbase/steps.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/__init__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/behave/behave_sb.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/common/exceptions.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/config/proxy_list.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/config/settings.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/console_scripts/run.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/console_scripts/sb_install.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/console_scripts/sb_recorder.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/core/browser_launcher.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/core/detect_b_ver.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/core/log_helper.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/core/mysql.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/core/nest_asyncio.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/core/proxy_helper.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/core/recorder_helper.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/core/report_helper.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/core/sb_cdp.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/core/sb_driver.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/drivers/brave_drivers/__init__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/drivers/chromium_drivers/__init__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/drivers/comet_drivers/__init__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/drivers/opera_drivers/__init__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/extensions/__init__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/fixtures/__init__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/fixtures/base_case.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/fixtures/constants.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/fixtures/js_utils.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/fixtures/page_actions.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/fixtures/page_utils.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/fixtures/shared_utils.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/fixtures/xpath_to_css.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/js_code/__init__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/masterqa/__init__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/masterqa/master_qa.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/plugins/__init__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/plugins/base_plugin.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/plugins/driver_manager.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/plugins/pytest_plugin.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/plugins/sb_manager.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/plugins/selenium_plugin.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/resources/__init__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/translate/master_dict.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/undetected/__init__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/undetected/cdp.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/undetected/cdp_driver/config.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/undetected/cdp_driver/element.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/undetected/patcher.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/undetected/webelement.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/utilities/__init__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase.egg-info/SOURCES.txt +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/setup.cfg +0 -0
- {seleniumbase-4.56.1 → seleniumbase-4.56.3}/virtualenv_install.sh +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: seleniumbase
|
|
3
|
-
Version: 4.56.
|
|
3
|
+
Version: 4.56.3
|
|
4
4
|
Summary: SeleniumBase is a framework for web crawling, scraping, and testing. Supports pytest. CDP Mode adds stealth. Includes many tools.
|
|
5
5
|
Home-page: https://github.com/seleniumbase/SeleniumBase
|
|
6
6
|
Author: Michael Mintz
|
|
@@ -58,17 +58,17 @@ Classifier: Topic :: Utilities
|
|
|
58
58
|
Requires-Python: >=3.10
|
|
59
59
|
Description-Content-Type: text/markdown
|
|
60
60
|
License-File: LICENSE
|
|
61
|
-
Requires-Dist: pip>=26.2.
|
|
61
|
+
Requires-Dist: pip>=26.2.2
|
|
62
62
|
Requires-Dist: packaging>=26.3
|
|
63
|
-
Requires-Dist: setuptools>=84.
|
|
63
|
+
Requires-Dist: setuptools>=84.2.1
|
|
64
64
|
Requires-Dist: wheel>=0.48.0
|
|
65
65
|
Requires-Dist: attrs>=26.1.0
|
|
66
|
-
Requires-Dist: certifi>=2026.
|
|
66
|
+
Requires-Dist: certifi>=2026.10.19
|
|
67
67
|
Requires-Dist: exceptiongroup>=1.3.1
|
|
68
68
|
Requires-Dist: websockets~=16.1.1; python_version == "3.10"
|
|
69
|
-
Requires-Dist: websockets>=
|
|
69
|
+
Requires-Dist: websockets>=17.3; python_version >= "3.11"
|
|
70
70
|
Requires-Dist: filelock==4.1.0; python_version == "3.10"
|
|
71
|
-
Requires-Dist: filelock>=4.
|
|
71
|
+
Requires-Dist: filelock>=4.2.4; python_version >= "3.11"
|
|
72
72
|
Requires-Dist: fasteners>=0.20
|
|
73
73
|
Requires-Dist: mycdp>=1.4.0
|
|
74
74
|
Requires-Dist: pynose>=1.5.5
|
|
@@ -77,7 +77,7 @@ Requires-Dist: sbvirtualdisplay>=1.4.0
|
|
|
77
77
|
Requires-Dist: MarkupSafe>=3.0.4
|
|
78
78
|
Requires-Dist: Jinja2>=3.1.6
|
|
79
79
|
Requires-Dist: six>=1.17.0
|
|
80
|
-
Requires-Dist: parse>=1.22.
|
|
80
|
+
Requires-Dist: parse>=1.22.4
|
|
81
81
|
Requires-Dist: parse-type>=0.6.6
|
|
82
82
|
Requires-Dist: colorama>=0.4.6
|
|
83
83
|
Requires-Dist: psutil>=7.2.2
|
|
@@ -103,7 +103,8 @@ Requires-Dist: cssselect<2,>=1.6.0; python_version >= "3.11"
|
|
|
103
103
|
Requires-Dist: sortedcontainers==2.4.0
|
|
104
104
|
Requires-Dist: execnet==2.1.2
|
|
105
105
|
Requires-Dist: iniconfig~=2.3.1
|
|
106
|
-
Requires-Dist: pluggy==1.6.0
|
|
106
|
+
Requires-Dist: pluggy==1.6.0; python_version < "3.11"
|
|
107
|
+
Requires-Dist: pluggy<1.8,>=1.6.0; python_version >= "3.11"
|
|
107
108
|
Requires-Dist: pytest==8.4.2; python_version < "3.11"
|
|
108
109
|
Requires-Dist: pytest==9.1.1; python_version >= "3.11"
|
|
109
110
|
Requires-Dist: pytest-html==4.0.2
|
|
@@ -145,19 +146,21 @@ Requires-Dist: cryptography==50.0.2; extra == "pdfminer"
|
|
|
145
146
|
Requires-Dist: cffi==2.1.1; extra == "pdfminer"
|
|
146
147
|
Requires-Dist: pycparser==3.11; extra == "pdfminer"
|
|
147
148
|
Provides-Extra: pillow
|
|
148
|
-
Requires-Dist: Pillow>=12.3.0; extra == "pillow"
|
|
149
|
+
Requires-Dist: Pillow>=12.3.0; python_version == "3.10" and extra == "pillow"
|
|
150
|
+
Requires-Dist: Pillow>=13.0.0; python_version >= "3.11" and extra == "pillow"
|
|
149
151
|
Provides-Extra: pip-system-certs
|
|
150
152
|
Requires-Dist: pip-system-certs>=4.0; platform_system == "Windows" and extra == "pip-system-certs"
|
|
151
153
|
Provides-Extra: proxy
|
|
152
154
|
Requires-Dist: proxy.py==2.4.3; extra == "proxy"
|
|
153
155
|
Provides-Extra: playwright
|
|
154
|
-
Requires-Dist: playwright>=1.
|
|
156
|
+
Requires-Dist: playwright>=1.64.0; extra == "playwright"
|
|
155
157
|
Requires-Dist: greenlet>=3.5.6; extra == "playwright"
|
|
156
|
-
Requires-Dist: pyee>=13.0.1; extra == "playwright"
|
|
158
|
+
Requires-Dist: pyee>=13.0.1; python_version < "3.12" and extra == "playwright"
|
|
159
|
+
Requires-Dist: pyee>=14.0.0; python_version >= "3.12" and extra == "playwright"
|
|
157
160
|
Provides-Extra: pyautogui
|
|
158
161
|
Requires-Dist: PyAutoGUI>=0.9.54; platform_system != "Linux" and extra == "pyautogui"
|
|
159
162
|
Provides-Extra: uv
|
|
160
|
-
Requires-Dist: uv>=0.13.
|
|
163
|
+
Requires-Dist: uv>=0.13.4; extra == "uv"
|
|
161
164
|
Dynamic: author
|
|
162
165
|
Dynamic: author-email
|
|
163
166
|
Dynamic: classifier
|
|
@@ -184,11 +187,18 @@ Dynamic: summary
|
|
|
184
187
|
|
|
185
188
|
<h1 align="center">📊 SeleniumBase</h1>
|
|
186
189
|
|
|
187
|
-
<
|
|
190
|
+
<h3 align="center">One framework for browser automation, web scraping, and testing.<br /></h3>
|
|
188
191
|
|
|
189
|
-
<p align="center"><
|
|
190
|
-
|
|
191
|
-
|
|
192
|
+
<p align="center"><b align="center">Includes stealth options for bypassing bot-detection and CAPTCHAs.<br /></b></p>
|
|
193
|
+
|
|
194
|
+
<p align="center">
|
|
195
|
+
<a href="https://pypi.python.org/pypi/seleniumbase" target="_blank" rel="noopener"><img src="https://img.shields.io/pypi/v/seleniumbase.svg?style=flat-square&color=3399EE" alt="PyPI version" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/actions" target="_blank" rel="noopener"><img src="https://img.shields.io/github/actions/workflow/status/seleniumbase/SeleniumBase/python-package.yml?branch=master&style=flat-square&label=CI" alt="SeleniumBase GitHub Actions" height="20" /></a> <a href="https://seleniumbase.io" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg?style=flat-square" alt="SeleniumBase Docs" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/LICENSE" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/license-MIT-33A6C6.svg?style=flat-square" title="SeleniumBase" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/mcp_servers" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/MCP-tool_catalog-7C6EE5?style=flat-square" height="20" /></a> <a href="https://pepy.tech/projects/seleniumbase?timeRange=threeMonths&category=version&includeCIDownloads=true&granularity=daily&viewType=line&versions=*" target="_blank" rel="noopener"><img src="https://static.pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" height="20" /></a><br />
|
|
196
|
+
<a href="https://www.youtube.com/playlist?list=PLp9uKicxkBc5UIlGi2BuE3aWC7JyXpD3m" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/docs-📺-D844E8.svg?style=flat-square&logo=YouTube&logoColor=white&label=YouTube" alt="YouTube Channel" height="20" /></a> <a href="https://www.facebook.com/SeleniumBase/" target="_blank" rel="noopener"> <img src="https://img.shields.io/badge/Facebook-4K_followers-1877F2?style=flat-square&logo=facebook&logoColor=white" alt="SeleniumBase Facebook Followers" height="20" /></a> <a href="https://x.com/seleniumbase" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/-1K_followers-1DA1F2?style=flat-square&logo=x&logoColor=white&labelColor=555555" alt="SeleniumBase X Followers" height="20" /></a> <a href="https://discord.gg/EdhQTn3EyE" target="_blank" rel="noopener"><img src="https://img.shields.io/discord/727927627830001734?style=flat-square&color=7289DA&label=Discord&logo=discord&logoColor=white" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase" target="_blank" rel="noopener"><img src="https://badgen.net/github/stars/seleniumbase/SeleniumBase" title="Stars" height="20" /></a>
|
|
197
|
+
</p>
|
|
198
|
+
|
|
199
|
+
<p align="center">
|
|
200
|
+
<a href="https://trendshift.io/repositories/12493?utm_source=repository-badge&utm_medium=badge&utm_campaign=badge-repository-12493" target="_blank" rel="noopener"><img src="https://trendshift.io/api/badge/repositories/12493" alt="seleniumbase%2SeleniumBase | Trendshift" width="250" height="55"/></a>
|
|
201
|
+
</p>
|
|
192
202
|
|
|
193
203
|
<p align="center">
|
|
194
204
|
<a href="#python_installation">🚀 Start</a> |
|
|
@@ -227,13 +237,41 @@ Dynamic: summary
|
|
|
227
237
|
|
|
228
238
|
--------
|
|
229
239
|
|
|
230
|
-
🥷 <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md"><
|
|
240
|
+
🥷 <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md"><a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a> makes browser automation undetectable to anti-bot services and <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/ReadMe.md">adds <b>stealth</b> to stock <span translate="no">Playwright</span></a>. Also includes code for bypassing CAPTCHAs.
|
|
231
241
|
|
|
232
242
|
📚 Example scripts that start or end with "<code>test</code>" are specifically designed to be run with <code><b>pytest</b></code>. Other scripts run directly with raw <code><b>python</b></code>. (Those start with "<code>raw</code>" to avoid confusion.)
|
|
233
243
|
|
|
234
244
|
--------
|
|
235
245
|
|
|
236
|
-
|
|
246
|
+
📝 Here's <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_cdp_mode.py">an example</a> with <b><code translate="no">seleniumbase</code></b> <b><code translate="no">sb_cdp</code></b> (<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#-pure-cdp-mode-sb_cdp"><i>Pure CDP Mode</i></a>):<br /><em>(It bypasses both BrowserScan AND Sannysoft Bot-Detection)</em>
|
|
247
|
+
|
|
248
|
+
```python
|
|
249
|
+
from seleniumbase import sb_cdp
|
|
250
|
+
|
|
251
|
+
sb = sb_cdp.Chrome()
|
|
252
|
+
sb.goto("https://browserscan.net/bot-detection")
|
|
253
|
+
sb.assert_element('strong:contains("Normal")')
|
|
254
|
+
sb.sleep(1)
|
|
255
|
+
sb.goto("https://bot.sannysoft.com/")
|
|
256
|
+
sb.assert_element(".passed")
|
|
257
|
+
sb.assert_element_not_visible(".failed")
|
|
258
|
+
sb.sleep(1)
|
|
259
|
+
sb.quit()
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
<p align="center">
|
|
263
|
+
<img src="https://seleniumbase.github.io/cdn/img/results_normal.jpg" width="520" style="max-width: 100% !important; height: auto !important;" alt="BrowserScan Test Results: Normal" />
|
|
264
|
+
<br /><em>(All BrowserScan bot-detection tests passed successfully)</em>
|
|
265
|
+
</p>
|
|
266
|
+
|
|
267
|
+
<p align="center">
|
|
268
|
+
<img src="https://seleniumbase.github.io/other/sannysoft_success.jpg" width="428" style="max-width: 100% !important; height: auto !important;" alt="All Sannysoft tests passed successfully" />
|
|
269
|
+
<br /><em>(All Sannysoft bot-detection tests passed successfully)</em>
|
|
270
|
+
</p>
|
|
271
|
+
|
|
272
|
+
--------
|
|
273
|
+
|
|
274
|
+
📝 Here's <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_planetmc.py">another example</a> with <b><code translate="no">seleniumbase</code></b> <b><code translate="no">sb_cdp</code></b> (<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#-pure-cdp-mode-sb_cdp"><i>Pure CDP Mode</i></a>):<br />(It performs various browser actions and bypasses a Cloudflare Turnstile)
|
|
237
275
|
|
|
238
276
|
```python
|
|
239
277
|
from seleniumbase import sb_cdp
|
|
@@ -265,14 +303,14 @@ python raw_cdp_planetmc.py
|
|
|
265
303
|
|
|
266
304
|
--------
|
|
267
305
|
|
|
268
|
-
<p align="left"
|
|
306
|
+
<p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_yc_news.py" target="_blank" rel="noopener">This script</a> scrapes Hacker News listings:</p>
|
|
269
307
|
|
|
270
308
|
```python
|
|
271
309
|
from seleniumbase import sb_cdp
|
|
272
310
|
|
|
273
311
|
sb = sb_cdp.Chrome(fast=True)
|
|
274
|
-
sb.goto("https://
|
|
275
|
-
elements = sb.find_elements("
|
|
312
|
+
sb.goto("https://hn.algolia.com/?query=seleniumbase")
|
|
313
|
+
elements = sb.find_elements("div.Story_title > a")
|
|
276
314
|
for element in elements:
|
|
277
315
|
print("* " + element.text)
|
|
278
316
|
```
|
|
@@ -287,7 +325,7 @@ python raw_cdp_yc_news.py
|
|
|
287
325
|
|
|
288
326
|
--------
|
|
289
327
|
|
|
290
|
-
<p align="left"
|
|
328
|
+
<p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_gitlab.py" target="_blank" rel="noopener">This script</a> bypasses Cloudflare's challenge page with UC + CDP Mode:</p>
|
|
291
329
|
|
|
292
330
|
```python
|
|
293
331
|
from seleniumbase import SB
|
|
@@ -348,7 +386,7 @@ sb = sb_cdp.Chrome(use_chromium=True)
|
|
|
348
386
|
|
|
349
387
|
<h3>🧪 Comprehensive E2E Testing with <code>pytest</code>:</h3>
|
|
350
388
|
|
|
351
|
-
<p align="left"
|
|
389
|
+
<p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_get_swag.py" target="_blank" rel="noopener">This script</a> tests an e-commerce site: (Runs with <b><code>pytest</code></b>):</p>
|
|
352
390
|
|
|
353
391
|
```python
|
|
354
392
|
from seleniumbase import BaseCase
|
|
@@ -382,7 +420,7 @@ pytest test_get_swag.py
|
|
|
382
420
|
|
|
383
421
|
--------
|
|
384
422
|
|
|
385
|
-
<p align="left"
|
|
423
|
+
<p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_coffee_cart.py" target="_blank" rel="noopener">This script</a> tests a different e-commerce site with <code>pytest</code>:</p>
|
|
386
424
|
|
|
387
425
|
```python
|
|
388
426
|
from seleniumbase import BaseCase
|
|
@@ -412,7 +450,7 @@ class CoffeeCartTest(BaseCase):
|
|
|
412
450
|
pytest test_coffee_cart.py --demo
|
|
413
451
|
```
|
|
414
452
|
|
|
415
|
-
<p align="left"><a href="https://seleniumbase.io/coffee/" target="_blank"><img src="https://seleniumbase.github.io/cdn/gif/coffee_cart.gif" width="500" style="max-width: 100% !important; height: auto !important;" alt="SeleniumBase Coffee Cart Test" /></a></p>
|
|
453
|
+
<p align="left"><a href="https://seleniumbase.io/coffee/" target="_blank" rel="noopener"><img src="https://seleniumbase.github.io/cdn/gif/coffee_cart.gif" width="500" style="max-width: 100% !important; height: auto !important;" alt="SeleniumBase Coffee Cart Test" /></a></p>
|
|
416
454
|
|
|
417
455
|
> <p>(<code translate="no">--demo</code> mode slows down tests and highlights actions)</p>
|
|
418
456
|
|
|
@@ -420,13 +458,13 @@ pytest test_coffee_cart.py --demo
|
|
|
420
458
|
|
|
421
459
|
<a id="multiple_examples"></a>
|
|
422
460
|
|
|
423
|
-
<p align="left"
|
|
461
|
+
<p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_demo_site.py" target="_blank" rel="noopener">This script</a> covers multiple actions with <code>pytest</code>:</p>
|
|
424
462
|
|
|
425
463
|
```zsh
|
|
426
464
|
pytest test_demo_site.py
|
|
427
465
|
```
|
|
428
466
|
|
|
429
|
-
<p align="left"><a href="https://seleniumbase.io/demo_page" target="_blank"><img src="https://seleniumbase.github.io/cdn/gif/demo_page_5.gif" width="500" style="max-width: 100% !important; height: auto !important;" alt="SeleniumBase Example" /></a></p>
|
|
467
|
+
<p align="left"><a href="https://seleniumbase.io/demo_page" target="_blank" rel="noopener"><img src="https://seleniumbase.github.io/cdn/gif/demo_page_5.gif" width="500" style="max-width: 100% !important; height: auto !important;" alt="SeleniumBase Example" /></a></p>
|
|
430
468
|
|
|
431
469
|
> Easy to type, click, select, toggle, drag & drop, and more.
|
|
432
470
|
|
|
@@ -457,7 +495,7 @@ pytest test_demo_site.py
|
|
|
457
495
|
<summary> ▶️ How is <b>SeleniumBase</b> different from raw Selenium? (<b>click to expand</b>)</summary>
|
|
458
496
|
<div>
|
|
459
497
|
|
|
460
|
-
<p>💡 SeleniumBase is a Python framework for browser automation and testing. SeleniumBase uses <a href="https://www.w3.org/TR/webdriver2/#endpoints" target="_blank">Selenium/WebDriver</a> APIs and incorporates test-runners such as <code translate="no">pytest</code>, <code translate="no">pynose</code>, and <code translate="no">behave</code> to provide organized structure, test discovery, test execution, test state (<i>eg. passed, failed, or skipped</i>), and command-line options for changing default settings (<i>eg. browser selection</i>). With raw Selenium, you would need to set up your own options-parser for configuring tests from the command-line.</p>
|
|
498
|
+
<p>💡 SeleniumBase is a Python framework for browser automation and testing. SeleniumBase uses <a href="https://www.w3.org/TR/webdriver2/#endpoints" target="_blank" rel="noopener">Selenium/WebDriver</a> APIs and incorporates test-runners such as <code translate="no">pytest</code>, <code translate="no">pynose</code>, and <code translate="no">behave</code> to provide organized structure, test discovery, test execution, test state (<i>eg. passed, failed, or skipped</i>), and command-line options for changing default settings (<i>eg. browser selection</i>). With raw Selenium, you would need to set up your own options-parser for configuring tests from the command-line.</p>
|
|
461
499
|
|
|
462
500
|
<p>💡 SeleniumBase's driver manager gives you more control over automatic driver downloads. (Use <code translate="no">--driver-version=VER</code> with your <code translate="no">pytest</code> run command to specify the version.) By default, SeleniumBase will download a driver version that matches your major browser version if not set.</p>
|
|
463
501
|
|
|
@@ -479,7 +517,7 @@ With raw Selenium, that requires more code:<br />
|
|
|
479
517
|
|
|
480
518
|
<p>💡 SeleniumBase gives you clean error output when a test fails. With raw Selenium, error messages can get very messy.</p>
|
|
481
519
|
|
|
482
|
-
<p>💡 SeleniumBase gives you the option to generate a dashboard and reports for tests. It also saves screenshots from failing tests to the <code translate="no">./latest_logs/</code> folder. Raw <a href="https://www.selenium.dev/documentation/webdriver/" translate="no" target="_blank">Selenium</a> does not have these options out-of-the-box.</p>
|
|
520
|
+
<p>💡 SeleniumBase gives you the option to generate a dashboard and reports for tests. It also saves screenshots from failing tests to the <code translate="no">./latest_logs/</code> folder. Raw <a href="https://www.selenium.dev/documentation/webdriver/" translate="no" target="_blank" rel="noopener">Selenium</a> does not have these options out-of-the-box.</p>
|
|
483
521
|
|
|
484
522
|
<p>💡 SeleniumBase includes desktop GUI apps for running tests, such as <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/commander.md" translate="no">SeleniumBase Commander</a> for <code translate="no">pytest</code> and <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/behave_bdd/ReadMe.md" translate="no">SeleniumBase Behave GUI</a> for <code translate="no">behave</code>.</p>
|
|
485
523
|
|
|
@@ -557,7 +595,7 @@ finally:
|
|
|
557
595
|
<a id="python_installation"></a>
|
|
558
596
|
<h2><img src="https://seleniumbase.github.io/cdn/img/python_logo.png" title="SeleniumBase" width="42" /> Set up Python & Git:</h2>
|
|
559
597
|
|
|
560
|
-
<a href="https://pypi.org/project/seleniumbase/" target="_blank"><img src="https://img.shields.io/pypi/pyversions/seleniumbase.svg?color=22AAEE&logo=python&logoColor=FEDC54" title="Supported Python Versions" /></a>
|
|
598
|
+
<a href="https://pypi.org/project/seleniumbase/" target="_blank" rel="noopener"><img src="https://img.shields.io/pypi/pyversions/seleniumbase.svg?color=22AAEE&logo=python&logoColor=FEDC54" title="Supported Python Versions" /></a>
|
|
561
599
|
|
|
562
600
|
🔵 Add <b><a href="https://www.python.org/downloads/">Python</a></b> and <b><a href="https://git-scm.com/">Git</a></b> to your System PATH.
|
|
563
601
|
|
|
@@ -764,7 +802,7 @@ self.assert_no_js_errors() # Verify there are no JS errors.
|
|
|
764
802
|
<a id="fun_facts"></a>
|
|
765
803
|
<h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" height="32" /> Fun Facts / Learn More:</h2>
|
|
766
804
|
|
|
767
|
-
<p>✅ SeleniumBase automatically handles common <a href="https://www.selenium.dev/documentation/webdriver/" target="_blank">WebDriver</a> actions such as launching web browsers before tests, saving screenshots during failures, and closing web browsers after tests.</p>
|
|
805
|
+
<p>✅ SeleniumBase automatically handles common <a href="https://www.selenium.dev/documentation/webdriver/" target="_blank" rel="noopener">WebDriver</a> actions such as launching web browsers before tests, saving screenshots during failures, and closing web browsers after tests.</p>
|
|
768
806
|
|
|
769
807
|
<p>✅ SeleniumBase lets you customize tests via <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/customizing_test_runs.md">command-line options</a>.</p>
|
|
770
808
|
|
|
@@ -774,7 +812,7 @@ self.assert_no_js_errors() # Verify there are no JS errors.
|
|
|
774
812
|
self.type("input", "dogs\n") # (The "\n" presses ENTER)
|
|
775
813
|
```
|
|
776
814
|
|
|
777
|
-
Most SeleniumBase scripts can be run with <code translate="no">pytest</code>, <code translate="no">pynose</code>, or pure <code translate="no">python</code>. Not all test runners can run all test formats. For example, tests that use the `sb` pytest fixture can only be run with `pytest`. (See <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md">Syntax Formats</a>) There's also a <a href="https://behave.readthedocs.io/en/stable/gherkin.html#features" target="_blank">Gherkin</a> test format that runs with <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/behave_bdd/ReadMe.md">behave</a>.
|
|
815
|
+
Most SeleniumBase scripts can be run with <code translate="no">pytest</code>, <code translate="no">pynose</code>, or pure <code translate="no">python</code>. Not all test runners can run all test formats. For example, tests that use the `sb` pytest fixture can only be run with `pytest`. (See <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md">Syntax Formats</a>) There's also a <a href="https://behave.readthedocs.io/en/stable/gherkin.html#features" target="_blank" rel="noopener">Gherkin</a> test format that runs with <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/behave_bdd/ReadMe.md">behave</a>.
|
|
778
816
|
|
|
779
817
|
```zsh
|
|
780
818
|
pytest coffee_cart_tests.py --rs
|
|
@@ -820,7 +858,7 @@ pynose [FILE_NAME.py]:[CLASS_NAME].[METHOD_NAME]
|
|
|
820
858
|
<p><b>Systems:</b> Linux/Ubuntu, macOS, and Windows.</p>
|
|
821
859
|
|
|
822
860
|
✅ SeleniumBase works on all popular CI/CD platforms:
|
|
823
|
-
<p><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/github/workflows/ReadMe.md"><img alt="GitHub Actions integration" src="https://img.shields.io/badge/GitHub_Actions-12B2C2.svg?logo=GitHubActions&logoColor=CFFFC2" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/azure/jenkins/ReadMe.md"><img alt="Jenkins integration" src="https://img.shields.io/badge/Jenkins-32B242.svg?logo=jenkins&logoColor=white" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/azure/azure_pipelines/ReadMe.md"><img alt="Azure integration" src="https://img.shields.io/badge/Azure-2288EE.svg?logo=AzurePipelines&logoColor=white" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/google_cloud/ReadMe.md"><img alt="Google Cloud integration" src="https://img.shields.io/badge/Google_Cloud-11CAE8.svg?logo=GoogleCloud&logoColor=EE0066" /></a> <a href="#utilizing_advanced_features"><img alt="AWS integration" src="https://img.shields.io/badge/AWS-4488DD.svg?logo=AmazonAWS&logoColor=FFFF44" /></a> <a href="https://en.wikipedia.org/wiki/Personal_computer" target="_blank"><img alt="Your Computer" src="https://img.shields.io/badge/💻_Your_Computer-44E6E6.svg" /></a></p>
|
|
861
|
+
<p><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/github/workflows/ReadMe.md"><img alt="GitHub Actions integration" src="https://img.shields.io/badge/GitHub_Actions-12B2C2.svg?logo=GitHubActions&logoColor=CFFFC2" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/azure/jenkins/ReadMe.md"><img alt="Jenkins integration" src="https://img.shields.io/badge/Jenkins-32B242.svg?logo=jenkins&logoColor=white" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/azure/azure_pipelines/ReadMe.md"><img alt="Azure integration" src="https://img.shields.io/badge/Azure-2288EE.svg?logo=AzurePipelines&logoColor=white" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/google_cloud/ReadMe.md"><img alt="Google Cloud integration" src="https://img.shields.io/badge/Google_Cloud-11CAE8.svg?logo=GoogleCloud&logoColor=EE0066" /></a> <a href="#utilizing_advanced_features"><img alt="AWS integration" src="https://img.shields.io/badge/AWS-4488DD.svg?logo=AmazonAWS&logoColor=FFFF44" /></a> <a href="https://en.wikipedia.org/wiki/Personal_computer" target="_blank" rel="noopener"><img alt="Your Computer" src="https://img.shields.io/badge/💻_Your_Computer-44E6E6.svg" /></a></p>
|
|
824
862
|
|
|
825
863
|
<p>✅ SeleniumBase includes an automated/manual hybrid solution called <b><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/master_qa/ReadMe.md">MasterQA</a></b> to speed up manual testing with automation while manual testers handle validation.</p>
|
|
826
864
|
|
|
@@ -1281,13 +1319,13 @@ pytest user_agent_test.py --agent="Mozilla/5.0 (Nintendo 3DS; U; ; en) Version/1
|
|
|
1281
1319
|
<summary> ▶️ Here are some things you can do to set up a production environment for your testing. (<b>click to expand</b>)</summary>
|
|
1282
1320
|
|
|
1283
1321
|
<ul>
|
|
1284
|
-
<li>You can set up a <a href="https://jenkins.io/" target="_blank">Jenkins</a> build server for running tests at regular intervals. For a real-world Jenkins example of headless browser automation in action, check out the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/azure/jenkins/ReadMe.md">SeleniumBase Jenkins example on Azure</a> or the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/google_cloud/ReadMe.md">SeleniumBase Jenkins example on Google Cloud</a>.</li>
|
|
1322
|
+
<li>You can set up a <a href="https://jenkins.io/" target="_blank" rel="noopener">Jenkins</a> build server for running tests at regular intervals. For a real-world Jenkins example of headless browser automation in action, check out the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/azure/jenkins/ReadMe.md">SeleniumBase Jenkins example on Azure</a> or the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/google_cloud/ReadMe.md">SeleniumBase Jenkins example on Google Cloud</a>.</li>
|
|
1285
1323
|
|
|
1286
|
-
<li>You can use <a href="https://selenium.dev/documentation/en/grid/" target="_blank">the Selenium Grid</a> to scale your testing by distributing tests on several machines with parallel execution. To do this, check out the <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/seleniumbase/utilities/selenium_grid">SeleniumBase selenium_grid folder</a>, which should have everything you need, including the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/utilities/selenium_grid/ReadMe.md">Selenium Grid ReadMe</a> to help you get started.</li>
|
|
1324
|
+
<li>You can use <a href="https://selenium.dev/documentation/en/grid/" target="_blank" rel="noopener">the Selenium Grid</a> to scale your testing by distributing tests on several machines with parallel execution. To do this, check out the <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/seleniumbase/utilities/selenium_grid">SeleniumBase selenium_grid folder</a>, which should have everything you need, including the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/utilities/selenium_grid/ReadMe.md">Selenium Grid ReadMe</a> to help you get started.</li>
|
|
1287
1325
|
|
|
1288
1326
|
<li>If you're using the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/mysql_installation.md">SeleniumBase MySQL feature</a> to save results from tests running on a server machine, you can install <a href="https://dev.mysql.com/downloads/tools/workbench/">MySQL Workbench</a> to help you read & write from your DB more easily.</li>
|
|
1289
1327
|
|
|
1290
|
-
<li>If you're using AWS, you can set up an <a href="https://aws.amazon.com/s3/" target="_blank">Amazon S3</a> account for saving log files and screenshots from your tests. To activate this feature, modify <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/config/settings.py">settings.py</a> with connection details in the S3 section, and add <code translate="no">--with-s3-logging</code> on the command-line when running your tests.</li>
|
|
1328
|
+
<li>If you're using AWS, you can set up an <a href="https://aws.amazon.com/s3/" target="_blank" rel="noopener">Amazon S3</a> account for saving log files and screenshots from your tests. To activate this feature, modify <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/config/settings.py">settings.py</a> with connection details in the S3 section, and add <code translate="no">--with-s3-logging</code> on the command-line when running your tests.</li>
|
|
1291
1329
|
</ul>
|
|
1292
1330
|
|
|
1293
1331
|
Here's an example of running tests with some additional features enabled:
|
|
@@ -1345,7 +1383,7 @@ self.click("div#my_id")
|
|
|
1345
1383
|
self.type("input#id_value", "2012")
|
|
1346
1384
|
```
|
|
1347
1385
|
|
|
1348
|
-
You can also use <code translate="no">self.add_text()</code> or the <a href="https://www.selenium.dev/documentation/webdriver/" target="_blank">WebDriver</a> <code translate="no">.send_keys()</code> command, but those won't clear the text box first if there's already text inside.
|
|
1386
|
+
You can also use <code translate="no">self.add_text()</code> or the <a href="https://www.selenium.dev/documentation/webdriver/" target="_blank" rel="noopener">WebDriver</a> <code translate="no">.send_keys()</code> command, but those won't clear the text box first if there's already text inside.
|
|
1349
1387
|
|
|
1350
1388
|
🔵 **Getting the text from an element on a page:**
|
|
1351
1389
|
|
|
@@ -1623,9 +1661,9 @@ class DeferredAssertTests(BaseCase):
|
|
|
1623
1661
|
<code translate="no">deferred_assert_element()</code> and <code translate="no">deferred_assert_text()</code> will save any exceptions that would be raised.
|
|
1624
1662
|
To flush out all the failed deferred asserts into a single exception, make sure to call <code translate="no">self.process_deferred_asserts()</code> at the end of your test method. If your test hits multiple pages, you can call <code translate="no">self.process_deferred_asserts()</code> before navigating to a new page so that the screenshot from your log files matches the URL where the deferred asserts were made.
|
|
1625
1663
|
|
|
1626
|
-
<h3>🔵 How to access raw <a href="https://www.selenium.dev/documentation/webdriver/" target="_blank">WebDriver</a>:</h3>
|
|
1664
|
+
<h3>🔵 How to access raw <a href="https://www.selenium.dev/documentation/webdriver/" target="_blank" rel="noopener">WebDriver</a>:</h3>
|
|
1627
1665
|
|
|
1628
|
-
<p>If you need access to any commands that come with standard <a href="https://www.selenium.dev/documentation/webdriver/" target="_blank">WebDriver</a>, you can call them directly like this:</p>
|
|
1666
|
+
<p>If you need access to any commands that come with standard <a href="https://www.selenium.dev/documentation/webdriver/" target="_blank" rel="noopener">WebDriver</a>, you can call them directly like this:</p>
|
|
1629
1667
|
|
|
1630
1668
|
```python
|
|
1631
1669
|
self.driver.delete_all_cookies()
|
|
@@ -1649,7 +1687,7 @@ pytest --reruns=1 --reruns-delay=1
|
|
|
1649
1687
|
|
|
1650
1688
|
> "Catch bugs in QA before deploying code to Production!"
|
|
1651
1689
|
|
|
1652
|
-
<p align="left"><a href="https://seleniumbase.io/error_page" target="_blank"><img src="https://seleniumbase.github.io/cdn/gif/error_page.gif" alt="Catch bugs in QA before deploying code to Production!" title="Catch bugs in QA before deploying code to Production!" /></a></p>
|
|
1690
|
+
<p align="left"><a href="https://seleniumbase.io/error_page" target="_blank" rel="noopener"><img src="https://seleniumbase.github.io/cdn/gif/error_page.gif" alt="Catch bugs in QA before deploying code to Production!" title="Catch bugs in QA before deploying code to Production!" /></a></p>
|
|
1653
1691
|
|
|
1654
1692
|
--------
|
|
1655
1693
|
|
|
@@ -1662,20 +1700,20 @@ pytest --reruns=1 --reruns-delay=1
|
|
|
1662
1700
|
|
|
1663
1701
|
<p align="left"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/sb_logo_10t.png" alt="SeleniumBase" title="SeleniumBase" width="274" style="max-width: 100% !important; height: auto !important;" /></a></p>
|
|
1664
1702
|
|
|
1665
|
-
<a href="https://pypi.org/project/seleniumbase/" target="_blank"><img src="https://img.shields.io/pypi/pyversions/seleniumbase.svg?color=22AAEE&logo=python&logoColor=FEDC54" title="Supported Python Versions" height="20" /></a>
|
|
1703
|
+
<a href="https://pypi.org/project/seleniumbase/" target="_blank" rel="noopener"><img src="https://img.shields.io/pypi/pyversions/seleniumbase.svg?color=22AAEE&logo=python&logoColor=FEDC54" title="Supported Python Versions" height="20" /></a>
|
|
1666
1704
|
|
|
1667
1705
|
<p><div>
|
|
1668
|
-
<span><a href="https://www.youtube.com/playlist?list=PLp9uKicxkBc5UIlGi2BuE3aWC7JyXpD3m"><img src="https://seleniumbase.github.io/cdn/img/youtube.png" title="SeleniumBase Playlist on YouTube" alt="SeleniumBase Playlist on YouTube" width="70" /></a></span>
|
|
1706
|
+
<span><a href="https://www.youtube.com/playlist?list=PLp9uKicxkBc5UIlGi2BuE3aWC7JyXpD3m" target="_blank" rel="noopener"><img src="https://seleniumbase.github.io/cdn/img/youtube.png" title="SeleniumBase Playlist on YouTube" alt="SeleniumBase Playlist on YouTube" width="70" /></a></span>
|
|
1669
1707
|
<span><a href="https://github.com/seleniumbase/SeleniumBase"><img src="https://seleniumbase.github.io/img/social/share_github.svg" title="SeleniumBase on GitHub" alt="SeleniumBase on GitHub" width="64" /></a></span>
|
|
1670
|
-
<span><a href="https://discord.gg/EdhQTn3EyE"><img src="https://seleniumbase.github.io/other/discord_icon.png" title="SeleniumBase on Discord" alt="SeleniumBase on Discord" width="66" /></a></span>
|
|
1671
|
-
<span><a href="https://www.facebook.com/SeleniumBase"><img src="https://seleniumbase.io/img/social/share_facebook.svg" title="SeleniumBase on Facebook" alt="SeleniumBase on Facebook" width="62" /></a></span>
|
|
1708
|
+
<span><a href="https://discord.gg/EdhQTn3EyE" target="_blank" rel="noopener"><img src="https://seleniumbase.github.io/other/discord_icon.png" title="SeleniumBase on Discord" alt="SeleniumBase on Discord" width="66" /></a></span>
|
|
1709
|
+
<span><a href="https://www.facebook.com/SeleniumBase" target="_blank" rel="noopener"><img src="https://seleniumbase.io/img/social/share_facebook.svg" title="SeleniumBase on Facebook" alt="SeleniumBase on Facebook" width="62" /></a></span>
|
|
1672
1710
|
</div></p>
|
|
1673
1711
|
|
|
1674
|
-
<p><div><b><a href="https://github.com/mdmintz">https://github.com/mdmintz</a></b></div></p>
|
|
1712
|
+
<p><div><b><a href="https://github.com/mdmintz" target="_blank" rel="noopener">https://github.com/mdmintz</a></b></div></p>
|
|
1675
1713
|
|
|
1676
1714
|
<div><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/super_logo_sb3.png" title="SeleniumBase" width="310" style="max-width: 100% !important; height: auto !important;" /></a></div>
|
|
1677
1715
|
<div><a href="https://github.com/seleniumbase/SeleniumBase"><img src="https://img.shields.io/badge/tested%20with-SeleniumBase-04C38E.svg" alt="Tested with SeleniumBase" /></a> <img src="https://views.whatilearened.today/views/github/seleniumbase/SeleniumBase.svg" width="98px" height="20px" alt="Views" /></div>
|
|
1678
1716
|
<div><a href="https://seleniumbase.io"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg" alt="SeleniumBase Docs" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-22BBCC.svg" title="SeleniumBase" height="20" /></a> </div>
|
|
1679
1717
|
<div align="left"></div>
|
|
1680
|
-
<div><a href="https://pepy.tech/projects/seleniumbase?timeRange=threeMonths&category=version&includeCIDownloads=true&granularity=daily&viewType=line&versions=*" target="_blank"><img src="https://static.pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" height="20" /></a> <a href="https://discord.gg/EdhQTn3EyE" target="_blank"><img src="https://img.shields.io/discord/727927627830001734?color=7289DA&label=Discord&logo=discord&logoColor=white" height="20" /></a></div>
|
|
1681
|
-
<div><a href="https://www.youtube.com/@MichaelMintz"><img src="https://img.shields.io/badge/docs-MichaelMintz-
|
|
1718
|
+
<div><a href="https://pepy.tech/projects/seleniumbase?timeRange=threeMonths&category=version&includeCIDownloads=true&granularity=daily&viewType=line&versions=*" target="_blank" rel="noopener"><img src="https://static.pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" height="20" /></a> <a href="https://discord.gg/EdhQTn3EyE" target="_blank" rel="noopener"><img src="https://img.shields.io/discord/727927627830001734?color=7289DA&label=Discord&logo=discord&logoColor=white" height="20" /></a></div>
|
|
1719
|
+
<div><a href="https://www.youtube.com/@MichaelMintz" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/docs-MichaelMintz-DD3355.svg?style=flat&logo=YouTube&logoColor=white&label=YouTube" alt="YouTube Channel" height="20" /></a></div>
|