seleniumbase 4.34.17__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.17/seleniumbase.egg-info → seleniumbase-4.35.0}/PKG-INFO +2 -2
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/requirements.txt +1 -1
- seleniumbase-4.35.0/seleniumbase/__version__.py +2 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/core/browser_launcher.py +20 -1
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/core/sb_cdp.py +55 -45
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/fixtures/base_case.py +11 -8
- {seleniumbase-4.34.17 → seleniumbase-4.35.0/seleniumbase.egg-info}/PKG-INFO +2 -2
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase.egg-info/requires.txt +1 -1
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/setup.py +1 -1
- seleniumbase-4.34.17/seleniumbase/__version__.py +0 -2
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/.gitignore +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/LICENSE +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/MANIFEST.in +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/README.md +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/install.sh +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/pyproject.toml +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/pytest.ini +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/sbase/__init__.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/sbase/__main__.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/sbase/steps.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/__init__.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/behave/behave_sb.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/common/decorators.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/common/exceptions.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/config/proxy_list.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/config/settings.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/console_scripts/run.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/console_scripts/sb_install.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/console_scripts/sb_recorder.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/core/detect_b_ver.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/core/log_helper.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/core/mysql.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/core/proxy_helper.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/core/recorder_helper.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/core/report_helper.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/core/sb_driver.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/extensions/__init__.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/fixtures/__init__.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/fixtures/constants.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/fixtures/js_utils.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/fixtures/page_actions.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/fixtures/page_utils.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/fixtures/shared_utils.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/fixtures/xpath_to_css.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/js_code/__init__.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/masterqa/__init__.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/masterqa/master_qa.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/plugins/__init__.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/plugins/base_plugin.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/plugins/driver_manager.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/plugins/pytest_plugin.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/plugins/sb_manager.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/plugins/selenium_plugin.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/resources/__init__.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/translate/master_dict.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/undetected/__init__.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/undetected/cdp.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/undetected/cdp_driver/config.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/undetected/cdp_driver/element.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/undetected/patcher.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/undetected/webelement.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/utilities/__init__.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase.egg-info/SOURCES.txt +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.34.17 → seleniumbase-4.35.0}/setup.cfg +0 -0
- {seleniumbase-4.34.17 → 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
|
@@ -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
|
@@ -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:
|
@@ -497,7 +497,7 @@ class CDPMethods():
|
|
497
497
|
element.send_keys("\r\n")
|
498
498
|
time.sleep(0.044)
|
499
499
|
self.__slow_mode_pause_if_set()
|
500
|
-
return self.loop.run_until_complete(self.page.
|
500
|
+
return self.loop.run_until_complete(self.page.sleep(0.025))
|
501
501
|
|
502
502
|
def __query_selector(self, element, selector):
|
503
503
|
selector = self.__convert_to_css_if_xpath(selector)
|
@@ -864,7 +864,7 @@ class CDPMethods():
|
|
864
864
|
text = text[:-1] + "\r\n"
|
865
865
|
element.send_keys(text)
|
866
866
|
self.__slow_mode_pause_if_set()
|
867
|
-
self.loop.run_until_complete(self.page.
|
867
|
+
self.loop.run_until_complete(self.page.sleep(0.025))
|
868
868
|
|
869
869
|
def press_keys(self, selector, text, timeout=None):
|
870
870
|
"""Similar to send_keys(), but presses keys at human speed."""
|
@@ -884,7 +884,7 @@ class CDPMethods():
|
|
884
884
|
element.send_keys("\r\n")
|
885
885
|
time.sleep(0.044)
|
886
886
|
self.__slow_mode_pause_if_set()
|
887
|
-
self.loop.run_until_complete(self.page.
|
887
|
+
self.loop.run_until_complete(self.page.sleep(0.025))
|
888
888
|
|
889
889
|
def type(self, selector, text, timeout=None):
|
890
890
|
"""Similar to send_keys(), but clears the text field first."""
|
@@ -899,7 +899,7 @@ class CDPMethods():
|
|
899
899
|
text = text[:-1] + "\r\n"
|
900
900
|
element.send_keys(text)
|
901
901
|
self.__slow_mode_pause_if_set()
|
902
|
-
self.loop.run_until_complete(self.page.
|
902
|
+
self.loop.run_until_complete(self.page.sleep(0.025))
|
903
903
|
|
904
904
|
def set_value(self, selector, text, timeout=None):
|
905
905
|
"""Similar to send_keys(), but clears the text field first."""
|
@@ -937,7 +937,7 @@ class CDPMethods():
|
|
937
937
|
self.__add_light_pause()
|
938
938
|
self.send_keys(selector, "\n")
|
939
939
|
self.__slow_mode_pause_if_set()
|
940
|
-
self.loop.run_until_complete(self.page.
|
940
|
+
self.loop.run_until_complete(self.page.sleep(0.025))
|
941
941
|
|
942
942
|
def evaluate(self, expression):
|
943
943
|
"""Run a JavaScript expression and return the result."""
|
@@ -1377,7 +1377,7 @@ class CDPMethods():
|
|
1377
1377
|
pyautogui.press(key)
|
1378
1378
|
time.sleep(0.044)
|
1379
1379
|
self.__slow_mode_pause_if_set()
|
1380
|
-
self.loop.run_until_complete(self.page.
|
1380
|
+
self.loop.run_until_complete(self.page.sleep(0.025))
|
1381
1381
|
|
1382
1382
|
def gui_press_keys(self, keys):
|
1383
1383
|
self.__install_pyautogui_if_missing()
|
@@ -1392,7 +1392,7 @@ class CDPMethods():
|
|
1392
1392
|
pyautogui.press(key)
|
1393
1393
|
time.sleep(0.044)
|
1394
1394
|
self.__slow_mode_pause_if_set()
|
1395
|
-
self.loop.run_until_complete(self.page.
|
1395
|
+
self.loop.run_until_complete(self.page.sleep(0.025))
|
1396
1396
|
|
1397
1397
|
def gui_write(self, text):
|
1398
1398
|
self.__install_pyautogui_if_missing()
|
@@ -1405,7 +1405,7 @@ class CDPMethods():
|
|
1405
1405
|
self.__make_sure_pyautogui_lock_is_writable()
|
1406
1406
|
pyautogui.write(text)
|
1407
1407
|
self.__slow_mode_pause_if_set()
|
1408
|
-
self.loop.run_until_complete(self.page.
|
1408
|
+
self.loop.run_until_complete(self.page.sleep(0.025))
|
1409
1409
|
|
1410
1410
|
def __gui_click_x_y(self, x, y, timeframe=0.25, uc_lock=False):
|
1411
1411
|
self.__install_pyautogui_if_missing()
|
@@ -1820,37 +1820,8 @@ class CDPMethods():
|
|
1820
1820
|
time.sleep(0.1)
|
1821
1821
|
raise Exception("Element {%s} was not visible!" % selector)
|
1822
1822
|
|
1823
|
-
def
|
1824
|
-
"""
|
1825
|
-
self.assert_element_visible(selector, timeout=timeout)
|
1826
|
-
return True
|
1827
|
-
|
1828
|
-
def assert_element_visible(self, selector, timeout=None):
|
1829
|
-
"""Same as assert_element()"""
|
1830
|
-
if not timeout:
|
1831
|
-
timeout = settings.SMALL_TIMEOUT
|
1832
|
-
try:
|
1833
|
-
self.select(selector, timeout=timeout)
|
1834
|
-
except Exception:
|
1835
|
-
raise Exception("Element {%s} was not found!" % selector)
|
1836
|
-
for i in range(30):
|
1837
|
-
if self.is_element_visible(selector):
|
1838
|
-
return True
|
1839
|
-
time.sleep(0.1)
|
1840
|
-
raise Exception("Element {%s} was not visible!" % selector)
|
1841
|
-
|
1842
|
-
def assert_element_present(self, selector, timeout=None):
|
1843
|
-
"""Assert element is present in the DOM. (Visibility NOT required)"""
|
1844
|
-
if not timeout:
|
1845
|
-
timeout = settings.SMALL_TIMEOUT
|
1846
|
-
try:
|
1847
|
-
self.select(selector, timeout=timeout)
|
1848
|
-
except Exception:
|
1849
|
-
raise Exception("Element {%s} was not found!" % selector)
|
1850
|
-
return True
|
1851
|
-
|
1852
|
-
def assert_element_absent(self, selector, timeout=None):
|
1853
|
-
"""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)"""
|
1854
1825
|
if not timeout:
|
1855
1826
|
timeout = settings.SMALL_TIMEOUT
|
1856
1827
|
start_ms = time.time() * 1000.0
|
@@ -1858,6 +1829,8 @@ class CDPMethods():
|
|
1858
1829
|
for i in range(int(timeout * 10)):
|
1859
1830
|
if not self.is_element_present(selector):
|
1860
1831
|
return True
|
1832
|
+
elif not self.is_element_visible(selector):
|
1833
|
+
return True
|
1861
1834
|
now_ms = time.time() * 1000.0
|
1862
1835
|
if now_ms >= stop_ms:
|
1863
1836
|
break
|
@@ -1866,12 +1839,12 @@ class CDPMethods():
|
|
1866
1839
|
if timeout == 1:
|
1867
1840
|
plural = ""
|
1868
1841
|
raise Exception(
|
1869
|
-
"Element {%s} was still
|
1842
|
+
"Element {%s} was still visible after %s second%s!"
|
1870
1843
|
% (selector, timeout, plural)
|
1871
1844
|
)
|
1872
1845
|
|
1873
|
-
def
|
1874
|
-
"""
|
1846
|
+
def wait_for_element_absent(self, selector, timeout=None):
|
1847
|
+
"""Wait for element to not be present in the DOM."""
|
1875
1848
|
if not timeout:
|
1876
1849
|
timeout = settings.SMALL_TIMEOUT
|
1877
1850
|
start_ms = time.time() * 1000.0
|
@@ -1879,8 +1852,6 @@ class CDPMethods():
|
|
1879
1852
|
for i in range(int(timeout * 10)):
|
1880
1853
|
if not self.is_element_present(selector):
|
1881
1854
|
return True
|
1882
|
-
elif not self.is_element_visible(selector):
|
1883
|
-
return True
|
1884
1855
|
now_ms = time.time() * 1000.0
|
1885
1856
|
if now_ms >= stop_ms:
|
1886
1857
|
break
|
@@ -1889,10 +1860,49 @@ class CDPMethods():
|
|
1889
1860
|
if timeout == 1:
|
1890
1861
|
plural = ""
|
1891
1862
|
raise Exception(
|
1892
|
-
"Element {%s} was still
|
1863
|
+
"Element {%s} was still present after %s second%s!"
|
1893
1864
|
% (selector, timeout, plural)
|
1894
1865
|
)
|
1895
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
|
+
|
1896
1906
|
def assert_element_attribute(self, selector, attribute, value=None):
|
1897
1907
|
attributes = self.get_element_attributes(selector)
|
1898
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():
|
@@ -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
|
@@ -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
|
@@ -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
|
File without changes
|
File without changes
|
{seleniumbase-4.34.17 → 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.17 → 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.17 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/__init__.py
RENAMED
File without changes
|
File without changes
|
{seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/font_color
RENAMED
File without changes
|
File without changes
|
File without changes
|
{seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/grid_hub.py
RENAMED
File without changes
|
{seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/grid_node.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat
RENAMED
File without changes
|
{seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh
RENAMED
File without changes
|
{seleniumbase-4.34.17 → seleniumbase-4.35.0}/seleniumbase/utilities/selenium_ide/__init__.py
RENAMED
File without changes
|
{seleniumbase-4.34.17 → 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
|