seleniumbase 4.49.2__tar.gz → 4.49.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.49.2/seleniumbase.egg-info → seleniumbase-4.49.3}/PKG-INFO +84 -84
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/README.md +77 -77
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/requirements.txt +6 -6
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/__version__.py +1 -1
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/core/sb_cdp.py +63 -22
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/fixtures/base_case.py +81 -2
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/fixtures/js_utils.py +14 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/undetected/cdp_driver/browser.py +9 -1
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/undetected/cdp_driver/element.py +5 -5
- {seleniumbase-4.49.2 → seleniumbase-4.49.3/seleniumbase.egg-info}/PKG-INFO +84 -84
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase.egg-info/requires.txt +6 -6
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/setup.py +6 -6
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/.gitignore +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/LICENSE +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/MANIFEST.in +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/install.sh +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/pyproject.toml +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/pytest.ini +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/sbase/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/sbase/__main__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/sbase/steps.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/behave/behave_sb.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/common/decorators.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/common/exceptions.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/config/proxy_list.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/config/settings.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/console_scripts/run.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/console_scripts/sb_install.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/console_scripts/sb_recorder.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/core/browser_launcher.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/core/detect_b_ver.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/core/log_helper.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/core/mysql.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/core/nest_asyncio.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/core/proxy_helper.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/core/recorder_helper.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/core/report_helper.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/core/sb_driver.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/drivers/atlas_drivers/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/drivers/brave_drivers/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/drivers/chromium_drivers/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/drivers/comet_drivers/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/drivers/opera_drivers/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/extensions/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/fixtures/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/fixtures/constants.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/fixtures/page_actions.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/fixtures/page_utils.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/fixtures/shared_utils.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/fixtures/xpath_to_css.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/js_code/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/masterqa/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/masterqa/master_qa.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/plugins/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/plugins/base_plugin.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/plugins/driver_manager.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/plugins/pytest_plugin.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/plugins/sb_manager.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/plugins/selenium_plugin.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/resources/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/translate/master_dict.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/undetected/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/undetected/cdp.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/undetected/cdp_driver/config.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/undetected/patcher.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/undetected/webelement.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/utilities/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase.egg-info/SOURCES.txt +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/setup.cfg +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.3}/virtualenv_install.sh +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: seleniumbase
|
|
3
|
-
Version: 4.49.
|
|
3
|
+
Version: 4.49.3
|
|
4
4
|
Summary: A framework for stealthy Chromium automation with CDP Mode. Includes CAPTCHA-bypass, E2E Testing, and a Playwright integration.
|
|
5
5
|
Home-page: https://github.com/seleniumbase/SeleniumBase
|
|
6
6
|
Author: Michael Mintz
|
|
@@ -75,13 +75,13 @@ Requires-Dist: fasteners>=0.20
|
|
|
75
75
|
Requires-Dist: mycdp>=1.3.7
|
|
76
76
|
Requires-Dist: pynose>=1.5.5
|
|
77
77
|
Requires-Dist: platformdirs~=4.4.0; python_version < "3.10"
|
|
78
|
-
Requires-Dist: platformdirs>=4.
|
|
78
|
+
Requires-Dist: platformdirs>=4.10.0; python_version >= "3.10"
|
|
79
79
|
Requires-Dist: typing-extensions>=4.15.0
|
|
80
80
|
Requires-Dist: sbvirtualdisplay>=1.4.0
|
|
81
81
|
Requires-Dist: MarkupSafe>=3.0.3
|
|
82
82
|
Requires-Dist: Jinja2>=3.1.6
|
|
83
83
|
Requires-Dist: six>=1.17.0
|
|
84
|
-
Requires-Dist: parse>=1.22.
|
|
84
|
+
Requires-Dist: parse>=1.22.1
|
|
85
85
|
Requires-Dist: parse-type>=0.6.6
|
|
86
86
|
Requires-Dist: colorama>=0.4.6
|
|
87
87
|
Requires-Dist: psutil>=7.2.2
|
|
@@ -90,7 +90,7 @@ Requires-Dist: pygments>=2.20.0
|
|
|
90
90
|
Requires-Dist: pyreadline3>=3.5.4; platform_system == "Windows"
|
|
91
91
|
Requires-Dist: tabcompleter>=1.4.1
|
|
92
92
|
Requires-Dist: pdbp>=1.8.2
|
|
93
|
-
Requires-Dist: idna>=3.
|
|
93
|
+
Requires-Dist: idna>=3.17
|
|
94
94
|
Requires-Dist: charset-normalizer<4,>=3.4.7
|
|
95
95
|
Requires-Dist: urllib3<2,>=1.26.20; python_version < "3.10"
|
|
96
96
|
Requires-Dist: urllib3<3,>=2.7.0; python_version >= "3.10"
|
|
@@ -121,11 +121,11 @@ Requires-Dist: pytest-html==4.0.2
|
|
|
121
121
|
Requires-Dist: pytest-metadata==3.1.1
|
|
122
122
|
Requires-Dist: pytest-ordering==0.6
|
|
123
123
|
Requires-Dist: pytest-rerunfailures==16.0.1; python_version < "3.10"
|
|
124
|
-
Requires-Dist: pytest-rerunfailures==16.
|
|
124
|
+
Requires-Dist: pytest-rerunfailures==16.3; python_version >= "3.10"
|
|
125
125
|
Requires-Dist: pytest-xdist==3.8.0
|
|
126
126
|
Requires-Dist: parameterized==0.9.0
|
|
127
127
|
Requires-Dist: behave==1.2.6
|
|
128
|
-
Requires-Dist: soupsieve~=2.8.
|
|
128
|
+
Requires-Dist: soupsieve~=2.8.4
|
|
129
129
|
Requires-Dist: beautifulsoup4~=4.14.3
|
|
130
130
|
Requires-Dist: pyotp==2.9.0
|
|
131
131
|
Requires-Dist: python-xlib==0.33; platform_system == "Linux"
|
|
@@ -140,7 +140,7 @@ Requires-Dist: allure-python-commons>=2.13.5; extra == "allure"
|
|
|
140
140
|
Requires-Dist: allure-behave>=2.13.5; extra == "allure"
|
|
141
141
|
Provides-Extra: coverage
|
|
142
142
|
Requires-Dist: coverage>=7.10.7; python_version < "3.10" and extra == "coverage"
|
|
143
|
-
Requires-Dist: coverage>=7.14.
|
|
143
|
+
Requires-Dist: coverage>=7.14.1; python_version >= "3.10" and extra == "coverage"
|
|
144
144
|
Requires-Dist: pytest-cov>=7.1.0; extra == "coverage"
|
|
145
145
|
Provides-Extra: flake8
|
|
146
146
|
Requires-Dist: flake8==7.3.0; extra == "flake8"
|
|
@@ -203,18 +203,17 @@ Dynamic: summary
|
|
|
203
203
|
<!-- SeleniumBase Docs -->
|
|
204
204
|
|
|
205
205
|
<meta property="og:site_name" content="SeleniumBase">
|
|
206
|
-
<meta property="og:title" content="SeleniumBase:
|
|
207
|
-
<meta property="og:description" content="
|
|
208
|
-
<meta property="og:keywords" content="Python, pytest, selenium, webdriver, testing, automation, seleniumbase, framework, dashboard, recorder, reports, screenshots">
|
|
206
|
+
<meta property="og:title" content="SeleniumBase: Stealthy Chromium Automation with Python; and E2E Testing." />
|
|
207
|
+
<meta property="og:description" content="Stealthy Chromium Automation, including fast, easy, and reliable Web/UI testing with Python." />
|
|
208
|
+
<meta property="og:keywords" content="Python, pytest, selenium, webdriver, testing, automation, seleniumbase, framework, dashboard, recorder, reports, screenshots, playwright, stealth, CAPTCHA">
|
|
209
209
|
<meta property="og:image" content="https://seleniumbase.github.io/cdn/img/mac_sb_logo_5b.png" />
|
|
210
|
-
<link rel="icon" href="https://seleniumbase.github.io/img/
|
|
210
|
+
<link rel="icon" href="https://seleniumbase.github.io/img/logo6.png" />
|
|
211
211
|
|
|
212
|
-
<p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/
|
|
212
|
+
<p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/super_logo_sb3.png" alt="SeleniumBase" title="SeleniumBase" width="350" /></a></p>
|
|
213
213
|
|
|
214
|
-
<p align="center"
|
|
215
|
-
<p align="center"></p>
|
|
214
|
+
<p align="center" class="hero__title"><b>All-in-one Browser Automation Framework:<br />Web Crawling / Testing / Scraping / Stealth</b></p>
|
|
216
215
|
|
|
217
|
-
<
|
|
216
|
+
<p align="center"><a href="https://pypi.python.org/pypi/seleniumbase" target="_blank"><img src="https://img.shields.io/pypi/v/seleniumbase.svg?color=3399EE" alt="PyPI version" /></a> <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" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-22BBCC.svg" title="SeleniumBase" /></a> <a href="https://seleniumbase.io"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg" alt="SeleniumBase Docs" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/actions" target="_blank"><img src="https://github.com/seleniumbase/SeleniumBase/workflows/Tests/badge.svg" alt="SeleniumBase GitHub Actions" /></a> <a href="https://www.youtube.com/@MichaelMintz"><img src="https://img.shields.io/youtube/channel/subscribers/UCSQElO8vQmNPuTgdd83BHdw?style=flat&logo=youtube&logoColor=white&label=YouTube%20Subscribers&color=red" alt="YouTube Subscribers"></a></p>
|
|
218
217
|
|
|
219
218
|
<p align="center">
|
|
220
219
|
<a href="#python_installation">🚀 Start</a> |
|
|
@@ -252,20 +251,34 @@ Dynamic: summary
|
|
|
252
251
|
<br />
|
|
253
252
|
</p>
|
|
254
253
|
|
|
255
|
-
|
|
254
|
+
--------
|
|
256
255
|
|
|
257
|
-
<
|
|
256
|
+
<ul>
|
|
257
|
+
<li>🐙 <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a> <b>bypasses bot-detection with Chromium-based browsers.</b></li>
|
|
258
|
+
<li>🎭 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/ReadMe.md"><b><span translate="no">Stealthy Playwright Mode</span></b></a> <b>extends CDP Mode's stealth to Playwright.</b></li>
|
|
259
|
+
<li><b><code>pip install seleniumbase</code></b> for the main framework.</li>
|
|
260
|
+
<li><b><code>pip install playwright</code></b> for the Playwright integration.</li>
|
|
261
|
+
</ul>
|
|
262
|
+
|
|
263
|
+
--------
|
|
264
|
+
|
|
265
|
+
<b>📝 Here's a Python example that uses <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#-pure-cdp-mode-sb_cdp">Pure CDP Mode</a> (<code>sb_cdp</code>):</b><br />(It navigates to Browserscan to show it bypassing bot-detection.)
|
|
258
266
|
|
|
259
267
|
```python
|
|
260
268
|
from seleniumbase import sb_cdp
|
|
261
269
|
|
|
262
270
|
sb = sb_cdp.Chrome()
|
|
263
|
-
sb.open("https://
|
|
271
|
+
sb.open("https://browserscan.net/bot-detection")
|
|
264
272
|
sb.sleep(3)
|
|
265
|
-
sb.
|
|
273
|
+
sb.quit()
|
|
266
274
|
```
|
|
267
275
|
|
|
268
|
-
<
|
|
276
|
+
<p align="center">
|
|
277
|
+
<img src="https://seleniumbase.github.io/cdn/img/results_normal.jpg" width="578" alt="BrowserScan Test Results: Normal">
|
|
278
|
+
<br><em>(All BrowserScan bot-detection checks were passed successfully.)</em>
|
|
279
|
+
</p>
|
|
280
|
+
|
|
281
|
+
<b>🎭 Here's an example script that uses <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/ReadMe.md"><span translate="no">Stealthy Playwright Mode</span></a>:</b><br />(Playwright connects to a stealthy SeleniumBase browser session.)
|
|
269
282
|
|
|
270
283
|
```python
|
|
271
284
|
from playwright.sync_api import sync_playwright
|
|
@@ -280,28 +293,12 @@ with sync_playwright() as p:
|
|
|
280
293
|
page.goto("https://browserscan.net/bot-detection")
|
|
281
294
|
|
|
282
295
|
sb.sleep(3)
|
|
283
|
-
sb.
|
|
296
|
+
sb.quit()
|
|
284
297
|
```
|
|
285
298
|
|
|
286
299
|
--------
|
|
287
300
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
🥷 Stealthy CDP Mode examples are located in [./examples/cdp_mode/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples/cdp_mode).
|
|
291
|
-
|
|
292
|
-
🎭 Stealthy Playwright examples are located in [./examples/cdp_mode/playwright/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/).
|
|
293
|
-
|
|
294
|
-
--------
|
|
295
|
-
|
|
296
|
-
<h3 align="left">⚙️ Stealthy architecture flowchart:</h3>
|
|
297
|
-
|
|
298
|
-
<img src="https://seleniumbase.github.io/other/sb_architecture.png" width="596" alt="Stealthy architecture flowchart" />
|
|
299
|
-
|
|
300
|
-
(For maximum stealth, use <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md">CDP Mode</a>, which includes <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/ReadMe.md">Stealthy Playwright Mode</a>)
|
|
301
|
-
|
|
302
|
-
--------
|
|
303
|
-
|
|
304
|
-
<p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_browserscan.py" target="_blank">This example</a> verifies that <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#-pure-cdp-mode-sb_cdp">Pure CDP Mode</a> is stealthy on <a href="https://www.browserscan.net/bot-detection">BrowserScan</a>:
|
|
301
|
+
<b>**📝** The Browserscan example can be expanded into a <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_browserscan.py">test demo</a>:</b><br />(Assertions added and a few elements highlighted with JavaScript)
|
|
305
302
|
|
|
306
303
|
```python
|
|
307
304
|
from seleniumbase import sb_cdp
|
|
@@ -312,35 +309,43 @@ sb.flash("Test Results", duration=1.5, pause=0.5)
|
|
|
312
309
|
sb.assert_element('strong:contains("Normal")')
|
|
313
310
|
print("Bot Not Detected")
|
|
314
311
|
sb.flash('strong:contains("Normal")', pause=1)
|
|
312
|
+
sb.quit()
|
|
315
313
|
```
|
|
316
314
|
|
|
317
|
-
|
|
315
|
+
--------
|
|
318
316
|
|
|
319
|
-
|
|
317
|
+
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_yc_news.py" target="_blank">This example</a> scrapes Hacker News listings:</b></p>
|
|
320
318
|
|
|
321
319
|
```python
|
|
322
|
-
from playwright.sync_api import sync_playwright
|
|
323
320
|
from seleniumbase import sb_cdp
|
|
324
321
|
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
page = browser.contexts[0].pages[0]
|
|
331
|
-
page.goto("https://browserscan.net/bot-detection")
|
|
332
|
-
page.wait_for_timeout(500)
|
|
333
|
-
sb.flash("Test Results", duration=1.5, pause=0.5)
|
|
334
|
-
sb.assert_element('strong:contains("Normal")')
|
|
335
|
-
print("Bot Not Detected")
|
|
336
|
-
sb.flash('strong:contains("Normal")', pause=1)
|
|
322
|
+
url = "https://news.ycombinator.com/submitted?id=seleniumbase"
|
|
323
|
+
sb = sb_cdp.Chrome(url)
|
|
324
|
+
elements = sb.find_elements("span.titleline > a")
|
|
325
|
+
for element in elements:
|
|
326
|
+
print("* " + element.text)
|
|
337
327
|
```
|
|
338
328
|
|
|
339
329
|
--------
|
|
340
330
|
|
|
331
|
+
🐙 Stealthy CDP Mode examples are located in [./examples/cdp_mode/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples/cdp_mode).
|
|
332
|
+
|
|
333
|
+
🎭 Stealthy Playwright examples are located in [./examples/cdp_mode/playwright/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/).
|
|
334
|
+
|
|
335
|
+
--------
|
|
336
|
+
|
|
337
|
+
<h3 align="left">⚙️ Stealthy architecture flowchart:</h3>
|
|
338
|
+
|
|
339
|
+
<p align="center">
|
|
340
|
+
<img src="https://seleniumbase.github.io/other/sb_architecture.png" width="646" alt="Stealthy architecture flowchart">
|
|
341
|
+
<br><em>(For maximum stealth, use <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md">CDP Mode</a>, which includes <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/ReadMe.md">Stealthy Playwright Mode</a>)</em>
|
|
342
|
+
</p>
|
|
343
|
+
|
|
344
|
+
--------
|
|
345
|
+
|
|
341
346
|
<h3 align="left">🌐 CLI Options for Supported Chromium Browsers</h3>
|
|
342
347
|
|
|
343
|
-
|
|
348
|
+
<p>💡 You can set the Chromium browser to use via command line parameters:</p>
|
|
344
349
|
|
|
345
350
|
```zsh
|
|
346
351
|
python SCRIPT.py --use-chromium # Use the unbranded Chromium browser
|
|
@@ -349,9 +354,9 @@ python SCRIPT.py --edge # Use Microsoft Edge
|
|
|
349
354
|
python SCRIPT.py --brave # Use Brave browser
|
|
350
355
|
```
|
|
351
356
|
|
|
352
|
-
Google Chrome is the default browser
|
|
357
|
+
Google Chrome is the default browser. Only unbranded Chromium and Chrome-for-Testing get installed automatically if not already installed.
|
|
353
358
|
|
|
354
|
-
|
|
359
|
+
The Chromium browser can also be set via method args, eg: `cft=True`, `use_chromium=True`, `browser="edge"`, `browser="brave"`, etc. Eg:
|
|
355
360
|
|
|
356
361
|
```python
|
|
357
362
|
sb = sb_cdp.Chrome(url, use_chromium=True)
|
|
@@ -359,21 +364,7 @@ sb = sb_cdp.Chrome(url, use_chromium=True)
|
|
|
359
364
|
|
|
360
365
|
--------
|
|
361
366
|
|
|
362
|
-
<p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/
|
|
363
|
-
|
|
364
|
-
```python
|
|
365
|
-
from seleniumbase import sb_cdp
|
|
366
|
-
|
|
367
|
-
url = "https://news.ycombinator.com/submitted?id=seleniumbase"
|
|
368
|
-
sb = sb_cdp.Chrome(url)
|
|
369
|
-
elements = sb.find_elements("span.titleline > a")
|
|
370
|
-
for element in elements:
|
|
371
|
-
print("* " + element.text)
|
|
372
|
-
```
|
|
373
|
-
|
|
374
|
-
--------
|
|
375
|
-
|
|
376
|
-
<p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_google.py" target="_blank">This example</a> saves Google Search results with UC + CDP Mode:<br />(Results are saved as PDF, HTML, and PNG files)</p>
|
|
367
|
+
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_google.py" target="_blank">This example</a> saves Google Search results with UC + CDP Mode:</b><br />(Results are saved as PDF, HTML, and PNG files)</p>
|
|
377
368
|
|
|
378
369
|
```python
|
|
379
370
|
from seleniumbase import SB
|
|
@@ -394,7 +385,7 @@ with SB(uc=True, test=True) as sb:
|
|
|
394
385
|
|
|
395
386
|
--------
|
|
396
387
|
|
|
397
|
-
<p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_gitlab.py" target="_blank">This example</a> bypasses Cloudflare's challenge page with UC + CDP Mode
|
|
388
|
+
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_gitlab.py" target="_blank">This example</a> bypasses Cloudflare's challenge page with UC + CDP Mode:</b></p>
|
|
398
389
|
|
|
399
390
|
```python
|
|
400
391
|
from seleniumbase import SB
|
|
@@ -412,11 +403,13 @@ with SB(uc=True, test=True, locale="en") as sb:
|
|
|
412
403
|
sb.post_message("SeleniumBase wasn't detected", duration=4)
|
|
413
404
|
```
|
|
414
405
|
|
|
415
|
-
<img src="https://seleniumbase.github.io/other/cf_sec.jpg" alt="SeleniumBase" width="
|
|
406
|
+
<img src="https://seleniumbase.github.io/other/cf_sec.jpg" alt="SeleniumBase" width="346"> <img src="https://seleniumbase.github.io/other/gitlab_bypass.png" alt="SeleniumBase" width="300">
|
|
416
407
|
|
|
417
|
-
|
|
408
|
+
(<b><code>sb.solve_captcha()</code></b> <b>handles CAPTCHAs</b> that aren't bypassed automatically.)
|
|
418
409
|
|
|
419
|
-
|
|
410
|
+
--------
|
|
411
|
+
|
|
412
|
+
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_gitlab.py" target="_blank">This example</a> handles a CAPTCHA page with Pure CDP Mode:</b></p>
|
|
420
413
|
|
|
421
414
|
```python
|
|
422
415
|
from seleniumbase import sb_cdp
|
|
@@ -431,7 +424,13 @@ sb.highlight('button:contains("Sign in")')
|
|
|
431
424
|
|
|
432
425
|
--------
|
|
433
426
|
|
|
434
|
-
<
|
|
427
|
+
<h3>🧪 Comprehensive E2E Testing with <code>pytest</code>:</h3>
|
|
428
|
+
|
|
429
|
+
📚 The [SeleniumBase/examples/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples) folder includes over 150 ready-to-run examples of E2E testing. Examples that start with `test_` or end with `_test.py`/`_tests.py` run with `pytest`. Other examples run directly with raw `python` (those generally start with `raw_` to avoid confusion).
|
|
430
|
+
|
|
431
|
+
|
|
432
|
+
|
|
433
|
+
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_get_swag.py" target="_blank">This example</a> tests an e-commerce site with <code>pytest</code>:</b></p>
|
|
435
434
|
|
|
436
435
|
```python
|
|
437
436
|
from seleniumbase import BaseCase
|
|
@@ -457,17 +456,17 @@ class MyTestClass(BaseCase):
|
|
|
457
456
|
|
|
458
457
|
> `pytest test_get_swag.py`
|
|
459
458
|
|
|
460
|
-
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_get_swag.py"><img src="https://seleniumbase.github.io/cdn/gif/fast_swag_2.gif" alt="SeleniumBase Test" width="
|
|
459
|
+
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_get_swag.py"><img src="https://seleniumbase.github.io/cdn/gif/fast_swag_2.gif" alt="SeleniumBase Test" width="500" /></a>
|
|
461
460
|
|
|
462
461
|
--------
|
|
463
462
|
|
|
464
|
-
<p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_coffee_cart.py" target="_blank">This example</a> tests another e-commerce site with <code>pytest</code
|
|
463
|
+
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_coffee_cart.py" target="_blank">This example</a> tests another e-commerce site with <code>pytest</code>:</b></p>
|
|
465
464
|
|
|
466
465
|
```zsh
|
|
467
466
|
pytest test_coffee_cart.py --demo
|
|
468
467
|
```
|
|
469
468
|
|
|
470
|
-
<p align="left"><a href="https://seleniumbase.io/coffee/" target="_blank"><img src="https://seleniumbase.github.io/cdn/gif/coffee_cart.gif" width="
|
|
469
|
+
<p align="left"><a href="https://seleniumbase.io/coffee/" target="_blank"><img src="https://seleniumbase.github.io/cdn/gif/coffee_cart.gif" width="500" alt="SeleniumBase Coffee Cart Test" /></a></p>
|
|
471
470
|
|
|
472
471
|
> <p>(<code translate="no">--demo</code> mode slows down tests and highlights actions)</p>
|
|
473
472
|
|
|
@@ -475,13 +474,13 @@ pytest test_coffee_cart.py --demo
|
|
|
475
474
|
|
|
476
475
|
<a id="multiple_examples"></a>
|
|
477
476
|
|
|
478
|
-
<p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_demo_site.py" target="_blank">This example</a> covers multiple actions with <code>pytest</code
|
|
477
|
+
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_demo_site.py" target="_blank">This example</a> covers multiple actions with <code>pytest</code>:</b></p>
|
|
479
478
|
|
|
480
479
|
```zsh
|
|
481
480
|
pytest test_demo_site.py
|
|
482
481
|
```
|
|
483
482
|
|
|
484
|
-
<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="
|
|
483
|
+
<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" alt="SeleniumBase Example" /></a></p>
|
|
485
484
|
|
|
486
485
|
> Easy to type, click, select, toggle, drag & drop, and more.
|
|
487
486
|
|
|
@@ -612,7 +611,7 @@ finally:
|
|
|
612
611
|
<a id="python_installation"></a>
|
|
613
612
|
<h2><img src="https://seleniumbase.github.io/cdn/img/python_logo.png" title="SeleniumBase" width="42" /> Set up Python & Git:</h2>
|
|
614
613
|
|
|
615
|
-
<a href="https://
|
|
614
|
+
<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>
|
|
616
615
|
|
|
617
616
|
🔵 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.
|
|
618
617
|
|
|
@@ -736,7 +735,7 @@ cd examples/
|
|
|
736
735
|
pytest my_first_test.py
|
|
737
736
|
```
|
|
738
737
|
|
|
739
|
-
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/my_first_test.py"><img src="https://seleniumbase.github.io/cdn/gif/fast_swag_2.gif" alt="SeleniumBase Test" width="
|
|
738
|
+
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/my_first_test.py"><img src="https://seleniumbase.github.io/cdn/gif/fast_swag_2.gif" alt="SeleniumBase Test" width="500" /></a>
|
|
740
739
|
|
|
741
740
|
<p align="left"><b>Here's the full code for <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/my_first_test.py">my_first_test.py</a>:</b></p>
|
|
742
741
|
|
|
@@ -1729,7 +1728,8 @@ pytest --reruns=1 --reruns-delay=1
|
|
|
1729
1728
|
<p><div><b><a href="https://github.com/mdmintz">https://github.com/mdmintz</a></b></div></p>
|
|
1730
1729
|
|
|
1731
1730
|
<div><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/super_logo_sb3.png" title="SeleniumBase" width="310" /></a></div>
|
|
1732
|
-
<div><a href="https://seleniumbase.io"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg" alt="SeleniumBase Docs" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-22BBCC.svg" title="SeleniumBase" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/stargazers"><img src="https://img.shields.io/github/stars/seleniumbase/seleniumbase.svg?color=19A57B" title="Stargazers" /></a></div>
|
|
1733
1731
|
<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>
|
|
1732
|
+
<div><a href="https://seleniumbase.io"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg" alt="SeleniumBase Docs" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-22BBCC.svg" title="SeleniumBase" /></a> </div>
|
|
1734
1733
|
<div align="left"></div>
|
|
1735
1734
|
<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" /></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"/></a></div>
|
|
1735
|
+
<div><a href="https://www.youtube.com/@MichaelMintz"><img src="https://img.shields.io/youtube/channel/subscribers/UCSQElO8vQmNPuTgdd83BHdw?style=flat&logo=youtube&logoColor=white&label=YouTube%20Subscribers&color=red" alt="YouTube Subscribers"></a></div>
|