seleniumbase 4.47.6__tar.gz → 4.47.7__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.47.6/seleniumbase.egg-info → seleniumbase-4.47.7}/PKG-INFO +2 -1
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/README.md +1 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/__version__.py +1 -1
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/console_scripts/sb_mkdir.py +3 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/core/browser_launcher.py +1 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/core/sb_cdp.py +31 -2
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/plugins/sb_manager.py +2 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/undetected/cdp_driver/element.py +27 -2
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/undetected/cdp_driver/tab.py +0 -1
- {seleniumbase-4.47.6 → seleniumbase-4.47.7/seleniumbase.egg-info}/PKG-INFO +2 -1
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/.gitignore +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/LICENSE +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/MANIFEST.in +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/install.sh +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/pyproject.toml +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/pytest.ini +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/requirements.txt +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/sbase/__init__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/sbase/__main__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/sbase/steps.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/__init__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/behave/behave_sb.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/common/decorators.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/common/exceptions.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/config/proxy_list.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/config/settings.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/console_scripts/run.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/console_scripts/sb_install.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/console_scripts/sb_recorder.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/core/detect_b_ver.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/core/log_helper.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/core/mysql.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/core/proxy_helper.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/core/recorder_helper.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/core/report_helper.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/core/sb_driver.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/drivers/atlas_drivers/__init__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/drivers/brave_drivers/__init__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/drivers/chromium_drivers/__init__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/drivers/comet_drivers/__init__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/drivers/opera_drivers/__init__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/extensions/__init__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/fixtures/__init__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/fixtures/base_case.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/fixtures/constants.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/fixtures/js_utils.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/fixtures/page_actions.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/fixtures/page_utils.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/fixtures/shared_utils.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/fixtures/xpath_to_css.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/js_code/__init__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/masterqa/__init__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/masterqa/master_qa.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/plugins/__init__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/plugins/base_plugin.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/plugins/driver_manager.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/plugins/pytest_plugin.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/plugins/selenium_plugin.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/resources/__init__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/translate/master_dict.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/undetected/__init__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/undetected/cdp.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/undetected/cdp_driver/config.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/undetected/patcher.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/undetected/webelement.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/utilities/__init__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase.egg-info/SOURCES.txt +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase.egg-info/requires.txt +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/setup.cfg +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/setup.py +0 -0
- {seleniumbase-4.47.6 → seleniumbase-4.47.7}/virtualenv_install.sh +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: seleniumbase
|
|
3
|
-
Version: 4.47.
|
|
3
|
+
Version: 4.47.7
|
|
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
|
|
@@ -293,6 +293,7 @@ from seleniumbase import SB
|
|
|
293
293
|
with SB(uc=True, test=True) as sb:
|
|
294
294
|
url = "https://google.com/ncr"
|
|
295
295
|
sb.activate_cdp_mode(url)
|
|
296
|
+
sb.click_if_visible('button:contains("Accept all")')
|
|
296
297
|
sb.type('[name="q"]', "SeleniumBase GitHub page")
|
|
297
298
|
sb.click('[value="Google Search"]')
|
|
298
299
|
sb.sleep(4) # The "AI Overview" sometimes loads
|
|
@@ -93,6 +93,7 @@ from seleniumbase import SB
|
|
|
93
93
|
with SB(uc=True, test=True) as sb:
|
|
94
94
|
url = "https://google.com/ncr"
|
|
95
95
|
sb.activate_cdp_mode(url)
|
|
96
|
+
sb.click_if_visible('button:contains("Accept all")')
|
|
96
97
|
sb.type('[name="q"]', "SeleniumBase GitHub page")
|
|
97
98
|
sb.click('[value="Google Search"]')
|
|
98
99
|
sb.sleep(4) # The "AI Overview" sometimes loads
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# seleniumbase package
|
|
2
|
-
__version__ = "4.47.
|
|
2
|
+
__version__ = "4.47.7"
|
|
@@ -712,6 +712,9 @@ def main():
|
|
|
712
712
|
data.append(" if not self.undetectable:")
|
|
713
713
|
data.append(" self.get_new_driver(undetectable=True)")
|
|
714
714
|
data.append(' self.open("https://google.com/ncr")')
|
|
715
|
+
data.append(
|
|
716
|
+
" sb.click_if_visible('button:contains(\"Accept all\")')"
|
|
717
|
+
)
|
|
715
718
|
data.append(' self.assert_title_contains("Google")')
|
|
716
719
|
data.append(" self.save_screenshot_to_logs()")
|
|
717
720
|
data.append(' self.type(HomePage.search_box, "github.com")')
|
|
@@ -942,6 +942,7 @@ def uc_open_with_cdp_mode(driver, url=None, **kwargs):
|
|
|
942
942
|
cdp.assert_not_equal = CDPM.assert_not_equal
|
|
943
943
|
cdp.assert_in = CDPM.assert_in
|
|
944
944
|
cdp.assert_not_in = CDPM.assert_not_in
|
|
945
|
+
cdp.js_scroll_into_view = CDPM.js_scroll_into_view
|
|
945
946
|
cdp.scroll_into_view = CDPM.scroll_into_view
|
|
946
947
|
cdp.scroll_to_y = CDPM.scroll_to_y
|
|
947
948
|
cdp.scroll_by_y = CDPM.scroll_by_y
|
|
@@ -66,6 +66,7 @@ class CDPMethods():
|
|
|
66
66
|
lambda *args, **kwargs: self.__gui_click(element, *args, **kwargs)
|
|
67
67
|
)
|
|
68
68
|
element.highlight_overlay = lambda: self.__highlight_overlay(element)
|
|
69
|
+
element.is_in_viewport = lambda: self.__is_in_viewport(element)
|
|
69
70
|
element.mouse_click = lambda: self.__mouse_click(element)
|
|
70
71
|
element.click_with_offset = (
|
|
71
72
|
lambda *args, **kwargs: self.__mouse_click_with_offset_async(
|
|
@@ -543,6 +544,11 @@ class CDPMethods():
|
|
|
543
544
|
self.loop.run_until_complete(element.highlight_overlay_async())
|
|
544
545
|
)
|
|
545
546
|
|
|
547
|
+
def __is_in_viewport(self, element):
|
|
548
|
+
return (
|
|
549
|
+
self.loop.run_until_complete(element.is_in_viewport_async())
|
|
550
|
+
)
|
|
551
|
+
|
|
546
552
|
def __mouse_click(self, element):
|
|
547
553
|
result = (
|
|
548
554
|
self.loop.run_until_complete(element.mouse_click_async())
|
|
@@ -800,9 +806,9 @@ class CDPMethods():
|
|
|
800
806
|
timeout = settings.SMALL_TIMEOUT
|
|
801
807
|
self.__slow_mode_pause_if_set()
|
|
802
808
|
element = self.find_element(selector, timeout=timeout)
|
|
803
|
-
if scroll:
|
|
804
|
-
element.scroll_into_view()
|
|
805
809
|
tag_name = element.tag_name
|
|
810
|
+
current_url = self.get_current_url()
|
|
811
|
+
|
|
806
812
|
if tag_name:
|
|
807
813
|
tag_name = tag_name.lower().strip()
|
|
808
814
|
if (
|
|
@@ -810,12 +816,24 @@ class CDPMethods():
|
|
|
810
816
|
"a", "button", "canvas", "div", "input", "li", "span", "label"
|
|
811
817
|
]
|
|
812
818
|
and "contains(" not in selector
|
|
819
|
+
and "://google" not in current_url
|
|
820
|
+
and "://www.google" not in current_url
|
|
813
821
|
):
|
|
822
|
+
if scroll:
|
|
823
|
+
element.scroll_into_view()
|
|
814
824
|
try:
|
|
815
825
|
element.mouse_click() # Simulated click (NOT PyAutoGUI)
|
|
816
826
|
except Exception:
|
|
817
827
|
element.click() # Standard CDP click
|
|
818
828
|
else:
|
|
829
|
+
if scroll:
|
|
830
|
+
if "contains(" in selector:
|
|
831
|
+
element.scroll_into_view()
|
|
832
|
+
else:
|
|
833
|
+
try:
|
|
834
|
+
self.js_scroll_into_view(selector)
|
|
835
|
+
except Exception:
|
|
836
|
+
element.scroll_into_view()
|
|
819
837
|
element.click() # Standard CDP click
|
|
820
838
|
self.__slow_mode_pause_if_set()
|
|
821
839
|
self.loop.run_until_complete(self.page.wait(0.2))
|
|
@@ -3109,6 +3127,17 @@ class CDPMethods():
|
|
|
3109
3127
|
if first in second:
|
|
3110
3128
|
raise AssertionError("%s is in %s" % (first, second))
|
|
3111
3129
|
|
|
3130
|
+
def js_scroll_into_view(self, selector):
|
|
3131
|
+
css_selector = self.__convert_to_css_if_xpath(selector)
|
|
3132
|
+
css_selector = re.escape(css_selector) # Add "\\" to special chars
|
|
3133
|
+
css_selector = js_utils.escape_quotes_if_needed(css_selector)
|
|
3134
|
+
js_code = (
|
|
3135
|
+
"document.querySelector('%s')?.scrollIntoView();"
|
|
3136
|
+
% css_selector
|
|
3137
|
+
)
|
|
3138
|
+
with suppress(Exception):
|
|
3139
|
+
self.loop.run_until_complete(self.page.evaluate(js_code))
|
|
3140
|
+
|
|
3112
3141
|
def scroll_into_view(self, selector):
|
|
3113
3142
|
self.find_element(selector).scroll_into_view()
|
|
3114
3143
|
self.loop.run_until_complete(self.page.wait(0.1))
|
|
@@ -13,6 +13,7 @@ from seleniumbase import SB
|
|
|
13
13
|
with SB(uc=True, test=True) as sb:
|
|
14
14
|
url = "https://google.com/ncr"
|
|
15
15
|
sb.activate_cdp_mode(url)
|
|
16
|
+
sb.click_if_visible('button:contains("Accept all")')
|
|
16
17
|
sb.type('[name="q"]', "SeleniumBase GitHub page")
|
|
17
18
|
sb.click('[value="Google Search"]')
|
|
18
19
|
sb.sleep(2)
|
|
@@ -148,6 +149,7 @@ def SB(
|
|
|
148
149
|
with SB(uc=True, test=True) as sb:
|
|
149
150
|
url = "https://google.com/ncr"
|
|
150
151
|
sb.activate_cdp_mode(url)
|
|
152
|
+
sb.click_if_visible('button:contains("Accept all")')
|
|
151
153
|
sb.type('[name="q"]', "SeleniumBase GitHub page")
|
|
152
154
|
sb.click('[value="Google Search"]')
|
|
153
155
|
sb.sleep(2)
|
|
@@ -467,8 +467,8 @@ class Element:
|
|
|
467
467
|
raise Exception("Could not find position for %s " % self)
|
|
468
468
|
pos = Position(quads[0])
|
|
469
469
|
if abs:
|
|
470
|
-
scroll_y = (await self.tab.evaluate("window.scrollY"))
|
|
471
|
-
scroll_x = (await self.tab.evaluate("window.scrollX"))
|
|
470
|
+
scroll_y = (await self.tab.evaluate("window.scrollY"))
|
|
471
|
+
scroll_x = (await self.tab.evaluate("window.scrollX"))
|
|
472
472
|
abs_x = pos.left + scroll_x + (pos.width / 2)
|
|
473
473
|
abs_y = pos.top + scroll_y + (pos.height / 2)
|
|
474
474
|
pos.abs_x = abs_x
|
|
@@ -717,6 +717,31 @@ class Element:
|
|
|
717
717
|
)
|
|
718
718
|
)
|
|
719
719
|
|
|
720
|
+
async def is_in_viewport_async(self):
|
|
721
|
+
try:
|
|
722
|
+
layout = await self.tab.send(
|
|
723
|
+
cdp.page.get_layout_metrics()
|
|
724
|
+
)
|
|
725
|
+
viewport = layout[4]
|
|
726
|
+
v_left = viewport.page_x
|
|
727
|
+
v_top = viewport.page_y
|
|
728
|
+
v_right = v_left + viewport.client_width
|
|
729
|
+
v_bottom = v_top + viewport.client_height
|
|
730
|
+
box = await self.tab.send(
|
|
731
|
+
cdp.dom.get_box_model(backend_node_id=self.backend_node_id)
|
|
732
|
+
)
|
|
733
|
+
quad = box.content
|
|
734
|
+
e_left = min(quad[0], quad[2], quad[4], quad[6])
|
|
735
|
+
e_top = min(quad[1], quad[3], quad[5], quad[7])
|
|
736
|
+
e_right = max(quad[0], quad[2], quad[4], quad[6])
|
|
737
|
+
e_bottom = max(quad[1], quad[3], quad[5], quad[7])
|
|
738
|
+
return (
|
|
739
|
+
e_left >= v_left and e_right <= v_right
|
|
740
|
+
and e_top >= v_top and e_bottom <= v_bottom
|
|
741
|
+
)
|
|
742
|
+
except Exception:
|
|
743
|
+
return False
|
|
744
|
+
|
|
720
745
|
async def scroll_into_view_async(self):
|
|
721
746
|
"""Scrolls element into view."""
|
|
722
747
|
try:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: seleniumbase
|
|
3
|
-
Version: 4.47.
|
|
3
|
+
Version: 4.47.7
|
|
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
|
|
@@ -293,6 +293,7 @@ from seleniumbase import SB
|
|
|
293
293
|
with SB(uc=True, test=True) as sb:
|
|
294
294
|
url = "https://google.com/ncr"
|
|
295
295
|
sb.activate_cdp_mode(url)
|
|
296
|
+
sb.click_if_visible('button:contains("Accept all")')
|
|
296
297
|
sb.type('[name="q"]', "SeleniumBase GitHub page")
|
|
297
298
|
sb.click('[value="Google Search"]')
|
|
298
299
|
sb.sleep(4) # The "AI Overview" sometimes loads
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.47.6 → seleniumbase-4.47.7}/seleniumbase/drivers/chromium_drivers/__init__.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.47.6 → seleniumbase-4.47.7}/seleniumbase/undetected/cdp_driver/_contradict.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{seleniumbase-4.47.6 → seleniumbase-4.47.7}/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
|
{seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/utilities/selenium_grid/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/utilities/selenium_grid/grid_hub.py
RENAMED
|
File without changes
|
{seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/utilities/selenium_grid/grid_node.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat
RENAMED
|
File without changes
|
{seleniumbase-4.47.6 → seleniumbase-4.47.7}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh
RENAMED
|
File without changes
|
|
File without changes
|
{seleniumbase-4.47.6 → seleniumbase-4.47.7}/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
|
|
File without changes
|
|
File without changes
|