From 359a458f793f55dc758dcda58a8fa436bff4a0b5 Mon Sep 17 00:00:00 2001 From: Vladimir Podolyan Date: Fri, 27 Mar 2026 17:15:27 +0100 Subject: [PATCH 1/2] Version 3.4.1 --- CHANGELOG.md | 6 ++++ mops/__init__.py | 2 +- mops/base/element.py | 6 ++-- .../test_locator_without_driver.py | 33 +++++++++++++++++++ 4 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 tests/static_tests/integration/test_locator_without_driver.py diff --git a/CHANGELOG.md b/CHANGELOG.md index cc705b5..9c9c611 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@
+## v3.4.1 +*Release date: 2026-03-26* + +### Fixed +- Element.locator/locator_type/log_locator access without initialised driver + ## v3.4.0 (Performance improvement) *Release date: 2026-03-26* 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 From 660adfd0473d0330ec2b0ec3cee64012325372f2 Mon Sep 17 00:00:00 2001 From: Vladimir Podolyan Date: Fri, 27 Mar 2026 18:44:03 +0100 Subject: [PATCH 2/2] Dates updated --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c9c611..e834a93 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,13 +3,13 @@
## v3.4.1 -*Release date: 2026-03-26* +*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__()` —