seleniumbase 4.34.16__tar.gz → 4.35.0__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.34.16/seleniumbase.egg-info → seleniumbase-4.35.0}/PKG-INFO +3 -3
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/requirements.txt +2 -2
- seleniumbase-4.35.0/seleniumbase/__version__.py +2 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/core/browser_launcher.py +20 -1
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/core/sb_cdp.py +91 -47
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/fixtures/base_case.py +11 -8
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/plugins/base_plugin.py +12 -15
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/plugins/selenium_plugin.py +1 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0/seleniumbase.egg-info}/PKG-INFO +3 -3
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase.egg-info/requires.txt +2 -2
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/setup.py +2 -2
- seleniumbase-4.34.16/seleniumbase/__version__.py +0 -2
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/.gitignore +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/LICENSE +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/MANIFEST.in +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/README.md +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/install.sh +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/pyproject.toml +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/pytest.ini +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/sbase/__init__.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/sbase/__main__.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/sbase/steps.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/__init__.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/behave/behave_sb.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/common/decorators.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/common/exceptions.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/config/proxy_list.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/config/settings.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/console_scripts/run.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/console_scripts/sb_install.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/console_scripts/sb_recorder.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/core/detect_b_ver.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/core/log_helper.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/core/mysql.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/core/proxy_helper.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/core/recorder_helper.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/core/report_helper.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/core/sb_driver.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/extensions/__init__.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/fixtures/__init__.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/fixtures/constants.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/fixtures/js_utils.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/fixtures/page_actions.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/fixtures/page_utils.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/fixtures/shared_utils.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/fixtures/xpath_to_css.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/js_code/__init__.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/masterqa/__init__.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/masterqa/master_qa.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/plugins/__init__.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/plugins/driver_manager.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/plugins/pytest_plugin.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/plugins/sb_manager.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/resources/__init__.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/translate/master_dict.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/undetected/__init__.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/undetected/cdp.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/undetected/cdp_driver/config.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/undetected/cdp_driver/element.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/undetected/patcher.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/undetected/webelement.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/utilities/__init__.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase.egg-info/SOURCES.txt +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/setup.cfg +0 -0
- {seleniumbase-4.34.16 → seleniumbase-4.35.0}/virtualenv_install.sh +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: seleniumbase
|
3
|
-
Version: 4.
|
3
|
+
Version: 4.35.0
|
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
|
@@ -73,7 +73,7 @@ Requires-Dist: filelock~=3.16.1; python_version < "3.9"
|
|
73
73
|
Requires-Dist: filelock>=3.17.0; python_version >= "3.9"
|
74
74
|
Requires-Dist: fasteners>=0.19
|
75
75
|
Requires-Dist: mycdp>=1.1.0
|
76
|
-
Requires-Dist: pynose>=1.5.
|
76
|
+
Requires-Dist: pynose>=1.5.4
|
77
77
|
Requires-Dist: platformdirs>=4.3.6
|
78
78
|
Requires-Dist: typing-extensions>=4.12.2
|
79
79
|
Requires-Dist: sbvirtualdisplay>=1.4.0
|
@@ -104,7 +104,7 @@ Requires-Dist: trio-websocket==0.12.1
|
|
104
104
|
Requires-Dist: wsproto==1.2.0
|
105
105
|
Requires-Dist: websocket-client==1.8.0
|
106
106
|
Requires-Dist: selenium==4.27.1; python_version < "3.9"
|
107
|
-
Requires-Dist: selenium==4.
|
107
|
+
Requires-Dist: selenium==4.29.0; python_version >= "3.9"
|
108
108
|
Requires-Dist: cssselect==1.2.0
|
109
109
|
Requires-Dist: sortedcontainers==2.4.0
|
110
110
|
Requires-Dist: execnet==2.1.1
|
@@ -12,7 +12,7 @@ filelock~=3.16.1;python_version<"3.9"
|
|
12
12
|
filelock>=3.17.0;python_version>="3.9"
|
13
13
|
fasteners>=0.19
|
14
14
|
mycdp>=1.1.0
|
15
|
-
pynose>=1.5.
|
15
|
+
pynose>=1.5.4
|
16
16
|
platformdirs>=4.3.6
|
17
17
|
typing-extensions>=4.12.2
|
18
18
|
sbvirtualdisplay>=1.4.0
|
@@ -43,7 +43,7 @@ trio-websocket==0.12.1
|
|
43
43
|
wsproto==1.2.0
|
44
44
|
websocket-client==1.8.0
|
45
45
|
selenium==4.27.1;python_version<"3.9"
|
46
|
-
selenium==4.
|
46
|
+
selenium==4.29.0;python_version>="3.9"
|
47
47
|
cssselect==1.2.0
|
48
48
|
sortedcontainers==2.4.0
|
49
49
|
execnet==2.1.1
|
@@ -723,6 +723,8 @@ def uc_open_with_cdp_mode(driver, url=None):
|
|
723
723
|
cdp.wait_for_text = CDPM.wait_for_text
|
724
724
|
cdp.wait_for_text_not_visible = CDPM.wait_for_text_not_visible
|
725
725
|
cdp.wait_for_element_visible = CDPM.wait_for_element_visible
|
726
|
+
cdp.wait_for_element_not_visible = CDPM.wait_for_element_not_visible
|
727
|
+
cdp.wait_for_element_absent = CDPM.wait_for_element_absent
|
726
728
|
cdp.assert_element = CDPM.assert_element
|
727
729
|
cdp.assert_element_visible = CDPM.assert_element_visible
|
728
730
|
cdp.assert_element_present = CDPM.assert_element_present
|
@@ -1628,9 +1630,19 @@ def _uc_gui_handle_captcha_(driver, frame="iframe", ctype=None):
|
|
1628
1630
|
):
|
1629
1631
|
driver.uc_open_with_disconnect(driver.current_url, 3.8)
|
1630
1632
|
with suppress(Exception):
|
1633
|
+
if "--debug" in sys.argv:
|
1634
|
+
if sb_config._saved_cf_tab_count == 1:
|
1635
|
+
print(' <DEBUG> pyautogui.press("\\t")')
|
1636
|
+
else:
|
1637
|
+
print(
|
1638
|
+
' <DEBUG> pyautogui.press("\\t") * %s'
|
1639
|
+
% sb_config._saved_cf_tab_count
|
1640
|
+
)
|
1631
1641
|
for i in range(sb_config._saved_cf_tab_count):
|
1632
1642
|
pyautogui.press("\t")
|
1633
1643
|
time.sleep(0.027)
|
1644
|
+
if "--debug" in sys.argv:
|
1645
|
+
print(' <DEBUG> pyautogui.press(" ")')
|
1634
1646
|
pyautogui.press(" ")
|
1635
1647
|
else:
|
1636
1648
|
driver.disconnect()
|
@@ -2310,7 +2322,14 @@ def _set_chrome_options(
|
|
2310
2322
|
and not enable_3d_apis
|
2311
2323
|
):
|
2312
2324
|
chrome_options.add_argument("--disable-gpu")
|
2313
|
-
if
|
2325
|
+
if (
|
2326
|
+
(not IS_LINUX and is_using_uc(undetectable, browser_name))
|
2327
|
+
or (
|
2328
|
+
IS_MAC
|
2329
|
+
and binary_location
|
2330
|
+
and "chrome-headless-shell" in binary_location
|
2331
|
+
)
|
2332
|
+
):
|
2314
2333
|
chrome_options.add_argument("--disable-dev-shm-usage")
|
2315
2334
|
chrome_options.add_argument("--disable-application-cache")
|
2316
2335
|
if IS_LINUX:
|
@@ -56,6 +56,9 @@ class CDPMethods():
|
|
56
56
|
element, *args, **kwargs
|
57
57
|
)
|
58
58
|
element.focus = lambda: self.__focus(element)
|
59
|
+
element.gui_click = (
|
60
|
+
lambda *args, **kwargs: self.__gui_click(element, *args, **kwargs)
|
61
|
+
)
|
59
62
|
element.highlight_overlay = lambda: self.__highlight_overlay(element)
|
60
63
|
element.mouse_click = lambda: self.__mouse_click(element)
|
61
64
|
element.mouse_drag = (
|
@@ -426,6 +429,39 @@ class CDPMethods():
|
|
426
429
|
self.loop.run_until_complete(element.focus_async())
|
427
430
|
)
|
428
431
|
|
432
|
+
def __gui_click(self, element, timeframe=None):
|
433
|
+
element.scroll_into_view()
|
434
|
+
self.__add_light_pause()
|
435
|
+
position = element.get_position()
|
436
|
+
x = position.x
|
437
|
+
y = position.y
|
438
|
+
e_width = position.width
|
439
|
+
e_height = position.height
|
440
|
+
# Relative to window
|
441
|
+
element_rect = {"height": e_height, "width": e_width, "x": x, "y": y}
|
442
|
+
window_rect = self.get_window_rect()
|
443
|
+
w_bottom_y = window_rect["y"] + window_rect["height"]
|
444
|
+
viewport_height = window_rect["innerHeight"]
|
445
|
+
x = window_rect["x"] + element_rect["x"]
|
446
|
+
y = w_bottom_y - viewport_height + element_rect["y"]
|
447
|
+
y_scroll_offset = window_rect["pageYOffset"]
|
448
|
+
y = y - y_scroll_offset
|
449
|
+
x = x + window_rect["scrollX"]
|
450
|
+
y = y + window_rect["scrollY"]
|
451
|
+
# Relative to screen
|
452
|
+
element_rect = {"height": e_height, "width": e_width, "x": x, "y": y}
|
453
|
+
e_width = element_rect["width"]
|
454
|
+
e_height = element_rect["height"]
|
455
|
+
e_x = element_rect["x"]
|
456
|
+
e_y = element_rect["y"]
|
457
|
+
x, y = ((e_x + e_width / 2.0) + 0.5), ((e_y + e_height / 2.0) + 0.5)
|
458
|
+
if not timeframe or not isinstance(timeframe, (int, float)):
|
459
|
+
timeframe = 0.25
|
460
|
+
if timeframe > 3:
|
461
|
+
timeframe = 3
|
462
|
+
self.gui_click_x_y(x, y, timeframe=timeframe)
|
463
|
+
return self.loop.run_until_complete(self.page.wait())
|
464
|
+
|
429
465
|
def __highlight_overlay(self, element):
|
430
466
|
return (
|
431
467
|
self.loop.run_until_complete(element.highlight_overlay_async())
|
@@ -461,9 +497,7 @@ class CDPMethods():
|
|
461
497
|
element.send_keys("\r\n")
|
462
498
|
time.sleep(0.044)
|
463
499
|
self.__slow_mode_pause_if_set()
|
464
|
-
return (
|
465
|
-
self.loop.run_until_complete(self.page.wait())
|
466
|
-
)
|
500
|
+
return self.loop.run_until_complete(self.page.sleep(0.025))
|
467
501
|
|
468
502
|
def __query_selector(self, element, selector):
|
469
503
|
selector = self.__convert_to_css_if_xpath(selector)
|
@@ -830,7 +864,7 @@ class CDPMethods():
|
|
830
864
|
text = text[:-1] + "\r\n"
|
831
865
|
element.send_keys(text)
|
832
866
|
self.__slow_mode_pause_if_set()
|
833
|
-
self.loop.run_until_complete(self.page.
|
867
|
+
self.loop.run_until_complete(self.page.sleep(0.025))
|
834
868
|
|
835
869
|
def press_keys(self, selector, text, timeout=None):
|
836
870
|
"""Similar to send_keys(), but presses keys at human speed."""
|
@@ -850,7 +884,7 @@ class CDPMethods():
|
|
850
884
|
element.send_keys("\r\n")
|
851
885
|
time.sleep(0.044)
|
852
886
|
self.__slow_mode_pause_if_set()
|
853
|
-
self.loop.run_until_complete(self.page.
|
887
|
+
self.loop.run_until_complete(self.page.sleep(0.025))
|
854
888
|
|
855
889
|
def type(self, selector, text, timeout=None):
|
856
890
|
"""Similar to send_keys(), but clears the text field first."""
|
@@ -865,7 +899,7 @@ class CDPMethods():
|
|
865
899
|
text = text[:-1] + "\r\n"
|
866
900
|
element.send_keys(text)
|
867
901
|
self.__slow_mode_pause_if_set()
|
868
|
-
self.loop.run_until_complete(self.page.
|
902
|
+
self.loop.run_until_complete(self.page.sleep(0.025))
|
869
903
|
|
870
904
|
def set_value(self, selector, text, timeout=None):
|
871
905
|
"""Similar to send_keys(), but clears the text field first."""
|
@@ -903,7 +937,7 @@ class CDPMethods():
|
|
903
937
|
self.__add_light_pause()
|
904
938
|
self.send_keys(selector, "\n")
|
905
939
|
self.__slow_mode_pause_if_set()
|
906
|
-
self.loop.run_until_complete(self.page.
|
940
|
+
self.loop.run_until_complete(self.page.sleep(0.025))
|
907
941
|
|
908
942
|
def evaluate(self, expression):
|
909
943
|
"""Run a JavaScript expression and return the result."""
|
@@ -1343,7 +1377,7 @@ class CDPMethods():
|
|
1343
1377
|
pyautogui.press(key)
|
1344
1378
|
time.sleep(0.044)
|
1345
1379
|
self.__slow_mode_pause_if_set()
|
1346
|
-
self.loop.run_until_complete(self.page.
|
1380
|
+
self.loop.run_until_complete(self.page.sleep(0.025))
|
1347
1381
|
|
1348
1382
|
def gui_press_keys(self, keys):
|
1349
1383
|
self.__install_pyautogui_if_missing()
|
@@ -1358,7 +1392,7 @@ class CDPMethods():
|
|
1358
1392
|
pyautogui.press(key)
|
1359
1393
|
time.sleep(0.044)
|
1360
1394
|
self.__slow_mode_pause_if_set()
|
1361
|
-
self.loop.run_until_complete(self.page.
|
1395
|
+
self.loop.run_until_complete(self.page.sleep(0.025))
|
1362
1396
|
|
1363
1397
|
def gui_write(self, text):
|
1364
1398
|
self.__install_pyautogui_if_missing()
|
@@ -1371,7 +1405,7 @@ class CDPMethods():
|
|
1371
1405
|
self.__make_sure_pyautogui_lock_is_writable()
|
1372
1406
|
pyautogui.write(text)
|
1373
1407
|
self.__slow_mode_pause_if_set()
|
1374
|
-
self.loop.run_until_complete(self.page.
|
1408
|
+
self.loop.run_until_complete(self.page.sleep(0.025))
|
1375
1409
|
|
1376
1410
|
def __gui_click_x_y(self, x, y, timeframe=0.25, uc_lock=False):
|
1377
1411
|
self.__install_pyautogui_if_missing()
|
@@ -1786,37 +1820,8 @@ class CDPMethods():
|
|
1786
1820
|
time.sleep(0.1)
|
1787
1821
|
raise Exception("Element {%s} was not visible!" % selector)
|
1788
1822
|
|
1789
|
-
def
|
1790
|
-
"""
|
1791
|
-
self.assert_element_visible(selector, timeout=timeout)
|
1792
|
-
return True
|
1793
|
-
|
1794
|
-
def assert_element_visible(self, selector, timeout=None):
|
1795
|
-
"""Same as assert_element()"""
|
1796
|
-
if not timeout:
|
1797
|
-
timeout = settings.SMALL_TIMEOUT
|
1798
|
-
try:
|
1799
|
-
self.select(selector, timeout=timeout)
|
1800
|
-
except Exception:
|
1801
|
-
raise Exception("Element {%s} was not found!" % selector)
|
1802
|
-
for i in range(30):
|
1803
|
-
if self.is_element_visible(selector):
|
1804
|
-
return True
|
1805
|
-
time.sleep(0.1)
|
1806
|
-
raise Exception("Element {%s} was not visible!" % selector)
|
1807
|
-
|
1808
|
-
def assert_element_present(self, selector, timeout=None):
|
1809
|
-
"""Assert element is present in the DOM. (Visibility NOT required)"""
|
1810
|
-
if not timeout:
|
1811
|
-
timeout = settings.SMALL_TIMEOUT
|
1812
|
-
try:
|
1813
|
-
self.select(selector, timeout=timeout)
|
1814
|
-
except Exception:
|
1815
|
-
raise Exception("Element {%s} was not found!" % selector)
|
1816
|
-
return True
|
1817
|
-
|
1818
|
-
def assert_element_absent(self, selector, timeout=None):
|
1819
|
-
"""Assert element is not present in the DOM."""
|
1823
|
+
def wait_for_element_not_visible(self, selector, timeout=None):
|
1824
|
+
"""Wait for element to not be visible on page. (May still be in DOM)"""
|
1820
1825
|
if not timeout:
|
1821
1826
|
timeout = settings.SMALL_TIMEOUT
|
1822
1827
|
start_ms = time.time() * 1000.0
|
@@ -1824,6 +1829,8 @@ class CDPMethods():
|
|
1824
1829
|
for i in range(int(timeout * 10)):
|
1825
1830
|
if not self.is_element_present(selector):
|
1826
1831
|
return True
|
1832
|
+
elif not self.is_element_visible(selector):
|
1833
|
+
return True
|
1827
1834
|
now_ms = time.time() * 1000.0
|
1828
1835
|
if now_ms >= stop_ms:
|
1829
1836
|
break
|
@@ -1832,12 +1839,12 @@ class CDPMethods():
|
|
1832
1839
|
if timeout == 1:
|
1833
1840
|
plural = ""
|
1834
1841
|
raise Exception(
|
1835
|
-
"Element {%s} was still
|
1842
|
+
"Element {%s} was still visible after %s second%s!"
|
1836
1843
|
% (selector, timeout, plural)
|
1837
1844
|
)
|
1838
1845
|
|
1839
|
-
def
|
1840
|
-
"""
|
1846
|
+
def wait_for_element_absent(self, selector, timeout=None):
|
1847
|
+
"""Wait for element to not be present in the DOM."""
|
1841
1848
|
if not timeout:
|
1842
1849
|
timeout = settings.SMALL_TIMEOUT
|
1843
1850
|
start_ms = time.time() * 1000.0
|
@@ -1845,8 +1852,6 @@ class CDPMethods():
|
|
1845
1852
|
for i in range(int(timeout * 10)):
|
1846
1853
|
if not self.is_element_present(selector):
|
1847
1854
|
return True
|
1848
|
-
elif not self.is_element_visible(selector):
|
1849
|
-
return True
|
1850
1855
|
now_ms = time.time() * 1000.0
|
1851
1856
|
if now_ms >= stop_ms:
|
1852
1857
|
break
|
@@ -1855,10 +1860,49 @@ class CDPMethods():
|
|
1855
1860
|
if timeout == 1:
|
1856
1861
|
plural = ""
|
1857
1862
|
raise Exception(
|
1858
|
-
"Element {%s} was still
|
1863
|
+
"Element {%s} was still present after %s second%s!"
|
1859
1864
|
% (selector, timeout, plural)
|
1860
1865
|
)
|
1861
1866
|
|
1867
|
+
def assert_element(self, selector, timeout=None):
|
1868
|
+
"""Same as assert_element_visible()"""
|
1869
|
+
self.assert_element_visible(selector, timeout=timeout)
|
1870
|
+
return True
|
1871
|
+
|
1872
|
+
def assert_element_visible(self, selector, timeout=None):
|
1873
|
+
"""Same as assert_element()"""
|
1874
|
+
if not timeout:
|
1875
|
+
timeout = settings.SMALL_TIMEOUT
|
1876
|
+
try:
|
1877
|
+
self.select(selector, timeout=timeout)
|
1878
|
+
except Exception:
|
1879
|
+
raise Exception("Element {%s} was not found!" % selector)
|
1880
|
+
for i in range(30):
|
1881
|
+
if self.is_element_visible(selector):
|
1882
|
+
return True
|
1883
|
+
time.sleep(0.1)
|
1884
|
+
raise Exception("Element {%s} was not visible!" % selector)
|
1885
|
+
|
1886
|
+
def assert_element_present(self, selector, timeout=None):
|
1887
|
+
"""Assert element is present in the DOM. (Visibility NOT required)"""
|
1888
|
+
if not timeout:
|
1889
|
+
timeout = settings.SMALL_TIMEOUT
|
1890
|
+
try:
|
1891
|
+
self.select(selector, timeout=timeout)
|
1892
|
+
except Exception:
|
1893
|
+
raise Exception("Element {%s} was not found!" % selector)
|
1894
|
+
return True
|
1895
|
+
|
1896
|
+
def assert_element_absent(self, selector, timeout=None):
|
1897
|
+
"""Assert element is not present in the DOM."""
|
1898
|
+
self.wait_for_element_absent(selector, timeout=timeout)
|
1899
|
+
return True
|
1900
|
+
|
1901
|
+
def assert_element_not_visible(self, selector, timeout=None):
|
1902
|
+
"""Assert element is not visible on page. (May still be in DOM)"""
|
1903
|
+
self.wait_for_element_not_visible(selector, timeout=timeout)
|
1904
|
+
return True
|
1905
|
+
|
1862
1906
|
def assert_element_attribute(self, selector, attribute, value=None):
|
1863
1907
|
attributes = self.get_element_attributes(selector)
|
1864
1908
|
if attribute not in attributes:
|
@@ -9124,7 +9124,7 @@ class BaseCase(unittest.TestCase):
|
|
9124
9124
|
original_selector = selector
|
9125
9125
|
selector, by = self.__recalculate_selector(selector, by)
|
9126
9126
|
if self.__is_cdp_swap_needed():
|
9127
|
-
self.cdp.
|
9127
|
+
self.cdp.wait_for_element_absent(selector, timeout=timeout)
|
9128
9128
|
return True
|
9129
9129
|
return page_actions.wait_for_element_absent(
|
9130
9130
|
self.driver,
|
@@ -9585,7 +9585,7 @@ class BaseCase(unittest.TestCase):
|
|
9585
9585
|
self.assert_elements_present(selector, by=by, timeout=timeout)
|
9586
9586
|
return True
|
9587
9587
|
if self.__is_cdp_swap_needed():
|
9588
|
-
self.cdp.assert_element_present(selector)
|
9588
|
+
self.cdp.assert_element_present(selector, timeout=timeout)
|
9589
9589
|
return True
|
9590
9590
|
if self.__is_shadow_selector(selector):
|
9591
9591
|
self.__assert_shadow_element_present(selector)
|
@@ -9662,7 +9662,7 @@ class BaseCase(unittest.TestCase):
|
|
9662
9662
|
if self.timeout_multiplier and timeout == settings.SMALL_TIMEOUT:
|
9663
9663
|
timeout = self.__get_new_timeout(timeout)
|
9664
9664
|
if self.__is_cdp_swap_needed():
|
9665
|
-
self.cdp.assert_element(selector)
|
9665
|
+
self.cdp.assert_element(selector, timeout=timeout)
|
9666
9666
|
return True
|
9667
9667
|
if isinstance(selector, list):
|
9668
9668
|
self.assert_elements(selector, by=by, timeout=timeout)
|
@@ -9955,7 +9955,7 @@ class BaseCase(unittest.TestCase):
|
|
9955
9955
|
messenger_post, selector, by
|
9956
9956
|
)
|
9957
9957
|
elif self.__is_cdp_swap_needed():
|
9958
|
-
self.cdp.assert_text(text, selector)
|
9958
|
+
self.cdp.assert_text(text, selector, timeout=timeout)
|
9959
9959
|
return True
|
9960
9960
|
elif not self.is_connected():
|
9961
9961
|
self.connect()
|
@@ -10005,7 +10005,7 @@ class BaseCase(unittest.TestCase):
|
|
10005
10005
|
original_selector = selector
|
10006
10006
|
selector, by = self.__recalculate_selector(selector, by)
|
10007
10007
|
if self.__is_cdp_swap_needed():
|
10008
|
-
self.cdp.assert_exact_text(text, selector)
|
10008
|
+
self.cdp.assert_exact_text(text, selector, timeout=timeout)
|
10009
10009
|
return True
|
10010
10010
|
if self.__is_shadow_selector(selector):
|
10011
10011
|
self.__assert_exact_shadow_text_visible(text, selector, timeout)
|
@@ -10245,6 +10245,9 @@ class BaseCase(unittest.TestCase):
|
|
10245
10245
|
timeout = self.__get_new_timeout(timeout)
|
10246
10246
|
original_selector = selector
|
10247
10247
|
selector, by = self.__recalculate_selector(selector, by)
|
10248
|
+
if self.__is_cdp_swap_needed():
|
10249
|
+
self.cdp.wait_for_element_absent(selector, timeout=timeout)
|
10250
|
+
return True
|
10248
10251
|
return page_actions.wait_for_element_absent(
|
10249
10252
|
self.driver,
|
10250
10253
|
selector,
|
@@ -10267,7 +10270,7 @@ class BaseCase(unittest.TestCase):
|
|
10267
10270
|
if self.timeout_multiplier and timeout == settings.SMALL_TIMEOUT:
|
10268
10271
|
timeout = self.__get_new_timeout(timeout)
|
10269
10272
|
if self.__is_cdp_swap_needed():
|
10270
|
-
self.cdp.assert_element_absent(selector)
|
10273
|
+
self.cdp.assert_element_absent(selector, timeout=timeout)
|
10271
10274
|
return True
|
10272
10275
|
self.wait_for_element_absent(selector, by=by, timeout=timeout)
|
10273
10276
|
return True
|
@@ -10288,7 +10291,7 @@ class BaseCase(unittest.TestCase):
|
|
10288
10291
|
original_selector = selector
|
10289
10292
|
selector, by = self.__recalculate_selector(selector, by)
|
10290
10293
|
if self.__is_cdp_swap_needed():
|
10291
|
-
self.cdp.
|
10294
|
+
self.cdp.wait_for_element_not_visible(selector, timeout=timeout)
|
10292
10295
|
return True
|
10293
10296
|
return page_actions.wait_for_element_not_visible(
|
10294
10297
|
self.driver,
|
@@ -10310,7 +10313,7 @@ class BaseCase(unittest.TestCase):
|
|
10310
10313
|
if self.timeout_multiplier and timeout == settings.SMALL_TIMEOUT:
|
10311
10314
|
timeout = self.__get_new_timeout(timeout)
|
10312
10315
|
if self.__is_cdp_swap_needed():
|
10313
|
-
self.cdp.assert_element_not_visible(selector)
|
10316
|
+
self.cdp.assert_element_not_visible(selector, timeout=timeout)
|
10314
10317
|
return True
|
10315
10318
|
self.wait_for_element_not_visible(selector, by=by, timeout=timeout)
|
10316
10319
|
if self.recorder_mode and self.__current_url_is_recordable():
|
@@ -208,7 +208,6 @@ class Base(Plugin):
|
|
208
208
|
self.duration = float(0)
|
209
209
|
self.page_results_list = []
|
210
210
|
self.test_count = 0
|
211
|
-
self.import_error = False
|
212
211
|
log_path = constants.Logs.LATEST + "/"
|
213
212
|
archive_logs = options.archive_logs
|
214
213
|
log_helper.log_folder_setup(log_path, archive_logs)
|
@@ -238,6 +237,7 @@ class Base(Plugin):
|
|
238
237
|
)
|
239
238
|
else:
|
240
239
|
variables = {}
|
240
|
+
test.test.test_id = test.id()
|
241
241
|
test.test.is_nosetest = True
|
242
242
|
test.test.environment = self.options.environment
|
243
243
|
test.test.env = self.options.environment # Add a shortened version
|
@@ -263,17 +263,16 @@ class Base(Plugin):
|
|
263
263
|
)
|
264
264
|
log_helper.clear_empty_logs()
|
265
265
|
if self.report_on:
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
)
|
266
|
+
report_helper.add_bad_page_log_file(self.page_results_list)
|
267
|
+
report_log_path = report_helper.archive_new_report_logs()
|
268
|
+
report_helper.build_report(
|
269
|
+
report_log_path,
|
270
|
+
self.page_results_list,
|
271
|
+
self.successes,
|
272
|
+
self.failures,
|
273
|
+
self.options.browser,
|
274
|
+
self.show_report,
|
275
|
+
)
|
277
276
|
|
278
277
|
def addSuccess(self, test, capt):
|
279
278
|
if self.report_on:
|
@@ -293,9 +292,6 @@ class Base(Plugin):
|
|
293
292
|
"%.2fs" % (float(time.time()) - float(self.start_time))
|
294
293
|
)
|
295
294
|
if test.id() == "nose.failure.Failure.runTest":
|
296
|
-
print(">>> ERROR: Could not locate tests to run!")
|
297
|
-
print(">>> The Test Report WILL NOT be generated!")
|
298
|
-
self.import_error = True
|
299
295
|
return
|
300
296
|
self.failures.append(test.id())
|
301
297
|
self.page_results_list.append(
|
@@ -314,6 +310,7 @@ class Base(Plugin):
|
|
314
310
|
test._log_fail_data()
|
315
311
|
sb_config._excinfo_tb = err
|
316
312
|
log_path = None
|
313
|
+
source = None
|
317
314
|
if hasattr(sb_config, "_test_logpath"):
|
318
315
|
log_path = sb_config._test_logpath
|
319
316
|
if hasattr(sb_config, "_last_page_source"):
|
@@ -1309,6 +1309,7 @@ class SeleniumBrowser(Plugin):
|
|
1309
1309
|
test.test.dashboard = False
|
1310
1310
|
test.test._multithreaded = False
|
1311
1311
|
test.test._reuse_session = False
|
1312
|
+
sb_config.recorder_mode = test.test.recorder_mode
|
1312
1313
|
sb_config.no_screenshot = test.test.no_screenshot_after_test
|
1313
1314
|
if test.test.servername != "localhost":
|
1314
1315
|
# Using Selenium Grid
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: seleniumbase
|
3
|
-
Version: 4.
|
3
|
+
Version: 4.35.0
|
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
|
@@ -73,7 +73,7 @@ Requires-Dist: filelock~=3.16.1; python_version < "3.9"
|
|
73
73
|
Requires-Dist: filelock>=3.17.0; python_version >= "3.9"
|
74
74
|
Requires-Dist: fasteners>=0.19
|
75
75
|
Requires-Dist: mycdp>=1.1.0
|
76
|
-
Requires-Dist: pynose>=1.5.
|
76
|
+
Requires-Dist: pynose>=1.5.4
|
77
77
|
Requires-Dist: platformdirs>=4.3.6
|
78
78
|
Requires-Dist: typing-extensions>=4.12.2
|
79
79
|
Requires-Dist: sbvirtualdisplay>=1.4.0
|
@@ -104,7 +104,7 @@ Requires-Dist: trio-websocket==0.12.1
|
|
104
104
|
Requires-Dist: wsproto==1.2.0
|
105
105
|
Requires-Dist: websocket-client==1.8.0
|
106
106
|
Requires-Dist: selenium==4.27.1; python_version < "3.9"
|
107
|
-
Requires-Dist: selenium==4.
|
107
|
+
Requires-Dist: selenium==4.29.0; python_version >= "3.9"
|
108
108
|
Requires-Dist: cssselect==1.2.0
|
109
109
|
Requires-Dist: sortedcontainers==2.4.0
|
110
110
|
Requires-Dist: execnet==2.1.1
|
@@ -6,7 +6,7 @@ certifi>=2025.1.31
|
|
6
6
|
exceptiongroup>=1.2.2
|
7
7
|
fasteners>=0.19
|
8
8
|
mycdp>=1.1.0
|
9
|
-
pynose>=1.5.
|
9
|
+
pynose>=1.5.4
|
10
10
|
platformdirs>=4.3.6
|
11
11
|
typing-extensions>=4.12.2
|
12
12
|
sbvirtualdisplay>=1.4.0
|
@@ -75,7 +75,7 @@ websockets>=15.0
|
|
75
75
|
filelock>=3.17.0
|
76
76
|
MarkupSafe>=3.0.2
|
77
77
|
trio==0.29.0
|
78
|
-
selenium==4.
|
78
|
+
selenium==4.29.0
|
79
79
|
pytest-rerunfailures==15.0
|
80
80
|
|
81
81
|
[allure]
|
@@ -161,7 +161,7 @@ setup(
|
|
161
161
|
'filelock>=3.17.0;python_version>="3.9"',
|
162
162
|
'fasteners>=0.19',
|
163
163
|
"mycdp>=1.1.0",
|
164
|
-
"pynose>=1.5.
|
164
|
+
"pynose>=1.5.4",
|
165
165
|
'platformdirs>=4.3.6',
|
166
166
|
'typing-extensions>=4.12.2',
|
167
167
|
"sbvirtualdisplay>=1.4.0",
|
@@ -192,7 +192,7 @@ setup(
|
|
192
192
|
'wsproto==1.2.0',
|
193
193
|
'websocket-client==1.8.0',
|
194
194
|
'selenium==4.27.1;python_version<"3.9"',
|
195
|
-
'selenium==4.
|
195
|
+
'selenium==4.29.0;python_version>="3.9"',
|
196
196
|
'cssselect==1.2.0',
|
197
197
|
"sortedcontainers==2.4.0",
|
198
198
|
'execnet==2.1.1',
|
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.34.16 → seleniumbase-4.35.0}/seleniumbase/undetected/cdp_driver/_contradict.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{seleniumbase-4.34.16 → seleniumbase-4.35.0}/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.34.16 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/__init__.py
RENAMED
File without changes
|
File without changes
|
{seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/font_color
RENAMED
File without changes
|
File without changes
|
File without changes
|
{seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/grid_hub.py
RENAMED
File without changes
|
{seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/grid_node.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat
RENAMED
File without changes
|
{seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh
RENAMED
File without changes
|
{seleniumbase-4.34.16 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_ide/__init__.py
RENAMED
File without changes
|
{seleniumbase-4.34.16 → seleniumbase-4.35.0}/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
|