seleniumbase 4.41.10__tar.gz → 4.41.12__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.41.10/seleniumbase.egg-info → seleniumbase-4.41.12}/PKG-INFO +5 -4
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/README.md +1 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/requirements.txt +2 -2
- seleniumbase-4.41.12/seleniumbase/__version__.py +2 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/core/browser_launcher.py +51 -9
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/core/sb_cdp.py +44 -27
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/core/sb_driver.py +10 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/fixtures/page_actions.py +16 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12/seleniumbase.egg-info}/PKG-INFO +5 -4
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase.egg-info/requires.txt +3 -3
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/setup.py +3 -3
- seleniumbase-4.41.10/seleniumbase/__version__.py +0 -2
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/.gitignore +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/LICENSE +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/MANIFEST.in +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/install.sh +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/pyproject.toml +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/pytest.ini +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/sbase/__init__.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/sbase/__main__.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/sbase/steps.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/__init__.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/behave/behave_sb.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/common/decorators.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/common/exceptions.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/config/proxy_list.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/config/settings.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/console_scripts/run.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/console_scripts/sb_install.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/console_scripts/sb_recorder.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/core/detect_b_ver.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/core/log_helper.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/core/mysql.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/core/proxy_helper.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/core/recorder_helper.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/core/report_helper.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/extensions/__init__.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/fixtures/__init__.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/fixtures/base_case.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/fixtures/constants.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/fixtures/js_utils.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/fixtures/page_utils.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/fixtures/shared_utils.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/fixtures/xpath_to_css.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/js_code/__init__.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/masterqa/__init__.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/masterqa/master_qa.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/plugins/__init__.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/plugins/base_plugin.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/plugins/driver_manager.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/plugins/pytest_plugin.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/plugins/sb_manager.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/plugins/selenium_plugin.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/resources/__init__.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/translate/master_dict.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/undetected/__init__.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/undetected/cdp.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/undetected/cdp_driver/config.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/undetected/cdp_driver/element.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/undetected/patcher.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/undetected/webelement.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/utilities/__init__.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase.egg-info/SOURCES.txt +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/setup.cfg +0 -0
- {seleniumbase-4.41.10 → seleniumbase-4.41.12}/virtualenv_install.sh +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: seleniumbase
|
3
|
-
Version: 4.41.
|
3
|
+
Version: 4.41.12
|
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
|
@@ -81,7 +81,7 @@ Requires-Dist: platformdirs>=4.4.0; python_version >= "3.9"
|
|
81
81
|
Requires-Dist: typing-extensions>=4.13.2
|
82
82
|
Requires-Dist: sbvirtualdisplay>=1.4.0
|
83
83
|
Requires-Dist: MarkupSafe==2.1.5; python_version < "3.9"
|
84
|
-
Requires-Dist: MarkupSafe>=3.0.
|
84
|
+
Requires-Dist: MarkupSafe>=3.0.3; python_version >= "3.9"
|
85
85
|
Requires-Dist: Jinja2>=3.1.6
|
86
86
|
Requires-Dist: six>=1.17.0
|
87
87
|
Requires-Dist: parse>=1.20.2
|
@@ -130,7 +130,7 @@ Requires-Dist: parameterized==0.9.0
|
|
130
130
|
Requires-Dist: behave==1.2.6
|
131
131
|
Requires-Dist: soupsieve==2.7; python_version < "3.9"
|
132
132
|
Requires-Dist: soupsieve~=2.8; python_version >= "3.9"
|
133
|
-
Requires-Dist: beautifulsoup4~=4.
|
133
|
+
Requires-Dist: beautifulsoup4~=4.14.2
|
134
134
|
Requires-Dist: pyotp==2.9.0
|
135
135
|
Requires-Dist: python-xlib==0.33; platform_system == "Linux"
|
136
136
|
Requires-Dist: markdown-it-py==3.0.0; python_version < "3.10"
|
@@ -164,7 +164,7 @@ Provides-Extra: pdfminer
|
|
164
164
|
Requires-Dist: pdfminer.six==20250324; python_version < "3.9" and extra == "pdfminer"
|
165
165
|
Requires-Dist: pdfminer.six==20250506; python_version >= "3.9" and extra == "pdfminer"
|
166
166
|
Requires-Dist: cryptography==39.0.2; python_version < "3.9" and extra == "pdfminer"
|
167
|
-
Requires-Dist: cryptography==46.0.
|
167
|
+
Requires-Dist: cryptography==46.0.2; python_version >= "3.9" and extra == "pdfminer"
|
168
168
|
Requires-Dist: cffi==1.17.1; python_version < "3.9" and extra == "pdfminer"
|
169
169
|
Requires-Dist: cffi==2.0.0; python_version >= "3.9" and extra == "pdfminer"
|
170
170
|
Requires-Dist: pycparser==2.22; python_version < "3.9" and extra == "pdfminer"
|
@@ -309,6 +309,7 @@ with SB(uc=True, test=True, locale="en") as sb:
|
|
309
309
|
sb.activate_cdp_mode(url)
|
310
310
|
sb.sleep(2.2)
|
311
311
|
sb.uc_gui_click_captcha()
|
312
|
+
# (The rest is for testing and demo purposes)
|
312
313
|
sb.assert_text("Username", '[for="user_login"]', timeout=3)
|
313
314
|
sb.assert_element('label[for="user_login"]')
|
314
315
|
sb.highlight('button:contains("Sign in")')
|
@@ -99,6 +99,7 @@ with SB(uc=True, test=True, locale="en") as sb:
|
|
99
99
|
sb.activate_cdp_mode(url)
|
100
100
|
sb.sleep(2.2)
|
101
101
|
sb.uc_gui_click_captcha()
|
102
|
+
# (The rest is for testing and demo purposes)
|
102
103
|
sb.assert_text("Username", '[for="user_login"]', timeout=3)
|
103
104
|
sb.assert_element('label[for="user_login"]')
|
104
105
|
sb.highlight('button:contains("Sign in")')
|
@@ -19,7 +19,7 @@ platformdirs>=4.4.0;python_version>="3.9"
|
|
19
19
|
typing-extensions>=4.13.2
|
20
20
|
sbvirtualdisplay>=1.4.0
|
21
21
|
MarkupSafe==2.1.5;python_version<"3.9"
|
22
|
-
MarkupSafe>=3.0.
|
22
|
+
MarkupSafe>=3.0.3;python_version>="3.9"
|
23
23
|
Jinja2>=3.1.6
|
24
24
|
six>=1.17.0
|
25
25
|
parse>=1.20.2
|
@@ -68,7 +68,7 @@ parameterized==0.9.0
|
|
68
68
|
behave==1.2.6
|
69
69
|
soupsieve==2.7;python_version<"3.9"
|
70
70
|
soupsieve~=2.8;python_version>="3.9"
|
71
|
-
beautifulsoup4~=4.
|
71
|
+
beautifulsoup4~=4.14.2
|
72
72
|
pyotp==2.9.0
|
73
73
|
python-xlib==0.33;platform_system=="Linux"
|
74
74
|
markdown-it-py==3.0.0;python_version<"3.10"
|
@@ -228,6 +228,8 @@ def extend_driver(
|
|
228
228
|
driver.wait_for_element = DM.wait_for_element
|
229
229
|
driver.wait_for_element_visible = DM.wait_for_element_visible
|
230
230
|
driver.wait_for_element_present = DM.wait_for_element_present
|
231
|
+
driver.wait_for_element_absent = DM.wait_for_element_absent
|
232
|
+
driver.wait_for_element_not_visible = DM.wait_for_element_not_visible
|
231
233
|
driver.wait_for_selector = DM.wait_for_selector
|
232
234
|
driver.wait_for_text = DM.wait_for_text
|
233
235
|
driver.wait_for_exact_text = DM.wait_for_exact_text
|
@@ -835,6 +837,7 @@ def uc_open_with_cdp_mode(driver, url=None, **kwargs):
|
|
835
837
|
cdp.wait_for_text = CDPM.wait_for_text
|
836
838
|
cdp.wait_for_text_not_visible = CDPM.wait_for_text_not_visible
|
837
839
|
cdp.wait_for_element_visible = CDPM.wait_for_element_visible
|
840
|
+
cdp.wait_for_element = CDPM.wait_for_element
|
838
841
|
cdp.wait_for_element_not_visible = CDPM.wait_for_element_not_visible
|
839
842
|
cdp.wait_for_element_absent = CDPM.wait_for_element_absent
|
840
843
|
cdp.wait_for_any_of_elements_visible = (
|
@@ -1365,14 +1368,16 @@ def _uc_gui_click_captcha(
|
|
1365
1368
|
frame = '[style="display: grid;"] div div'
|
1366
1369
|
elif (
|
1367
1370
|
driver.is_element_present('[name*="cf-turnstile-"]')
|
1368
|
-
and driver.is_element_present(
|
1371
|
+
and driver.is_element_present(
|
1372
|
+
".spacer + div div:not([class])"
|
1373
|
+
)
|
1369
1374
|
):
|
1370
|
-
frame = '
|
1375
|
+
frame = '.spacer + div div:not([class])'
|
1371
1376
|
elif (
|
1372
1377
|
driver.is_element_present('[name*="cf-turnstile-"]')
|
1373
|
-
and driver.is_element_present("
|
1378
|
+
and driver.is_element_present(".spacer div:not([class])")
|
1374
1379
|
):
|
1375
|
-
frame = "
|
1380
|
+
frame = ".spacer div:not([class])"
|
1376
1381
|
elif (
|
1377
1382
|
driver.is_element_present('script[src*="challenges.c"]')
|
1378
1383
|
and driver.is_element_present(
|
@@ -1384,6 +1389,10 @@ def _uc_gui_click_captcha(
|
|
1384
1389
|
"div#turnstile-widget div:not([class])"
|
1385
1390
|
):
|
1386
1391
|
frame = "div#turnstile-widget div:not([class])"
|
1392
|
+
elif driver.is_element_present(
|
1393
|
+
"ngx-turnstile div:not([class])"
|
1394
|
+
):
|
1395
|
+
frame = "ngx-turnstile div:not([class])"
|
1387
1396
|
elif driver.is_element_present(
|
1388
1397
|
'form div:not([class]):has(input[name*="cf-turn"])'
|
1389
1398
|
):
|
@@ -1404,6 +1413,14 @@ def _uc_gui_click_captcha(
|
|
1404
1413
|
frame = ".cf-turnstile-wrapper"
|
1405
1414
|
elif driver.is_element_present('[class="cf-turnstile"]'):
|
1406
1415
|
frame = '[class="cf-turnstile"]'
|
1416
|
+
elif driver.is_element_present(
|
1417
|
+
'[id*="turnstile"] div:not([class])'
|
1418
|
+
):
|
1419
|
+
frame = '[id*="turnstile"] div:not([class])'
|
1420
|
+
elif driver.is_element_present(
|
1421
|
+
'[class*="turnstile"] div:not([class])'
|
1422
|
+
):
|
1423
|
+
frame = '[class*="turnstile"] div:not([class])'
|
1407
1424
|
elif driver.is_element_present(
|
1408
1425
|
'[data-callback="onCaptchaSuccess"]'
|
1409
1426
|
):
|
@@ -1455,9 +1472,11 @@ def _uc_gui_click_captcha(
|
|
1455
1472
|
else:
|
1456
1473
|
driver.execute_script(script)
|
1457
1474
|
elif (
|
1458
|
-
driver.is_element_present(
|
1459
|
-
|
1460
|
-
|
1475
|
+
driver.is_element_present(
|
1476
|
+
'form [id*="turnstile"] div:not([class])'
|
1477
|
+
)
|
1478
|
+
or driver.is_element_present(
|
1479
|
+
'form [class*="turnstile"] div:not([class])'
|
1461
1480
|
)
|
1462
1481
|
):
|
1463
1482
|
script = (
|
@@ -1465,12 +1484,35 @@ def _uc_gui_click_captcha(
|
|
1465
1484
|
'form [id*="turnstile"]');
|
1466
1485
|
var index = 0, length = $elements.length;
|
1467
1486
|
for(; index < length; index++){
|
1487
|
+
$elements[index].setAttribute('align', 'left');}
|
1488
|
+
var $elements = document.querySelectorAll(
|
1489
|
+
'form [class*="turnstile"]');
|
1490
|
+
var index = 0, length = $elements.length;
|
1491
|
+
for(; index < length; index++){
|
1468
1492
|
$elements[index].setAttribute('align', 'left');}"""
|
1469
1493
|
)
|
1470
1494
|
if __is_cdp_swap_needed(driver):
|
1471
1495
|
driver.cdp.evaluate(script)
|
1472
1496
|
else:
|
1473
1497
|
driver.execute_script(script)
|
1498
|
+
elif (
|
1499
|
+
driver.is_element_present(
|
1500
|
+
'[style*="text-align: center;"] div:not([class])'
|
1501
|
+
)
|
1502
|
+
):
|
1503
|
+
script = (
|
1504
|
+
"""var $elements = document.querySelectorAll(
|
1505
|
+
'[style*="text-align: center;"]');
|
1506
|
+
var index = 0, length = $elements.length;
|
1507
|
+
for(; index < length; index++){
|
1508
|
+
the_style = $elements[index].getAttribute('style');
|
1509
|
+
new_style = the_style.replaceAll('center', 'left');
|
1510
|
+
$elements[index].setAttribute('style', new_style);}"""
|
1511
|
+
)
|
1512
|
+
if __is_cdp_swap_needed(driver):
|
1513
|
+
driver.cdp.evaluate(script)
|
1514
|
+
else:
|
1515
|
+
driver.execute_script(script)
|
1474
1516
|
if not is_in_frame or needs_switch:
|
1475
1517
|
# Currently not in frame (or nested frame outside CF one)
|
1476
1518
|
try:
|
@@ -1690,9 +1732,9 @@ def _uc_gui_handle_captcha_(driver, frame="iframe", ctype=None):
|
|
1690
1732
|
frame = '[data-callback="onCaptchaSuccess"]'
|
1691
1733
|
elif (
|
1692
1734
|
driver.is_element_present('[name*="cf-turnstile-"]')
|
1693
|
-
and driver.is_element_present("
|
1735
|
+
and driver.is_element_present(".spacer div:not([class])")
|
1694
1736
|
):
|
1695
|
-
frame = "
|
1737
|
+
frame = ".spacer div:not([class])"
|
1696
1738
|
elif (
|
1697
1739
|
driver.is_element_present('script[src*="challenges.c"]')
|
1698
1740
|
and driver.is_element_present(
|
@@ -301,28 +301,7 @@ class CDPMethods():
|
|
301
301
|
self.__add_light_pause()
|
302
302
|
selector = self.__convert_to_css_if_xpath(selector)
|
303
303
|
if (":contains(" in selector):
|
304
|
-
|
305
|
-
text = selector.split(":contains(")[1].split(")")[0][1:-1]
|
306
|
-
with suppress(Exception):
|
307
|
-
new_timeout = timeout
|
308
|
-
if new_timeout < 1:
|
309
|
-
new_timeout = 1
|
310
|
-
self.loop.run_until_complete(
|
311
|
-
self.page.select(tag_name, timeout=new_timeout)
|
312
|
-
)
|
313
|
-
self.loop.run_until_complete(
|
314
|
-
self.page.find(text, timeout=new_timeout)
|
315
|
-
)
|
316
|
-
elements = self.find_elements_by_text(text, tag_name=tag_name)
|
317
|
-
if not elements:
|
318
|
-
plural = "s"
|
319
|
-
if timeout == 1:
|
320
|
-
plural = ""
|
321
|
-
msg = "\n Element {%s} was not found after %s second%s!"
|
322
|
-
message = msg % (selector, timeout, plural)
|
323
|
-
raise Exception(message)
|
324
|
-
element = self.__add_sync_methods(elements[0])
|
325
|
-
return element
|
304
|
+
return self.find_element(selector, timeout=timeout)
|
326
305
|
failure = False
|
327
306
|
try:
|
328
307
|
element = self.loop.run_until_complete(
|
@@ -1708,9 +1687,9 @@ class CDPMethods():
|
|
1708
1687
|
selector = '[class*=spacer] + div div'
|
1709
1688
|
elif (
|
1710
1689
|
self.is_element_present('[name*="cf-turnstile-"]')
|
1711
|
-
and self.is_element_present("
|
1690
|
+
and self.is_element_present(".spacer div:not([class])")
|
1712
1691
|
):
|
1713
|
-
selector = "
|
1692
|
+
selector = ".spacer div:not([class])"
|
1714
1693
|
elif (
|
1715
1694
|
self.is_element_present('script[src*="challenges.c"]')
|
1716
1695
|
and self.is_element_present(
|
@@ -1722,6 +1701,8 @@ class CDPMethods():
|
|
1722
1701
|
"div#turnstile-widget div:not([class])"
|
1723
1702
|
):
|
1724
1703
|
selector = "div#turnstile-widget div:not([class])"
|
1704
|
+
elif self.is_element_present("ngx-turnstile div:not([class])"):
|
1705
|
+
selector = "ngx-turnstile div:not([class])"
|
1725
1706
|
elif self.is_element_present(
|
1726
1707
|
'form div:not([class]):has(input[name*="cf-turn"])'
|
1727
1708
|
):
|
@@ -1742,6 +1723,14 @@ class CDPMethods():
|
|
1742
1723
|
selector = ".cf-turnstile-wrapper"
|
1743
1724
|
elif self.is_element_present('[class="cf-turnstile"]'):
|
1744
1725
|
selector = '[class="cf-turnstile"]'
|
1726
|
+
elif self.is_element_present(
|
1727
|
+
'[id*="turnstile"] div:not([class])'
|
1728
|
+
):
|
1729
|
+
selector = '[id*="turnstile"] div:not([class])'
|
1730
|
+
elif self.is_element_present(
|
1731
|
+
'[class*="turnstile"] div:not([class])'
|
1732
|
+
):
|
1733
|
+
selector = '[class*="turnstile"] div:not([class])'
|
1745
1734
|
elif self.is_element_present(
|
1746
1735
|
'[data-callback="onCaptchaSuccess"]'
|
1747
1736
|
):
|
@@ -1793,9 +1782,11 @@ class CDPMethods():
|
|
1793
1782
|
self.loop.run_until_complete(self.page.evaluate(script))
|
1794
1783
|
self.loop.run_until_complete(self.page.wait())
|
1795
1784
|
elif (
|
1796
|
-
self.is_element_present(
|
1797
|
-
|
1798
|
-
|
1785
|
+
self.is_element_present(
|
1786
|
+
'form [id*="turnstile"] div:not([class])'
|
1787
|
+
)
|
1788
|
+
or self.is_element_present(
|
1789
|
+
'form [class*="turnstile"] div:not([class])'
|
1799
1790
|
)
|
1800
1791
|
):
|
1801
1792
|
script = (
|
@@ -1803,11 +1794,33 @@ class CDPMethods():
|
|
1803
1794
|
'form [id*="turnstile"]');
|
1804
1795
|
var index = 0, length = $elements.length;
|
1805
1796
|
for(; index < length; index++){
|
1797
|
+
$elements[index].setAttribute('align', 'left');}
|
1798
|
+
var $elements = document.querySelectorAll(
|
1799
|
+
'form [class*="turnstile"]');
|
1800
|
+
var index = 0, length = $elements.length;
|
1801
|
+
for(; index < length; index++){
|
1806
1802
|
$elements[index].setAttribute('align', 'left');}"""
|
1807
1803
|
)
|
1808
1804
|
with suppress(Exception):
|
1809
1805
|
self.loop.run_until_complete(self.page.evaluate(script))
|
1810
1806
|
self.loop.run_until_complete(self.page.wait())
|
1807
|
+
elif (
|
1808
|
+
self.is_element_present(
|
1809
|
+
'[style*="text-align: center;"] div:not([class])'
|
1810
|
+
)
|
1811
|
+
):
|
1812
|
+
script = (
|
1813
|
+
"""var $elements = document.querySelectorAll(
|
1814
|
+
'[style*="text-align: center;"]');
|
1815
|
+
var index = 0, length = $elements.length;
|
1816
|
+
for(; index < length; index++){
|
1817
|
+
the_style = $elements[index].getAttribute('style');
|
1818
|
+
new_style = the_style.replaceAll('center', 'left');
|
1819
|
+
$elements[index].setAttribute('style', new_style);}"""
|
1820
|
+
)
|
1821
|
+
with suppress(Exception):
|
1822
|
+
self.loop.run_until_complete(self.page.evaluate(script))
|
1823
|
+
self.loop.run_until_complete(self.page.wait())
|
1811
1824
|
with suppress(Exception):
|
1812
1825
|
time.sleep(0.08)
|
1813
1826
|
element_rect = self.get_gui_element_rect(selector, timeout=1)
|
@@ -2163,6 +2176,10 @@ class CDPMethods():
|
|
2163
2176
|
time.sleep(0.1)
|
2164
2177
|
raise Exception("Element {%s} was not visible!" % selector)
|
2165
2178
|
|
2179
|
+
def wait_for_element(self, selector, **kwargs):
|
2180
|
+
"""Same as wait_for_element_visible()"""
|
2181
|
+
return self.wait_for_element_visible(selector, **kwargs)
|
2182
|
+
|
2166
2183
|
def wait_for_element_not_visible(self, selector, timeout=None):
|
2167
2184
|
"""Wait for element to not be visible on page. (May still be in DOM)"""
|
2168
2185
|
if not timeout:
|
@@ -137,6 +137,16 @@ class DriverMethods(WebDriver):
|
|
137
137
|
def wait_for_element_present(self, *args, **kwargs):
|
138
138
|
return page_actions.wait_for_selector(self.driver, *args, **kwargs)
|
139
139
|
|
140
|
+
def wait_for_element_absent(self, *args, **kwargs):
|
141
|
+
return page_actions.wait_for_element_absent(
|
142
|
+
self.driver, *args, **kwargs
|
143
|
+
)
|
144
|
+
|
145
|
+
def wait_for_element_not_visible(self, *args, **kwargs):
|
146
|
+
return page_actions.wait_for_element_not_visible(
|
147
|
+
self.driver, *args, **kwargs
|
148
|
+
)
|
149
|
+
|
140
150
|
def wait_for_selector(self, *args, **kwargs):
|
141
151
|
return page_actions.wait_for_selector(self.driver, *args, **kwargs)
|
142
152
|
|
@@ -1108,6 +1108,14 @@ def wait_for_element_absent(
|
|
1108
1108
|
timeout - the time to wait for elements in seconds
|
1109
1109
|
original_selector - handle pre-converted ":contains(TEXT)" selector
|
1110
1110
|
"""
|
1111
|
+
if __is_cdp_swap_needed(driver):
|
1112
|
+
if page_utils.is_valid_by(by):
|
1113
|
+
original_selector = selector
|
1114
|
+
elif page_utils.is_valid_by(selector):
|
1115
|
+
original_selector = by
|
1116
|
+
selector, by = page_utils.recalculate_selector(original_selector, by)
|
1117
|
+
driver.cdp.wait_for_element_absent(selector)
|
1118
|
+
return True
|
1111
1119
|
_reconnect_if_disconnected(driver)
|
1112
1120
|
start_ms = time.time() * 1000.0
|
1113
1121
|
stop_ms = start_ms + (timeout * 1000.0)
|
@@ -1156,6 +1164,14 @@ def wait_for_element_not_visible(
|
|
1156
1164
|
timeout - the time to wait for the element in seconds
|
1157
1165
|
original_selector - handle pre-converted ":contains(TEXT)" selector
|
1158
1166
|
"""
|
1167
|
+
if __is_cdp_swap_needed(driver):
|
1168
|
+
if page_utils.is_valid_by(by):
|
1169
|
+
original_selector = selector
|
1170
|
+
elif page_utils.is_valid_by(selector):
|
1171
|
+
original_selector = by
|
1172
|
+
selector, by = page_utils.recalculate_selector(original_selector, by)
|
1173
|
+
driver.cdp.wait_for_element_not_visible(selector)
|
1174
|
+
return True
|
1159
1175
|
_reconnect_if_disconnected(driver)
|
1160
1176
|
start_ms = time.time() * 1000.0
|
1161
1177
|
stop_ms = start_ms + (timeout * 1000.0)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: seleniumbase
|
3
|
-
Version: 4.41.
|
3
|
+
Version: 4.41.12
|
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
|
@@ -81,7 +81,7 @@ Requires-Dist: platformdirs>=4.4.0; python_version >= "3.9"
|
|
81
81
|
Requires-Dist: typing-extensions>=4.13.2
|
82
82
|
Requires-Dist: sbvirtualdisplay>=1.4.0
|
83
83
|
Requires-Dist: MarkupSafe==2.1.5; python_version < "3.9"
|
84
|
-
Requires-Dist: MarkupSafe>=3.0.
|
84
|
+
Requires-Dist: MarkupSafe>=3.0.3; python_version >= "3.9"
|
85
85
|
Requires-Dist: Jinja2>=3.1.6
|
86
86
|
Requires-Dist: six>=1.17.0
|
87
87
|
Requires-Dist: parse>=1.20.2
|
@@ -130,7 +130,7 @@ Requires-Dist: parameterized==0.9.0
|
|
130
130
|
Requires-Dist: behave==1.2.6
|
131
131
|
Requires-Dist: soupsieve==2.7; python_version < "3.9"
|
132
132
|
Requires-Dist: soupsieve~=2.8; python_version >= "3.9"
|
133
|
-
Requires-Dist: beautifulsoup4~=4.
|
133
|
+
Requires-Dist: beautifulsoup4~=4.14.2
|
134
134
|
Requires-Dist: pyotp==2.9.0
|
135
135
|
Requires-Dist: python-xlib==0.33; platform_system == "Linux"
|
136
136
|
Requires-Dist: markdown-it-py==3.0.0; python_version < "3.10"
|
@@ -164,7 +164,7 @@ Provides-Extra: pdfminer
|
|
164
164
|
Requires-Dist: pdfminer.six==20250324; python_version < "3.9" and extra == "pdfminer"
|
165
165
|
Requires-Dist: pdfminer.six==20250506; python_version >= "3.9" and extra == "pdfminer"
|
166
166
|
Requires-Dist: cryptography==39.0.2; python_version < "3.9" and extra == "pdfminer"
|
167
|
-
Requires-Dist: cryptography==46.0.
|
167
|
+
Requires-Dist: cryptography==46.0.2; python_version >= "3.9" and extra == "pdfminer"
|
168
168
|
Requires-Dist: cffi==1.17.1; python_version < "3.9" and extra == "pdfminer"
|
169
169
|
Requires-Dist: cffi==2.0.0; python_version >= "3.9" and extra == "pdfminer"
|
170
170
|
Requires-Dist: pycparser==2.22; python_version < "3.9" and extra == "pdfminer"
|
@@ -309,6 +309,7 @@ with SB(uc=True, test=True, locale="en") as sb:
|
|
309
309
|
sb.activate_cdp_mode(url)
|
310
310
|
sb.sleep(2.2)
|
311
311
|
sb.uc_gui_click_captcha()
|
312
|
+
# (The rest is for testing and demo purposes)
|
312
313
|
sb.assert_text("Username", '[for="user_login"]', timeout=3)
|
313
314
|
sb.assert_element('label[for="user_login"]')
|
314
315
|
sb.highlight('button:contains("Sign in")')
|
@@ -34,7 +34,7 @@ pytest-metadata==3.1.1
|
|
34
34
|
pytest-ordering==0.6
|
35
35
|
parameterized==0.9.0
|
36
36
|
behave==1.2.6
|
37
|
-
beautifulsoup4~=4.
|
37
|
+
beautifulsoup4~=4.14.2
|
38
38
|
pyotp==2.9.0
|
39
39
|
mdurl==0.1.2
|
40
40
|
rich<15,>=14.1.0
|
@@ -77,7 +77,7 @@ pip>=25.2
|
|
77
77
|
websockets>=15.0.1
|
78
78
|
filelock>=3.19.1
|
79
79
|
platformdirs>=4.4.0
|
80
|
-
MarkupSafe>=3.0.
|
80
|
+
MarkupSafe>=3.0.3
|
81
81
|
requests~=2.32.5
|
82
82
|
trio~=0.30.0
|
83
83
|
cssselect==1.3.0
|
@@ -140,7 +140,7 @@ pycparser==2.22
|
|
140
140
|
|
141
141
|
[pdfminer:python_version >= "3.9"]
|
142
142
|
pdfminer.six==20250506
|
143
|
-
cryptography==46.0.
|
143
|
+
cryptography==46.0.2
|
144
144
|
cffi==2.0.0
|
145
145
|
pycparser==2.23
|
146
146
|
|
@@ -167,7 +167,7 @@ setup(
|
|
167
167
|
'typing-extensions>=4.13.2',
|
168
168
|
"sbvirtualdisplay>=1.4.0",
|
169
169
|
'MarkupSafe==2.1.5;python_version<"3.9"',
|
170
|
-
'MarkupSafe>=3.0.
|
170
|
+
'MarkupSafe>=3.0.3;python_version>="3.9"',
|
171
171
|
"Jinja2>=3.1.6",
|
172
172
|
"six>=1.17.0",
|
173
173
|
'parse>=1.20.2',
|
@@ -216,7 +216,7 @@ setup(
|
|
216
216
|
"behave==1.2.6", # Newer ones had issues
|
217
217
|
'soupsieve==2.7;python_version<"3.9"',
|
218
218
|
'soupsieve~=2.8;python_version>="3.9"',
|
219
|
-
"beautifulsoup4~=4.
|
219
|
+
"beautifulsoup4~=4.14.2",
|
220
220
|
'pyotp==2.9.0',
|
221
221
|
'python-xlib==0.33;platform_system=="Linux"',
|
222
222
|
'markdown-it-py==3.0.0;python_version<"3.10"',
|
@@ -270,7 +270,7 @@ setup(
|
|
270
270
|
'pdfminer.six==20250324;python_version<"3.9"',
|
271
271
|
'pdfminer.six==20250506;python_version>="3.9"',
|
272
272
|
'cryptography==39.0.2;python_version<"3.9"',
|
273
|
-
'cryptography==46.0.
|
273
|
+
'cryptography==46.0.2;python_version>="3.9"',
|
274
274
|
'cffi==1.17.1;python_version<"3.9"',
|
275
275
|
'cffi==2.0.0;python_version>="3.9"',
|
276
276
|
'pycparser==2.22;python_version<"3.9"',
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/undetected/cdp_driver/__init__.py
RENAMED
File without changes
|
{seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/undetected/cdp_driver/_contradict.py
RENAMED
File without changes
|
File without changes
|
{seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/undetected/cdp_driver/cdp_util.py
RENAMED
File without changes
|
File without changes
|
{seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/undetected/cdp_driver/connection.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/utilities/selenium_grid/__init__.py
RENAMED
File without changes
|
File without changes
|
{seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/utilities/selenium_grid/font_color
RENAMED
File without changes
|
File without changes
|
{seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/utilities/selenium_grid/grid-node
RENAMED
File without changes
|
{seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/utilities/selenium_grid/grid_hub.py
RENAMED
File without changes
|
{seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/utilities/selenium_grid/grid_node.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh
RENAMED
File without changes
|
{seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/utilities/selenium_ide/__init__.py
RENAMED
File without changes
|
{seleniumbase-4.41.10 → seleniumbase-4.41.12}/seleniumbase/utilities/selenium_ide/convert_ide.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|