seleniumbase 4.49.7__tar.gz → 4.49.9__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.7/seleniumbase.egg-info → seleniumbase-4.49.9}/PKG-INFO +22 -21
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/README.md +16 -15
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/requirements.txt +2 -2
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/sbase/steps.py +1 -1
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/__version__.py +1 -1
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/config/settings.py +1 -1
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/console_scripts/run.py +3 -3
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/console_scripts/sb_mkdir.py +10 -9
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/console_scripts/sb_mkfile.py +7 -7
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/core/browser_launcher.py +6 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/core/recorder_helper.py +6 -6
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/core/sb_cdp.py +101 -5
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/fixtures/base_case.py +66 -34
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/fixtures/constants.py +1 -1
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/plugins/pytest_plugin.py +1 -1
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/plugins/selenium_plugin.py +1 -1
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/translate/master_dict.py +47 -34
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/undetected/cdp_driver/browser.py +6 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/undetected/cdp_driver/cdp_util.py +2 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/undetected/cdp_driver/connection.py +13 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/undetected/cdp_driver/tab.py +25 -36
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/utilities/selenium_ide/convert_ide.py +2 -2
- {seleniumbase-4.49.7 → seleniumbase-4.49.9/seleniumbase.egg-info}/PKG-INFO +22 -21
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase.egg-info/requires.txt +3 -3
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/setup.py +11 -11
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/.gitignore +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/LICENSE +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/MANIFEST.in +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/install.sh +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/pyproject.toml +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/pytest.ini +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/sbase/__init__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/sbase/__main__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/__init__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/behave/behave_sb.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/common/decorators.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/common/exceptions.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/config/proxy_list.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/console_scripts/sb_install.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/console_scripts/sb_recorder.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/core/detect_b_ver.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/core/log_helper.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/core/mysql.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/core/nest_asyncio.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/core/proxy_helper.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/core/report_helper.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/core/sb_driver.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/drivers/atlas_drivers/__init__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/drivers/brave_drivers/__init__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/drivers/chromium_drivers/__init__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/drivers/comet_drivers/__init__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/drivers/opera_drivers/__init__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/extensions/__init__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/fixtures/__init__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/fixtures/js_utils.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/fixtures/page_actions.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/fixtures/page_utils.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/fixtures/shared_utils.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/fixtures/xpath_to_css.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/js_code/__init__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/masterqa/__init__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/masterqa/master_qa.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/plugins/__init__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/plugins/base_plugin.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/plugins/driver_manager.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/plugins/sb_manager.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/resources/__init__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/undetected/__init__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/undetected/cdp.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/undetected/cdp_driver/config.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/undetected/cdp_driver/element.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/undetected/patcher.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/undetected/webelement.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/utilities/__init__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase.egg-info/SOURCES.txt +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/setup.cfg +0 -0
- {seleniumbase-4.49.7 → seleniumbase-4.49.9}/virtualenv_install.sh +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: seleniumbase
|
|
3
|
-
Version: 4.49.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 4.49.9
|
|
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
|
|
7
7
|
Author-email: mdmintz@gmail.com
|
|
@@ -16,7 +16,7 @@ Project-URL: PyPI, https://pypi.org/project/seleniumbase/
|
|
|
16
16
|
Project-URL: Source, https://github.com/seleniumbase/SeleniumBase
|
|
17
17
|
Project-URL: Repository, https://github.com/seleniumbase/SeleniumBase
|
|
18
18
|
Project-URL: Documentation, https://seleniumbase.io/
|
|
19
|
-
Keywords: pytest,selenium,framework,automation,browser,testing,webdriver,seleniumbase,sbase,web-crawling,web-scraping,stealth,chromium,playwright,
|
|
19
|
+
Keywords: pytest,selenium,framework,automation,browser,testing,webdriver,seleniumbase,sbase,web-crawling,web-scraping,stealth,chromium,playwright,anti-detection,captcha-bypass,fingerprint,recaptcha,turnstile,headless
|
|
20
20
|
Platform: Windows
|
|
21
21
|
Platform: Linux
|
|
22
22
|
Platform: Mac OS-X
|
|
@@ -71,7 +71,7 @@ Requires-Dist: exceptiongroup>=1.3.1
|
|
|
71
71
|
Requires-Dist: websockets~=15.0.1; python_version < "3.10"
|
|
72
72
|
Requires-Dist: websockets>=16.0; python_version >= "3.10"
|
|
73
73
|
Requires-Dist: filelock~=3.19.1; python_version < "3.10"
|
|
74
|
-
Requires-Dist: filelock>=3.29.
|
|
74
|
+
Requires-Dist: filelock>=3.29.3; python_version >= "3.10"
|
|
75
75
|
Requires-Dist: fasteners>=0.20
|
|
76
76
|
Requires-Dist: mycdp>=1.3.7
|
|
77
77
|
Requires-Dist: pynose>=1.5.5
|
|
@@ -127,7 +127,7 @@ Requires-Dist: pytest-xdist==3.8.0
|
|
|
127
127
|
Requires-Dist: parameterized==0.9.0
|
|
128
128
|
Requires-Dist: behave==1.2.6
|
|
129
129
|
Requires-Dist: soupsieve~=2.8.4
|
|
130
|
-
Requires-Dist: beautifulsoup4~=4.
|
|
130
|
+
Requires-Dist: beautifulsoup4~=4.15.0
|
|
131
131
|
Requires-Dist: pyotp==2.9.0
|
|
132
132
|
Requires-Dist: python-xlib==0.33; platform_system == "Linux"
|
|
133
133
|
Requires-Dist: PyAutoGUI>=0.9.54; platform_system == "Linux"
|
|
@@ -153,7 +153,7 @@ Requires-Dist: mss==10.2.0; extra == "mss"
|
|
|
153
153
|
Provides-Extra: pdfminer
|
|
154
154
|
Requires-Dist: pdfminer.six==20251107; python_version < "3.10" and extra == "pdfminer"
|
|
155
155
|
Requires-Dist: pdfminer.six==20260107; python_version >= "3.10" and extra == "pdfminer"
|
|
156
|
-
Requires-Dist: cryptography==48.0.
|
|
156
|
+
Requires-Dist: cryptography==48.0.1; extra == "pdfminer"
|
|
157
157
|
Requires-Dist: cffi==2.0.0; extra == "pdfminer"
|
|
158
158
|
Requires-Dist: pycparser==2.23; python_version < "3.10" and extra == "pdfminer"
|
|
159
159
|
Requires-Dist: pycparser==3.0; python_version >= "3.10" and extra == "pdfminer"
|
|
@@ -187,8 +187,8 @@ Dynamic: summary
|
|
|
187
187
|
<!-- SeleniumBase Docs -->
|
|
188
188
|
|
|
189
189
|
<meta property="og:site_name" content="SeleniumBase">
|
|
190
|
-
<meta property="og:title" content="SeleniumBase: Stealthy Chromium Automation
|
|
191
|
-
<meta property="og:description" content="Stealthy Chromium Automation
|
|
190
|
+
<meta property="og:title" content="SeleniumBase: Stealthy Chromium Automation and E2E Testing with Python." />
|
|
191
|
+
<meta property="og:description" content="Stealthy Chromium Automation and E2E Testing with Python." />
|
|
192
192
|
<meta property="og:keywords" content="Python, pytest, selenium, webdriver, testing, automation, seleniumbase, framework, dashboard, recorder, reports, screenshots, playwright, stealth, CAPTCHA">
|
|
193
193
|
<meta property="og:image" content="https://seleniumbase.github.io/cdn/img/mac_sb_logo_5b.png" />
|
|
194
194
|
<link rel="icon" href="https://seleniumbase.github.io/img/logo6.png" />
|
|
@@ -252,7 +252,7 @@ Dynamic: summary
|
|
|
252
252
|
from seleniumbase import sb_cdp
|
|
253
253
|
|
|
254
254
|
sb = sb_cdp.Chrome()
|
|
255
|
-
sb.
|
|
255
|
+
sb.goto("https://browserscan.net/bot-detection")
|
|
256
256
|
sb.sleep(3)
|
|
257
257
|
sb.quit()
|
|
258
258
|
```
|
|
@@ -291,7 +291,7 @@ with sync_playwright() as p:
|
|
|
291
291
|
from seleniumbase import sb_cdp
|
|
292
292
|
|
|
293
293
|
sb = sb_cdp.Chrome(locale="en", ad_block=True)
|
|
294
|
-
sb.
|
|
294
|
+
sb.goto("https://browserscan.net/bot-detection")
|
|
295
295
|
sb.flash("Test Results", duration=1.5, pause=0.5)
|
|
296
296
|
sb.assert_element('strong:contains("Normal")')
|
|
297
297
|
print("Bot Not Detected")
|
|
@@ -428,7 +428,7 @@ BaseCase.main(__name__, __file__) # Call pytest
|
|
|
428
428
|
|
|
429
429
|
class MyTestClass(BaseCase):
|
|
430
430
|
def test_swag_labs(self):
|
|
431
|
-
self.
|
|
431
|
+
self.goto("https://www.saucedemo.com")
|
|
432
432
|
self.type("#user-name", "standard_user")
|
|
433
433
|
self.type("#password", "secret_sauce\n")
|
|
434
434
|
self.assert_element("div.inventory_list")
|
|
@@ -548,7 +548,7 @@ BaseCase.main(__name__, __file__)
|
|
|
548
548
|
|
|
549
549
|
class TestSimpleLogin(BaseCase):
|
|
550
550
|
def test_simple_login(self):
|
|
551
|
-
self.
|
|
551
|
+
self.goto("seleniumbase.io/simple/login")
|
|
552
552
|
self.type("#username", "demo_user")
|
|
553
553
|
self.type("#password", "secret_pass")
|
|
554
554
|
self.click('a:contains("Sign in")')
|
|
@@ -565,7 +565,7 @@ class TestSimpleLogin(BaseCase):
|
|
|
565
565
|
from seleniumbase import SB
|
|
566
566
|
|
|
567
567
|
with SB() as sb:
|
|
568
|
-
sb.
|
|
568
|
+
sb.goto("seleniumbase.io/simple/login")
|
|
569
569
|
sb.type("#username", "demo_user")
|
|
570
570
|
sb.type("#password", "secret_pass")
|
|
571
571
|
sb.click('a:contains("Sign in")')
|
|
@@ -583,7 +583,7 @@ from seleniumbase import Driver
|
|
|
583
583
|
|
|
584
584
|
driver = Driver()
|
|
585
585
|
try:
|
|
586
|
-
driver.
|
|
586
|
+
driver.goto("seleniumbase.io/simple/login")
|
|
587
587
|
driver.type("#username", "demo_user")
|
|
588
588
|
driver.type("#password", "secret_pass")
|
|
589
589
|
driver.click('a:contains("Sign in")')
|
|
@@ -735,7 +735,7 @@ BaseCase.main(__name__, __file__)
|
|
|
735
735
|
|
|
736
736
|
class MyTestClass(BaseCase):
|
|
737
737
|
def test_swag_labs(self):
|
|
738
|
-
self.
|
|
738
|
+
self.goto("https://www.saucedemo.com")
|
|
739
739
|
self.type("#user-name", "standard_user")
|
|
740
740
|
self.type("#password", "secret_sauce\n")
|
|
741
741
|
self.assert_element("div.inventory_list")
|
|
@@ -768,7 +768,8 @@ class MyTestClass(BaseCase):
|
|
|
768
768
|
<h3><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Here are some common SeleniumBase methods:</h3>
|
|
769
769
|
|
|
770
770
|
```python
|
|
771
|
-
self.
|
|
771
|
+
self.goto(url) # Navigate the browser window to the URL.
|
|
772
|
+
self.open(url) # Same as `self.goto(url)`
|
|
772
773
|
self.activate_cdp_mode() # Activate CDP Mode from UC Mode.
|
|
773
774
|
self.type(selector, text) # Update the field with the text.
|
|
774
775
|
self.click(selector) # Click the element with the selector.
|
|
@@ -1144,7 +1145,7 @@ BaseCase.main(__name__, __file__)
|
|
|
1144
1145
|
class MyTestClass(BaseCase):
|
|
1145
1146
|
|
|
1146
1147
|
def test_find_army_of_robots_on_xkcd_desert_island(self):
|
|
1147
|
-
self.
|
|
1148
|
+
self.goto("https://xkcd.com/731/")
|
|
1148
1149
|
self.assert_element("div#ARMY_OF_ROBOTS", timeout=1) # This should fail
|
|
1149
1150
|
```
|
|
1150
1151
|
|
|
@@ -1348,7 +1349,7 @@ pytest [YOUR_TEST_FILE.py] --with-db-reporting --with-s3-logging
|
|
|
1348
1349
|
🔵 **Navigating to a web page: (and related commands)**
|
|
1349
1350
|
|
|
1350
1351
|
```python
|
|
1351
|
-
self.
|
|
1352
|
+
self.goto("https://xkcd.com/378/") # This method opens the specified page.
|
|
1352
1353
|
|
|
1353
1354
|
self.go_back() # This method navigates the browser to the previous page.
|
|
1354
1355
|
|
|
@@ -1485,7 +1486,7 @@ def is_there_a_cloaked_klingon_ship_on_this_page():
|
|
|
1485
1486
|
|
|
1486
1487
|
```python
|
|
1487
1488
|
if self.is_text_visible("You Shall Not Pass!", "h1"):
|
|
1488
|
-
self.
|
|
1489
|
+
self.goto("https://www.youtube.com/watch?v=3xYXUeSmb-Y")
|
|
1489
1490
|
```
|
|
1490
1491
|
|
|
1491
1492
|
<div></div>
|
|
@@ -1630,7 +1631,7 @@ self.execute_script("return jQuery('textarea')[2].value") # Returns the css "va
|
|
|
1630
1631
|
```python
|
|
1631
1632
|
start_page = "https://xkcd.com/465/"
|
|
1632
1633
|
destination_page = "https://github.com/seleniumbase/SeleniumBase"
|
|
1633
|
-
self.
|
|
1634
|
+
self.goto(start_page)
|
|
1634
1635
|
referral_link = '''<a class='analytics test' href='%s'>Free-Referral Button!</a>''' % destination_page
|
|
1635
1636
|
self.execute_script('''document.body.innerHTML = \"%s\"''' % referral_link)
|
|
1636
1637
|
self.click("a.analytics") # Clicks the generated button
|
|
@@ -1650,7 +1651,7 @@ BaseCase.main(__name__, __file__)
|
|
|
1650
1651
|
|
|
1651
1652
|
class DeferredAssertTests(BaseCase):
|
|
1652
1653
|
def test_deferred_asserts(self):
|
|
1653
|
-
self.
|
|
1654
|
+
self.goto("https://xkcd.com/993/")
|
|
1654
1655
|
self.wait_for_element("#comic")
|
|
1655
1656
|
self.deferred_assert_element('img[alt="Brand Identity"]')
|
|
1656
1657
|
self.deferred_assert_element('img[alt="Rocket Ship"]') # Will Fail
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<!-- SeleniumBase Docs -->
|
|
2
2
|
|
|
3
3
|
<meta property="og:site_name" content="SeleniumBase">
|
|
4
|
-
<meta property="og:title" content="SeleniumBase: Stealthy Chromium Automation
|
|
5
|
-
<meta property="og:description" content="Stealthy Chromium Automation
|
|
4
|
+
<meta property="og:title" content="SeleniumBase: Stealthy Chromium Automation and E2E Testing with Python." />
|
|
5
|
+
<meta property="og:description" content="Stealthy Chromium Automation and E2E Testing with Python." />
|
|
6
6
|
<meta property="og:keywords" content="Python, pytest, selenium, webdriver, testing, automation, seleniumbase, framework, dashboard, recorder, reports, screenshots, playwright, stealth, CAPTCHA">
|
|
7
7
|
<meta property="og:image" content="https://seleniumbase.github.io/cdn/img/mac_sb_logo_5b.png" />
|
|
8
8
|
<link rel="icon" href="https://seleniumbase.github.io/img/logo6.png" />
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
from seleniumbase import sb_cdp
|
|
67
67
|
|
|
68
68
|
sb = sb_cdp.Chrome()
|
|
69
|
-
sb.
|
|
69
|
+
sb.goto("https://browserscan.net/bot-detection")
|
|
70
70
|
sb.sleep(3)
|
|
71
71
|
sb.quit()
|
|
72
72
|
```
|
|
@@ -105,7 +105,7 @@ with sync_playwright() as p:
|
|
|
105
105
|
from seleniumbase import sb_cdp
|
|
106
106
|
|
|
107
107
|
sb = sb_cdp.Chrome(locale="en", ad_block=True)
|
|
108
|
-
sb.
|
|
108
|
+
sb.goto("https://browserscan.net/bot-detection")
|
|
109
109
|
sb.flash("Test Results", duration=1.5, pause=0.5)
|
|
110
110
|
sb.assert_element('strong:contains("Normal")')
|
|
111
111
|
print("Bot Not Detected")
|
|
@@ -242,7 +242,7 @@ BaseCase.main(__name__, __file__) # Call pytest
|
|
|
242
242
|
|
|
243
243
|
class MyTestClass(BaseCase):
|
|
244
244
|
def test_swag_labs(self):
|
|
245
|
-
self.
|
|
245
|
+
self.goto("https://www.saucedemo.com")
|
|
246
246
|
self.type("#user-name", "standard_user")
|
|
247
247
|
self.type("#password", "secret_sauce\n")
|
|
248
248
|
self.assert_element("div.inventory_list")
|
|
@@ -362,7 +362,7 @@ BaseCase.main(__name__, __file__)
|
|
|
362
362
|
|
|
363
363
|
class TestSimpleLogin(BaseCase):
|
|
364
364
|
def test_simple_login(self):
|
|
365
|
-
self.
|
|
365
|
+
self.goto("seleniumbase.io/simple/login")
|
|
366
366
|
self.type("#username", "demo_user")
|
|
367
367
|
self.type("#password", "secret_pass")
|
|
368
368
|
self.click('a:contains("Sign in")')
|
|
@@ -379,7 +379,7 @@ class TestSimpleLogin(BaseCase):
|
|
|
379
379
|
from seleniumbase import SB
|
|
380
380
|
|
|
381
381
|
with SB() as sb:
|
|
382
|
-
sb.
|
|
382
|
+
sb.goto("seleniumbase.io/simple/login")
|
|
383
383
|
sb.type("#username", "demo_user")
|
|
384
384
|
sb.type("#password", "secret_pass")
|
|
385
385
|
sb.click('a:contains("Sign in")')
|
|
@@ -397,7 +397,7 @@ from seleniumbase import Driver
|
|
|
397
397
|
|
|
398
398
|
driver = Driver()
|
|
399
399
|
try:
|
|
400
|
-
driver.
|
|
400
|
+
driver.goto("seleniumbase.io/simple/login")
|
|
401
401
|
driver.type("#username", "demo_user")
|
|
402
402
|
driver.type("#password", "secret_pass")
|
|
403
403
|
driver.click('a:contains("Sign in")')
|
|
@@ -549,7 +549,7 @@ BaseCase.main(__name__, __file__)
|
|
|
549
549
|
|
|
550
550
|
class MyTestClass(BaseCase):
|
|
551
551
|
def test_swag_labs(self):
|
|
552
|
-
self.
|
|
552
|
+
self.goto("https://www.saucedemo.com")
|
|
553
553
|
self.type("#user-name", "standard_user")
|
|
554
554
|
self.type("#password", "secret_sauce\n")
|
|
555
555
|
self.assert_element("div.inventory_list")
|
|
@@ -582,7 +582,8 @@ class MyTestClass(BaseCase):
|
|
|
582
582
|
<h3><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Here are some common SeleniumBase methods:</h3>
|
|
583
583
|
|
|
584
584
|
```python
|
|
585
|
-
self.
|
|
585
|
+
self.goto(url) # Navigate the browser window to the URL.
|
|
586
|
+
self.open(url) # Same as `self.goto(url)`
|
|
586
587
|
self.activate_cdp_mode() # Activate CDP Mode from UC Mode.
|
|
587
588
|
self.type(selector, text) # Update the field with the text.
|
|
588
589
|
self.click(selector) # Click the element with the selector.
|
|
@@ -958,7 +959,7 @@ BaseCase.main(__name__, __file__)
|
|
|
958
959
|
class MyTestClass(BaseCase):
|
|
959
960
|
|
|
960
961
|
def test_find_army_of_robots_on_xkcd_desert_island(self):
|
|
961
|
-
self.
|
|
962
|
+
self.goto("https://xkcd.com/731/")
|
|
962
963
|
self.assert_element("div#ARMY_OF_ROBOTS", timeout=1) # This should fail
|
|
963
964
|
```
|
|
964
965
|
|
|
@@ -1162,7 +1163,7 @@ pytest [YOUR_TEST_FILE.py] --with-db-reporting --with-s3-logging
|
|
|
1162
1163
|
🔵 **Navigating to a web page: (and related commands)**
|
|
1163
1164
|
|
|
1164
1165
|
```python
|
|
1165
|
-
self.
|
|
1166
|
+
self.goto("https://xkcd.com/378/") # This method opens the specified page.
|
|
1166
1167
|
|
|
1167
1168
|
self.go_back() # This method navigates the browser to the previous page.
|
|
1168
1169
|
|
|
@@ -1299,7 +1300,7 @@ def is_there_a_cloaked_klingon_ship_on_this_page():
|
|
|
1299
1300
|
|
|
1300
1301
|
```python
|
|
1301
1302
|
if self.is_text_visible("You Shall Not Pass!", "h1"):
|
|
1302
|
-
self.
|
|
1303
|
+
self.goto("https://www.youtube.com/watch?v=3xYXUeSmb-Y")
|
|
1303
1304
|
```
|
|
1304
1305
|
|
|
1305
1306
|
<div></div>
|
|
@@ -1444,7 +1445,7 @@ self.execute_script("return jQuery('textarea')[2].value") # Returns the css "va
|
|
|
1444
1445
|
```python
|
|
1445
1446
|
start_page = "https://xkcd.com/465/"
|
|
1446
1447
|
destination_page = "https://github.com/seleniumbase/SeleniumBase"
|
|
1447
|
-
self.
|
|
1448
|
+
self.goto(start_page)
|
|
1448
1449
|
referral_link = '''<a class='analytics test' href='%s'>Free-Referral Button!</a>''' % destination_page
|
|
1449
1450
|
self.execute_script('''document.body.innerHTML = \"%s\"''' % referral_link)
|
|
1450
1451
|
self.click("a.analytics") # Clicks the generated button
|
|
@@ -1464,7 +1465,7 @@ BaseCase.main(__name__, __file__)
|
|
|
1464
1465
|
|
|
1465
1466
|
class DeferredAssertTests(BaseCase):
|
|
1466
1467
|
def test_deferred_asserts(self):
|
|
1467
|
-
self.
|
|
1468
|
+
self.goto("https://xkcd.com/993/")
|
|
1468
1469
|
self.wait_for_element("#comic")
|
|
1469
1470
|
self.deferred_assert_element('img[alt="Brand Identity"]')
|
|
1470
1471
|
self.deferred_assert_element('img[alt="Rocket Ship"]') # Will Fail
|
|
@@ -10,7 +10,7 @@ exceptiongroup>=1.3.1
|
|
|
10
10
|
websockets~=15.0.1;python_version<"3.10"
|
|
11
11
|
websockets>=16.0;python_version>="3.10"
|
|
12
12
|
filelock~=3.19.1;python_version<"3.10"
|
|
13
|
-
filelock>=3.29.
|
|
13
|
+
filelock>=3.29.3;python_version>="3.10"
|
|
14
14
|
fasteners>=0.20
|
|
15
15
|
mycdp>=1.3.7
|
|
16
16
|
pynose>=1.5.5
|
|
@@ -66,7 +66,7 @@ pytest-xdist==3.8.0
|
|
|
66
66
|
parameterized==0.9.0
|
|
67
67
|
behave==1.2.6
|
|
68
68
|
soupsieve~=2.8.4
|
|
69
|
-
beautifulsoup4~=4.
|
|
69
|
+
beautifulsoup4~=4.15.0
|
|
70
70
|
pyotp==2.9.0
|
|
71
71
|
python-xlib==0.33;platform_system=="Linux"
|
|
72
72
|
PyAutoGUI>=0.9.54;platform_system=="Linux"
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# seleniumbase package
|
|
2
|
-
__version__ = "4.49.
|
|
2
|
+
__version__ = "4.49.9"
|
|
@@ -70,7 +70,7 @@ SWITCH_TO_NEW_TABS_ON_CLICK = True
|
|
|
70
70
|
These methods add global waits, such as self.wait_for_ready_state_complete(),
|
|
71
71
|
which waits for document.readyState to be "complete" after browser actions.
|
|
72
72
|
"""
|
|
73
|
-
# Called after self.
|
|
73
|
+
# Called after self.goto(url), NOT driver.get(url)
|
|
74
74
|
WAIT_FOR_RSC_ON_PAGE_LOADS = True
|
|
75
75
|
# Called after self.click(selector), NOT element.click()
|
|
76
76
|
WAIT_FOR_RSC_ON_CLICKS = False
|
|
@@ -293,9 +293,9 @@ def show_mkfile_usage():
|
|
|
293
293
|
print(" If the file already exists, an error is raised.")
|
|
294
294
|
print(" By default, uses English with BaseCase inheritance,")
|
|
295
295
|
print(" and creates a boilerplate with common SeleniumBase")
|
|
296
|
-
print(' methods: "
|
|
296
|
+
print(' methods: "goto", "type", "click", "assert_element",')
|
|
297
297
|
print(' and "assert_text". If using the basic boilerplate')
|
|
298
|
-
print(' option, only the "
|
|
298
|
+
print(' option, only the "goto" method is included. Only the')
|
|
299
299
|
print(" BaseCase format supports Languages or Recorder Mode.")
|
|
300
300
|
print(" UC Mode automatically uses English with SB() format.")
|
|
301
301
|
print("")
|
|
@@ -737,7 +737,7 @@ def show_methods():
|
|
|
737
737
|
print(line)
|
|
738
738
|
print("")
|
|
739
739
|
sbm = ""
|
|
740
|
-
sbm += "*.
|
|
740
|
+
sbm += "*.goto(url) => Navigate the browser window to the URL.\n"
|
|
741
741
|
sbm += "*.type(selector, text) => Update the field with the text.\n"
|
|
742
742
|
sbm += "*.click(selector) => Click the element with the selector.\n"
|
|
743
743
|
sbm += "*.click_link(link_text) => Click the link containing text.\n"
|
|
@@ -413,7 +413,7 @@ def main():
|
|
|
413
413
|
data.append("")
|
|
414
414
|
data.append("class MyTestClass(BaseCase):")
|
|
415
415
|
data.append(" def test_swag_labs(self):")
|
|
416
|
-
data.append(' self.
|
|
416
|
+
data.append(' self.goto("https://www.saucedemo.com")')
|
|
417
417
|
data.append(' self.type("#user-name", "standard_user")')
|
|
418
418
|
data.append(' self.type("#password", "secret_sauce\\n")')
|
|
419
419
|
data.append(' self.assert_element("div.inventory_list")')
|
|
@@ -449,7 +449,7 @@ def main():
|
|
|
449
449
|
data.append("")
|
|
450
450
|
data.append("class DemoSiteTests(BaseCase):")
|
|
451
451
|
data.append(" def test_demo_site(self):")
|
|
452
|
-
data.append(' self.
|
|
452
|
+
data.append(' self.goto("https://seleniumbase.io/demo_page.html")')
|
|
453
453
|
data.append(' self.assert_title("Web Testing Page")')
|
|
454
454
|
data.append(' self.assert_element("tbody#tbodyId")')
|
|
455
455
|
data.append(' self.assert_text("Demo Page", "h1")')
|
|
@@ -561,7 +561,7 @@ def main():
|
|
|
561
561
|
"self, search_term, keyword, title_text):"
|
|
562
562
|
)
|
|
563
563
|
data.append(
|
|
564
|
-
' self.
|
|
564
|
+
' self.goto("https://seleniumbase.io/help_docs/how_it_works/")'
|
|
565
565
|
)
|
|
566
566
|
data.append(
|
|
567
567
|
' self.type(\'[aria-label="Search"]\', search_term)'
|
|
@@ -652,7 +652,7 @@ def main():
|
|
|
652
652
|
data.append("")
|
|
653
653
|
data.append("class DataPage:")
|
|
654
654
|
data.append(" def go_to_data_url(self, sb):")
|
|
655
|
-
data.append(' sb.
|
|
655
|
+
data.append(' sb.goto("data:text/html,<p>Hello!</p><input />")')
|
|
656
656
|
data.append("")
|
|
657
657
|
data.append(" def add_input_text(self, sb, text):")
|
|
658
658
|
data.append(' sb.type("input", text)')
|
|
@@ -672,7 +672,7 @@ def main():
|
|
|
672
672
|
data = []
|
|
673
673
|
data.append("class DataPage:")
|
|
674
674
|
data.append(" def go_to_data_url(self, sb):")
|
|
675
|
-
data.append(' sb.
|
|
675
|
+
data.append(' sb.goto("data:text/html,<p>Hello!</p><input />")')
|
|
676
676
|
data.append("")
|
|
677
677
|
data.append(" def add_input_text(self, sb, text):")
|
|
678
678
|
data.append(' sb.type("input", text)')
|
|
@@ -711,16 +711,17 @@ def main():
|
|
|
711
711
|
data.append(' self.skip("Skipping test in headless mode.")')
|
|
712
712
|
data.append(" if not self.undetectable:")
|
|
713
713
|
data.append(" self.get_new_driver(undetectable=True)")
|
|
714
|
-
data.append(' self.
|
|
714
|
+
data.append(' self.goto("https://google.com/ncr")')
|
|
715
715
|
data.append(
|
|
716
716
|
" sb.click_if_visible('button:contains(\"Accept all\")')"
|
|
717
717
|
)
|
|
718
718
|
data.append(' self.assert_title_contains("Google")')
|
|
719
719
|
data.append(" self.save_screenshot_to_logs()")
|
|
720
|
-
data.append(' self.type(HomePage.search_box, "
|
|
720
|
+
data.append(' self.type(HomePage.search_box, "GitHub")')
|
|
721
721
|
data.append(" self.assert_element(HomePage.search_button)")
|
|
722
722
|
data.append(" self.assert_element(HomePage.feeling_lucky_button)")
|
|
723
723
|
data.append(" self.click(HomePage.search_button)")
|
|
724
|
+
data.append(" self.sleep(1)")
|
|
724
725
|
data.append(
|
|
725
726
|
' self.assert_text("github.com", ResultsPage.search_results)'
|
|
726
727
|
)
|
|
@@ -757,7 +758,7 @@ def main():
|
|
|
757
758
|
data.append("")
|
|
758
759
|
data.append("class LoginPage:")
|
|
759
760
|
data.append(" def login_to_swag_labs(self, sb, username):")
|
|
760
|
-
data.append(' sb.
|
|
761
|
+
data.append(' sb.goto("https://www.saucedemo.com/")')
|
|
761
762
|
data.append(' sb.type("#user-name", username)')
|
|
762
763
|
data.append(' sb.type("#password", "secret_sauce")')
|
|
763
764
|
data.append(" sb.click('input[type=\"submit\"]')")
|
|
@@ -786,7 +787,7 @@ def main():
|
|
|
786
787
|
data.append("")
|
|
787
788
|
data.append("class LoginPage:")
|
|
788
789
|
data.append(" def login_to_swag_labs(self, sb, username):")
|
|
789
|
-
data.append(' sb.
|
|
790
|
+
data.append(' sb.goto("https://www.saucedemo.com/")')
|
|
790
791
|
data.append(' sb.type("#user-name", username)')
|
|
791
792
|
data.append(' sb.type("#password", "secret_sauce")')
|
|
792
793
|
data.append(" sb.click('input[type=\"submit\"]')")
|
|
@@ -184,7 +184,7 @@ def main():
|
|
|
184
184
|
syntax = "DriverContext"
|
|
185
185
|
elif option == "--dm" or option == "--driver-manager":
|
|
186
186
|
syntax = "DriverManager"
|
|
187
|
-
elif option == "--uc":
|
|
187
|
+
elif option == "--uc" or option == "--cdp":
|
|
188
188
|
basic = True
|
|
189
189
|
language = "English"
|
|
190
190
|
syntax = "ContextManager"
|
|
@@ -274,7 +274,7 @@ def main():
|
|
|
274
274
|
data.append("%s" % class_line)
|
|
275
275
|
data.append(" def test_base(self):")
|
|
276
276
|
if not recorder:
|
|
277
|
-
data.append(' self.
|
|
277
|
+
data.append(' self.goto("%s")' % url)
|
|
278
278
|
else:
|
|
279
279
|
data.append(" if self.recorder_ext and not self.xvfb:")
|
|
280
280
|
data.append(" breakpoint()")
|
|
@@ -296,7 +296,7 @@ def main():
|
|
|
296
296
|
elif language == "English" and syntax == "PytestFixture":
|
|
297
297
|
data = []
|
|
298
298
|
data.append("def test_base(sb):")
|
|
299
|
-
data.append(' sb.
|
|
299
|
+
data.append(' sb.goto("data:text/html,<p>Hello<br><input>")')
|
|
300
300
|
if not basic:
|
|
301
301
|
data.append(' sb.type("input", "Goodbye") # selector, text')
|
|
302
302
|
data.append(' sb.click("html body > p") # selector')
|
|
@@ -308,7 +308,7 @@ def main():
|
|
|
308
308
|
data = []
|
|
309
309
|
data.append("class %s:" % class_name)
|
|
310
310
|
data.append(" def test_base(self, sb):")
|
|
311
|
-
data.append(' sb.
|
|
311
|
+
data.append(' sb.goto("data:text/html,<p>Hello<br><input>")')
|
|
312
312
|
if not basic:
|
|
313
313
|
data.append(
|
|
314
314
|
' sb.type("input", "Goodbye") # selector, text'
|
|
@@ -330,10 +330,10 @@ def main():
|
|
|
330
330
|
data.append('with SB(browser="chrome") as sb:')
|
|
331
331
|
if use_uc:
|
|
332
332
|
data.append(' url = "%s"' % url)
|
|
333
|
-
data.append(" sb.
|
|
334
|
-
data.append(" sb.
|
|
333
|
+
data.append(" sb.activate_cdp_mode(url)")
|
|
334
|
+
data.append(" sb.solve_captcha()")
|
|
335
335
|
else:
|
|
336
|
-
data.append(' sb.
|
|
336
|
+
data.append(' sb.goto("%s")' % url)
|
|
337
337
|
if not basic:
|
|
338
338
|
data.append(' sb.type("input", "Goodbye") # selector, text')
|
|
339
339
|
data.append(' sb.click("html body > p") # selector')
|
|
@@ -793,6 +793,7 @@ def uc_open_with_cdp_mode(driver, url=None, **kwargs):
|
|
|
793
793
|
cdp.grant_permissions = CDPM.grant_permissions
|
|
794
794
|
cdp.grant_all_permissions = CDPM.grant_all_permissions
|
|
795
795
|
cdp.reset_permissions = CDPM.reset_permissions
|
|
796
|
+
cdp.get_all_urls = CDPM.get_all_urls
|
|
796
797
|
cdp.get_all_cookies = CDPM.get_all_cookies
|
|
797
798
|
cdp.set_all_cookies = CDPM.set_all_cookies
|
|
798
799
|
cdp.save_cookies = CDPM.save_cookies
|
|
@@ -831,6 +832,11 @@ def uc_open_with_cdp_mode(driver, url=None, **kwargs):
|
|
|
831
832
|
cdp.activate_messenger = CDPM.activate_messenger
|
|
832
833
|
cdp.set_messenger_theme = CDPM.set_messenger_theme
|
|
833
834
|
cdp.post_message = CDPM.post_message
|
|
835
|
+
cdp.download_file = CDPM.download_file
|
|
836
|
+
cdp.save_file_as = CDPM.save_file_as
|
|
837
|
+
cdp.assert_downloaded_file = CDPM.assert_downloaded_file
|
|
838
|
+
cdp.get_path_of_downloaded_file = CDPM.get_path_of_downloaded_file
|
|
839
|
+
cdp.set_download_path = CDPM.set_download_path
|
|
834
840
|
cdp.set_locale = CDPM.set_locale
|
|
835
841
|
cdp.set_local_storage_item = CDPM.set_local_storage_item
|
|
836
842
|
cdp.set_session_storage_item = CDPM.set_session_storage_item
|
|
@@ -13,12 +13,12 @@ def generate_sbase_code(srt_actions):
|
|
|
13
13
|
except Exception:
|
|
14
14
|
pass
|
|
15
15
|
if '"' not in action[2]:
|
|
16
|
-
sb_actions.append('self.
|
|
16
|
+
sb_actions.append('self.goto("%s")' % action[2])
|
|
17
17
|
elif "'" not in action[2]:
|
|
18
|
-
sb_actions.append("self.
|
|
18
|
+
sb_actions.append("self.goto('%s')" % action[2])
|
|
19
19
|
else:
|
|
20
20
|
sb_actions.append(
|
|
21
|
-
'self.
|
|
21
|
+
'self.goto("%s")' % action[2].replace('"', '\\"')
|
|
22
22
|
)
|
|
23
23
|
elif action[0] == "f_url":
|
|
24
24
|
if "%" in action[2]:
|
|
@@ -29,12 +29,12 @@ def generate_sbase_code(srt_actions):
|
|
|
29
29
|
except Exception:
|
|
30
30
|
pass
|
|
31
31
|
if '"' not in action[2]:
|
|
32
|
-
sb_actions.append('self.
|
|
32
|
+
sb_actions.append('self.goto_if_not_url("%s")' % action[2])
|
|
33
33
|
elif "'" not in action[2]:
|
|
34
|
-
sb_actions.append("self.
|
|
34
|
+
sb_actions.append("self.goto_if_not_url('%s')" % action[2])
|
|
35
35
|
else:
|
|
36
36
|
sb_actions.append(
|
|
37
|
-
'self.
|
|
37
|
+
'self.goto_if_not_url("%s")'
|
|
38
38
|
% action[2].replace('"', '\\"')
|
|
39
39
|
)
|
|
40
40
|
elif action[0] == "click":
|