diff --git a/CHANGELOG.md b/CHANGELOG.md index cc705b5..e834a93 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,8 +2,14 @@
+## v3.4.1 +*Release date: 2026-03-27* + +### Fixed +- Element.locator/locator_type/log_locator access without initialised driver + ## v3.4.0 (Performance improvement) -*Release date: 2026-03-26* +*Release date: 2026-03-27* ### Breaking Changes - **`Group` subclasses**: `parent` is now correctly set on sub-elements defined after `super().__init__()` — diff --git a/mops/__init__.py b/mops/__init__.py index bf3c0c1..b1460d5 100644 --- a/mops/__init__.py +++ b/mops/__init__.py @@ -1,2 +1,2 @@ -__version__ = '3.4.0' +__version__ = '3.4.1' __project_name__ = 'mops' diff --git a/mops/base/element.py b/mops/base/element.py index 9ddd080..bb785e8 100644 --- a/mops/base/element.py +++ b/mops/base/element.py @@ -169,7 +169,7 @@ def __init_base_class__(self) -> None: @property def locator(self) -> str: - if not self._is_locator_configured: + if self.driver_wrapper and not self._is_locator_configured: self._set_locator() return self._locator @@ -181,7 +181,7 @@ def locator(self, value: Union[Locator, str]) -> None: @property def locator_type(self) -> str: - if not self._is_locator_configured: + if self.driver_wrapper and not self._is_locator_configured: self._set_locator() return self._locator_type @@ -192,7 +192,7 @@ def locator_type(self, value: str) -> None: @property def log_locator(self) -> str: - if not self._is_locator_configured: + if self.driver_wrapper and not self._is_locator_configured: self._set_locator() return self._log_locator diff --git a/tests/static_tests/integration/test_locator_without_driver.py b/tests/static_tests/integration/test_locator_without_driver.py new file mode 100644 index 0000000..c7f7fc8 --- /dev/null +++ b/tests/static_tests/integration/test_locator_without_driver.py @@ -0,0 +1,33 @@ +import pytest + +from mops.base.element import Element +from mops.base.group import Group +from mops.base.page import Page +from mops.exceptions import DriverWrapperException + +group = Group('some_group', name='test group') +element = Element('some_locator', name='test element') + + +@pytest.mark.parametrize('obj', [element, group], ids=['element', 'group']) +def test_locator_access_without_driver(obj): + assert obj.locator + + +@pytest.mark.parametrize('obj', [element, group], ids=['element', 'group']) +def test_locator_type_access_without_driver(obj): + assert obj.locator_type is None + + +@pytest.mark.parametrize('obj', [element, group], ids=['element', 'group']) +def test_log_locator_access_without_driver(obj): + assert obj.log_locator + + +def test_page_init_without_driver(): + try: + Page('some_page', name='test page') + except DriverWrapperException as exc: + msg = ('Cannot initialize Page: unsupported driver type "NoneType". ' + 'Expected Playwright, Appium or Selenium driver instance') + assert msg == exc.msg