diff --git a/examples/migration/protractor/input_test.py b/examples/migration/protractor/input_test.py index 14870a2efe7..141a2f38aa4 100644 --- a/examples/migration/protractor/input_test.py +++ b/examples/migration/protractor/input_test.py @@ -6,5 +6,5 @@ class AngularMaterialInputTests(BaseCase): def test_invalid_input(self): # Test that there's an error for an invalid input self.open("https://material.angular.io/components/input/examples") - self.type("#mat-input-1", "invalid") + self.type('input[type="email"]', "invalid") self.assert_element("mat-error") diff --git a/examples/migration/protractor/mat_paginator_test.py b/examples/migration/protractor/mat_paginator_test.py index ff2c081e19a..f6797b65629 100644 --- a/examples/migration/protractor/mat_paginator_test.py +++ b/examples/migration/protractor/mat_paginator_test.py @@ -5,9 +5,11 @@ class AngularMaterialPaginatorTests(BaseCase): def test_pagination(self): self.open("https://material.angular.io/components/paginator/examples") + self.click_if_visible("button.mat-mdc-button") + self.scroll_to("div.mat-mdc-paginator-page-size") # Set pagination to 5 items per page self.click("mat-select > div") - self.click("#mat-option-0") + self.click("mat-option:nth-of-type(1)") # Verify navigation to the next page self.click('button[aria-label="Next page"]') self.assert_exact_text( @@ -20,7 +22,7 @@ def test_pagination(self): ) # Set pagination to 10 items per page self.click("mat-select > div") - self.click("#mat-option-1") + self.click("mat-option:nth-of-type(2)") # Verify page with correct number of pages self.assert_exact_text( "1 – 10 of 50", ".mat-mdc-paginator-range-label" diff --git a/seleniumbase/__version__.py b/seleniumbase/__version__.py index 9958ccb6fb9..67183a28a98 100755 --- a/seleniumbase/__version__.py +++ b/seleniumbase/__version__.py @@ -1,2 +1,2 @@ # seleniumbase package -__version__ = "4.39.1" +__version__ = "4.39.2" diff --git a/seleniumbase/core/browser_launcher.py b/seleniumbase/core/browser_launcher.py index 963042aab12..b3d7f189309 100644 --- a/seleniumbase/core/browser_launcher.py +++ b/seleniumbase/core/browser_launcher.py @@ -2169,6 +2169,9 @@ def _set_chrome_options( prefs["profile.default_content_setting_values.automatic_downloads"] = 1 if locale_code: prefs["intl.accept_languages"] = locale_code + sb_config._cdp_locale = locale_code + else: + sb_config._cdp_locale = None if block_images: prefs["profile.managed_default_content_settings.images"] = 2 if disable_cookies: diff --git a/seleniumbase/core/sb_driver.py b/seleniumbase/core/sb_driver.py index 0ee4744c3b3..27b1cfa3ac4 100644 --- a/seleniumbase/core/sb_driver.py +++ b/seleniumbase/core/sb_driver.py @@ -1,5 +1,6 @@ """Add new methods to extend the driver""" from contextlib import suppress +from selenium.webdriver.remote.webdriver import WebDriver from selenium.webdriver.remote.webelement import WebElement from seleniumbase.config import settings from seleniumbase.fixtures import js_utils @@ -8,7 +9,7 @@ from seleniumbase.fixtures import shared_utils -class DriverMethods(): +class DriverMethods(WebDriver): def __init__(self, driver): self.driver = driver diff --git a/seleniumbase/plugins/driver_manager.py b/seleniumbase/plugins/driver_manager.py index 663f06d0204..2b3bcc5212e 100644 --- a/seleniumbase/plugins/driver_manager.py +++ b/seleniumbase/plugins/driver_manager.py @@ -38,6 +38,7 @@ """ import os import sys +from seleniumbase.core import sb_driver class DriverContext(): @@ -139,7 +140,7 @@ def Driver( pls=None, # Shortcut / Duplicate of "page_load_strategy". cft=None, # Use "Chrome for Testing" chs=None, # Use "Chrome-Headless-Shell" -): +) -> sb_driver.DriverMethods: """ * SeleniumBase Driver as a Python Context Manager or a returnable object. * diff --git a/seleniumbase/plugins/sb_manager.py b/seleniumbase/plugins/sb_manager.py index 45cd307e4cd..dc5ef38c854 100644 --- a/seleniumbase/plugins/sb_manager.py +++ b/seleniumbase/plugins/sb_manager.py @@ -24,6 +24,8 @@ ######################################### """ from contextlib import contextmanager, suppress +from typing import Any, Generator +from seleniumbase import BaseCase @contextmanager # Usage: -> ``with SB() as sb:`` @@ -133,7 +135,7 @@ def SB( highlights=None, # Number of highlight animations for Demo Mode actions. interval=None, # SECONDS (Autoplay interval for SB Slides & Tour steps.) time_limit=None, # SECONDS (Safely fail tests that exceed the time limit.) -): +) -> Generator[BaseCase, Any, None]: """ * SeleniumBase as a Python Context Manager * @@ -263,7 +265,6 @@ def SB( import sys import time import traceback - from seleniumbase import BaseCase from seleniumbase import config as sb_config from seleniumbase.config import settings from seleniumbase.fixtures import constants diff --git a/seleniumbase/undetected/cdp_driver/browser.py b/seleniumbase/undetected/cdp_driver/browser.py index 3d99d0222ff..0e54039db97 100644 --- a/seleniumbase/undetected/cdp_driver/browser.py +++ b/seleniumbase/undetected/cdp_driver/browser.py @@ -323,6 +323,8 @@ async def get( _cdp_locale = kwargs["locale"] elif "lang" in kwargs: _cdp_locale = kwargs["lang"] + elif "locale_code" in kwargs: + _cdp_locale = kwargs["locale_code"] if "platform" in kwargs: _cdp_platform = kwargs["platform"] elif "plat" in kwargs: @@ -336,6 +338,8 @@ async def get( if _cdp_timezone: await connection.send(cdp.page.navigate("about:blank")) await connection.set_timezone(_cdp_timezone) + if _cdp_locale: + await connection.set_locale(_cdp_locale) if _cdp_user_agent or _cdp_locale or _cdp_platform: await connection.send(cdp.page.navigate("about:blank")) await connection.set_user_agent( diff --git a/seleniumbase/undetected/cdp_driver/cdp_util.py b/seleniumbase/undetected/cdp_driver/cdp_util.py index 945f45871d3..3173a7ae5c1 100644 --- a/seleniumbase/undetected/cdp_driver/cdp_util.py +++ b/seleniumbase/undetected/cdp_driver/cdp_util.py @@ -370,8 +370,6 @@ async def start( sb_config._cdp_locale = kwargs["locale"] elif "locale_code" in kwargs: sb_config._cdp_locale = kwargs["locale_code"] - else: - sb_config._cdp_locale = None if tzone: sb_config._cdp_timezone = tzone elif "timezone" in kwargs: diff --git a/seleniumbase/undetected/cdp_driver/connection.py b/seleniumbase/undetected/cdp_driver/connection.py index ecb7f13b345..392b337d19a 100644 --- a/seleniumbase/undetected/cdp_driver/connection.py +++ b/seleniumbase/undetected/cdp_driver/connection.py @@ -347,6 +347,7 @@ async def wait(self, t: Union[int, float] = None): async def set_locale(self, locale: Optional[str] = None): """Sets the Language Locale code via set_user_agent_override.""" await self.set_user_agent(user_agent="", accept_language=locale) + await self.send(cdp.emulation.set_locale_override(locale)) async def set_timezone(self, timezone: Optional[str] = None): """Sets the Timezone via set_timezone_override."""