Mops Changelog¶
v3.5.0¶
Release date: 2026-04-22
Breaking Changes¶
Python 3.8 and 3.9 dropped — minimum supported version is now Python 3.10
Added¶
Ruff linter integrated: new CI workflow (
ruff.yml), pre-commit hook, and full config inpyproject.tomlPython 3.13 and 3.14 support
Changed¶
playwrightbumped>=1.58.0numpybumped to>=2.3.2opencv-pythonbumped to>=4.13.0scikit-imagebumped to>=0.26.0Pillowbumped to>=12.1.0greenlet>=3.3.2added as constraint-dependency
v3.4.3¶
Release date: 2026-04-21
Added¶
set_local_storage_item(items)/set_session_storage_item(items)— set one or more key/value pairs in localStorage / sessionStorageget_local_storage_item(key)/get_session_storage_item(key)— retrieve a single item by key (Noneif missing)get_local_storage_items()/get_session_storage_items()— retrieve all items as a dictremove_local_storage_item(key)/remove_session_storage_item(key)— remove a single item by keyclear_local_storage()/clear_session_storage()— clear all items from the respective storageMobileDriver.clear_cookiesoverride — on iOS real devices iterates and deletes each cookie individually viadelete_cookieinstead of a bulk clearstorage_set_item_js,storage_get_items_js,set_cookies_as_batch_jsJS helpers added tojs_scripts.py
Changed¶
CoreDriver.set_cookies— replaced per-cookiedriver.add_cookie()loop with a single batchedexecute_scriptcallPlayDriver.set_cookies— domain extracted viaurlparseinstead of manual string splitting; cookie defaults applied via list comprehensionPlayDriver.execute_script— unified script wrapping to(args) => (function() { … }).apply(null, args)for consistent argument passing across all call patterns
v3.4.2¶
Release date: 2026-03-28
Fixed¶
ShadowDriverWrappernow correctly receives static methods of its driver type — previously methods from the first session’s driver were inherited and not overriddenget_driver_instancecache key changed from driver instance to driver type — prevents cache misses on every new driver object
Changed¶
_set_staticguard stores the configured class instead ofTrue— allows re-configuration when driver type changes_set_staticuses_framework_attrssnapshot instead of full MRO scan — protects only original framework methods, not previously set driver-specific ones
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-27
Breaking Changes¶
Groupsubclasses:parentis now correctly set on sub-elements defined aftersuper().__init__()— previously such elements did not receiveparentargument
Added¶
Element.sub_elementsdict — collected once and reused instead of rescanning on every accessElementMetametaclass — triggers_modify_sub_elementsautomatically after__init__of the final classget_static_attributes/get_all_static_attributeswithlru_cache— replaces repeated attribute scanningget_driver_instancewithlru_cache— cachesisinstanceresults for driver type checks_driver_is_instancemethod onInternalMixin— single cached entry point for driver type detection
Changed¶
all_tagsconverted tofrozensetfor O(1) membership checksinitialize_objectsno longer recurses manually — delegates to_modify_sub_elementson each childset_parent_for_attrusessub_elementsdict instead of rescanning object attributesget_child_elements_with_names/safe_getattributeremoved, replaced byextract_named_objects/extract_all_named_objectslocator,locator_type,log_locatoronElementconverted to lazy properties — resolved on first access__copy__added toElementfor explicit shallow copy control__getattribute__override removed fromElement— initialization guard moved toCoreElement/PlayElement
Fixed¶
Error messages for unsupported driver type now include the actual driver class name and list expected types
v3.3.2¶
Release date: 2026-03-24
Added¶
Element.source_locatorattribute that preserves the original locator before platform-specific transformations
v3.3.1¶
Release date: 2026-01-05
Changed¶
safe_callexceptions list
v3.3.0¶
Release date: 2026-01-05
Added¶
DriverWrapper.wait:reasonargDriverWrapper.get_scroll_positionmethodElement.showmethodVisualComparison.always_hideattributeLocator.tapinstead ofLocator.clickfor playwright on mobile resolutionWebElementmethods retry logic onJavascriptException
Changed¶
Playwright’s
scroll_into_viewlogic moved to js (same as Selenium)NativeSafarilocators
Fixed¶
Parent element cache drop
Patch: v3.1.1, v3.2.1¶
Release date: 2025-07-18
Added¶
Appium related locator types in
LocatorTypeclass
Changed¶
Selenium only:
DriverWrapper.set_window_sizeinner viewport calculation skipped for mobile resolution
Removed¶
Automatic locator type detection for text based locators
Fixed¶
Visual comparison dummy element class name
Visual comparison error traceback
v3.2.0¶
Release date: 2025-03-31
Added¶
Continuous verification waits for
Element.wait_visibilityandElement.wait_hiddenContinuousWaitExceptionfor continuous verification errors in wait methodsCaret hiding for screenshots in Selenium / Appium
is_displayed/is_hiddenexecution results loggedRetry decorator for Selenium / Appium methods to handle
StaleElementReferenceException
Changed¶
Playwright’s
wait_visibility,wait_hidden, andwait_availabilitylogic moved to MOPS methods
Fixed¶
Small bug in the documentation example
Bug in the
assert_screenshotmethod with theremoveargument for certain popupsStaleElementReferenceExceptionhandler during wait/gathering ofElement.text
v3.1.0¶
Release date: 2025-01-29
Added¶
Kitchen Sink section on ReadTheDocs
Source code links for interfaces in ReadTheDocs < example >
PlayDriver.delete_cookiemethodPlayDriver.switch_to_framemethodPlayDriver.switch_to_default_contentmethodLocatorTypeconstants < more info >
Changed¶
Breaking: Minimum Playwright version is now 1.48.0
Breaking:
DriverWrapper.get_inner_window_sizenow returns aSizeobject instead of atupleBreaking:
DriverWrapper.set_window_sizenow sets the inner window size (affects Selenium only)Breaking:
Box.get_image_cut_boxnow accepts aSizeobject for thesizeargument and returns aBoxobjectPlayDriver.get_inner_window_sizenow retrievespage.viewport_sizeinstead of using a custom JavaScript scriptImproved error logging for
Element: Selector output has been adjustedElementrepresentation:locator_typeis now part oflocatorReduced exception inheritance in
VisualComparisonSelenium & Appium error logging
Improved most docstrings
Fixed¶
Element.wait_for_valuenow correctly handles an emptyexpected_valueargumentElement.wait_for_textnow correctly handles an emptyexpected_textargumentElement.valuenow returns an empty string instead ofNone
Removed¶
Breaking: Removed
Locator.loc_typeattribute/argument < how to provide locator type >Breaking: Removed
CutBoxdataclass < use Box instead >
Reworked¶
Unified selector synchronization methods across all frameworks
Improved automatic locator type detection
v3.0.0¶
Release date: 2025-01-13
Breaking: Project renamed¶
Changed¶
Dev: pyproject.toml integrated instead of setup.py
Dev: UV integrated
Removed¶
Dev: tox usage removed
v2.4.0¶
Release date: 2025-01-10
Added¶
DriverWrapper.is_safarimethodDriverWrapper.is_firefoxmethodDriverWrapper.is_chromemethodInvalidLocatorExceptionfor locator validationVisualComparisonnow removes actual and diff files upon successful assertionsInternal CI pipelines with tests
Removed¶
DriverWrapper.switch_to_parent_framemethoddyatel/dyatel_play/helpers/trace.pymodule
Changed¶
DriverWrapper.get_inner_window_sizenow returns aSizeobject instead of a dictionaryElement.clicknow uses a JavaScript click for the Safari driverElement.click_outsidenow has default argumentsx=-5, y=-5across all platformsVisualComparisondummy elements’style.positionchanged from"fixed"to"absolute"VisualComparisondummy elements’style.top/leftnow account for page scrollVisualComparisonnow includes asleep(0.1)delay iffill_backgroundorremoveactions are specified after an actionThe Safari browser on Appium and Selenium uses the
innerTextDOM property instead of the driver’stextAPI to improve compatibility with other platformsThe Safari browser on Selenium uses JavaScript-based
clickinstead of the driver’sclickAPI to enhance compatibility with other platformsDocumentation for most methods has been improved
Fixed¶
DriverWrapper.save_screenshotno longer throws an error when called without the optionalscreenshot_baseargumentElement.save_screenshotno longer throws an error when called without the optionalscreenshot_baseargumentVisualComparison.assert_screenshotwith the argumentthreshold=0now respects the provided value instead of defaultingVisualComparisonundersoft_generate_referenceno longer takes two images (actual → assertion → reference)
v2.3.3¶
Release date: 2025-01-09
Added¶
dyatel.mixins/objects.driver.Driverobject
Changed¶
Breaking:
DriverWrapperinitialization now requires aDriverobjectBreaking: Playwright’s
contextandpagecreation have been moved out ofdyatel-wrapper
Note: Examples of the new logic can be found in the ReadTheDocs documentation
v2.3.2¶
Release date: 2024-12-19
Changed¶
Supported Python-Appium-Client version changed from
2.11.1to3.1.0Supported appium version changed from
2.2.1to2.12.1Supported xcuitest version changed from
5.0.0to7.28.3Supported uiautomator2 version changed from
2.34.1to3.9.0
v2.3.1¶
Release date: 2024-12-16
Fixed¶
Memory leak due to misuse of lru_cache
v2.3.0¶
Release date: 2024-09-12
Added¶
LocatorobjectCutBoxobjecttabletlocator supportScrollTo&ScrollTypesconstantsVisualComparison.assert_screenshotnow supports the use of theCutBoxobjectElement.execute_scriptmethod, which automatically sets itself to script argumentsSelenium only: 0.1 seconds delay between requests for all waiting methods
Playwright only: 0.1 seconds delay between requests for a few waiting methods
Appium only: exponential delay starting at 0.1 seconds between requests for all waiting methods
Changed¶
Breaking:
locator_type,mobile,ios,android, anddesktopkwargs removedBreaking: Most
Elementmethods have been renamedBreaking:
DriverWrapper.execute_scriptnow uses theElementobject instead of the source element objectBreaking:
MobileDriver.get_top_bar_heightmethod renamed to thetop_bar_heightpropertyBreaking:
MobileDriver.get_bottom_bar_heightmethod renamed to thebottom_bar_heightpropertyElement.scroll_into_viewmethod now usesScrollTo&ScrollTypesconstantsDefault timeout for
Element.wait_hidden_without_errorreduced to 2.5 seconds since it’s a negative waitDefault timeout for
Element.wait_visibility_without_errorreduced to 2.5 seconds since it’s a negative waitSelenium & Appium only:
Element.clicknow retries onElementNotInteractableException,ElementClickInterceptedException,StaleElementReferenceExceptionexceptionsAutomatically generated
nameargument, based on the attribute name, has been removed
Fixed¶
Playwright: Appending of dummy elements inside
Element.assert_screenshotPlaywright:
DriverWrapper.execute_scripterror when multiple elements are available
Reworked¶
Mobile
top_bar_heightandbottom_bar_heightnow useNativeContext&NativeSafariobjectsMost
Elementwaitmethods are now resolved with thewait_conditiondecorator
v2.2.15¶
Release date: 2024-08-13
Added¶
Python 3.11 and 3.12 support
v2.2.14¶
Release date: 2024-07-24
Added¶
assert_screenshot: possibility to hide objects before taking screenshot
assert_screenshot: the diff image save on a different sized screenshots (reference/output)
assert_screenshot: allure attachments increased for some cases
assert_screenshot: auto label
mobilefor mobile resolution screenshots
Fixed¶
assert_screenshot: bug with default.png for screenshots with given names fixed
v2.2.12 & v2.2.13¶
Release date: 2024-06-08
Added¶
iPad support
v2.2.11¶
Release date: 2024-05-29
Changed¶
Minimum playwright version is 1.41.0
v2.2.1¶
Release date: 2024-04-16
Added¶
DriverWrapper.is_tabletDriverWrapper.is_appiumDriverWrapper.is_ios_tabletDriverWrapper.is_ios_mobileDriverWrapper.is_android_tabletDriverWrapper.is_android_mobile
Fixed¶
Element.is_fully_visiblecalculationElement.is_visiblecalculation
v2.2.0¶
Release date: 2024-03-04
Added¶
Element.sizemethodElement.locationmethodElement.wait_element_sizemethodDriverWrapper.assert_screenshotmethodDriverWrapper.soft_assert_screenshotmethodDriverWrapper.waitmethodDriverWrapper/Element.screenshot_imagemethod
Changed¶
DriverWrapper/Element.screenshot_basemethod now return image binaryDriverWrapper/Element.save_screenshotmethod now saves screenshot and moved to base classiOS only:
DriverWrapper.screenshot_basereturns image binary without native controlsiOS only:
Element.screenshot_basescreenshot size for some elements could be changed
Fixed¶
Type annotations
Element.is_visible/is_fully_visiblecalculationiOS only:
Element.get_bottom_bar_heightcalculation
v2.1.9¶
Release date: 2024-02-22
Added¶
Playwright
context.tracingsupport
v2.1.8¶
Release date: 2024-01-04
Added¶
Playwright
new_contextargs supports
v2.1.7¶
Release date: 2023-12-05
Added¶
VisualComparison: Dynamic threshold calculation
v2.1.6¶
Release date: 2023-11-26
Fixed¶
Performance fixes for session with 2 or more browser windows
v2.1.5¶
Release date: 2023-10-17
Fixed¶
Typo fix inside
MobileDriver
v2.1.4¶
Release date: 2023-10-16
Fixed¶
Internal usage of Element class inside DriverWrapper
Changed¶
AssertionError output of visual comparison
Added¶
Soft visual reference generation
Soft assert screenshot
LogLevelclass
v2.1.3¶
Release date: 2023-09-10
Changed¶
Selenium/Appium only: Additional logging for element enabled
Selenium/Appium element gathering and exceptions reworked
v2.1.2¶
Release date: 2023-09-07
Fixed¶
Additional logging for element disabled
v2.1.1¶
Release date: 2023-09-07
Fixed¶
setup.pypackages
v2.1.0¶
Release date: 2023-09-07
Added¶
Abstract classes and methods
DriverWrapperSessionsclassDriverWrapper.browser_nameattributeInheritance validation
Element.scroll_into_view‘block’ argument validationSelenium/Appium only: additional warning for
elementerrors
Fixed¶
Type annotations for some methods
Changed¶
Page.anchorproperty now instance attributeSome methods moved to subclasses
Internal
LoggingreworkedDriverWrapperfrom previous object reworked
v2.0.0¶
Release date: 2023-04-06
Added¶
element.wait_enabledmethodelement.wait_disabledmethodelement.is_enabledmethodVisualComparison.default_delaypropertyVisualComparison.default_thresholdpropertyDriverWrapper.switch_to_alertmethod (Selenium Only)DriverWrapper.accept_alertmethod (Selenium Only)DriverWrapper.dismiss_alertmethod (Selenium Only)MobileDriver.click_in_alertmethod (Appium Only)
Fixed¶
MRO for Mobile + Desktop session
Rapidly requests for current context on mobile
element.all_elementsrecursionlogging stderr to stdout
Changed¶
Checkbox class removed (all methods in Element class)
New screenshot comparison engine. By: @laruss
Elements initialization
element.wait_clickablerenamed toelement.wait_enabled__repr__for Element/Group/PageDriver with index will be added to logs always
v1.3.4¶
Release date: 2023-01-17
Fixed¶
Error logs fixes
v1.3.3¶
Release date: 2023-01-12
Changed¶
element.assert_screenshotelements removal rework
v1.3.2¶
Release date: 2022-12-08
Added¶
mobile
element.hide_keyboardmethod addedfill_backgroundarg inelement.assert_screenshot
Changed¶
ios safaridriver support removed
reruns disabling for visual tests without references
Fixed¶
Pillow warning fixes
other fixes and improvements
v1.3.1¶
Release date: 2022-12-02
Added¶
element.wait_element_hidden_without_errormethodelement.assert_screenshothard reference generation supportelement.assert_screenshotsoft reference generation fixelement.hoversilent argument
Changed¶
Reworked wait argument for
element: False - wait element hidden; True - wait element visiblepage.is_page_openedwithout url supportselenium - tags (locator type) updated
Fixed¶
DifferentDriverWrapper and elements initialization fixes
v1.3.0¶
Release date: 2022-10-18
Added¶
driver_wrapper.get_inner_window_sizemethoddriver_wrapper.switch_to_framemethod for selenium based driverdriver_wrapper.switch_to_parent_framemethod for selenium based driverdriver_wrapper.switch_to_default_contentmethod for selenium based driverdriver_wrapper.delete_cookiemethod for selenium/appium based driverelement.is_visiblemethodelement.is_fully_visiblemethodelement.__repr__,checkbox.__repr__,group.__repr__,page.__repr__scroll_into_viewbeforeelement.click_into_center/hover/etc.if element isn’t visiblename_suffixarg forelement.assert_screenshotAuto implemented
driverin hidden object (function/property etc.) forelement/checkbox/group/pageAuto implemented
parentin hidden object (function/property etc.) forelement/checkboxPlatform specific locator by object kwargs: ios/android/mobile/desktop
Changed¶
element.get_rectfor selenium desktopAll visual comparisons staff moved to
VisualComparisonclassLogging
Fixed¶
get_object_kwargsfunctioninitialize_objects_with_argsfunctionelement.assert_screenshotdriver name for remoteClick by location after scroll
v1.2.8¶
Release date: 2022-09-20
Added¶
driver_wrapper.is_native_contextproperty on mobiledriver_wrapper.is_web_contextproperty on mobiledriver_wrapper.visual_reference_generationthat disable AssertionError exception inelement.assert_screenshotElementNotInteractableExceptionhandler inelement.click
Changed¶
element.get_rectoutput value sortingPlayDriver/CoreDriverclass variables moved toDriverWrapperos.environ['visual']changed todriver_wrapper.visual_regression_pathelement.wait_elementexception messageMobile: Finding elements in native context now skips parent
Fixed¶
autologparamsdriver_wrapper.switch_to_tabwith default params
v1.2.6/7¶
Release date: 2022-09-15
Fixed¶
screenshot name generation
v1.2.5¶
Release date: 2022-09-13
Added¶
element.click_into_centermethoddriver_wrapper.click_by_coordinatesmethod
Fixed¶
calculate_coordinate_to_clickcalculationShared object of groups become unique for each class
v1.2.4¶
Release date: 2022-09-08
Added¶
assert_screenshot()elements removal
v1.2.3¶
Release date: 2022-09-02
Fixed¶
element.is_displayed()exception handler
v1.2.1/2¶
Release date: 2022-08-31
Fixed¶
Annotations
v1.2.0¶
Release date: 2022-08-31
Added¶
Allure Screen Diff Plugin support
Driver specific logs
Custom exceptions
Screenshot name generation in
assert_screenshotKeyboardKeysclasselement.send_keyboard_actionmethod
Changed¶
get_textproperty becometextget_valueproperty becomevalueget_screenshot_baseproperty becomescreenshot_baseget_inner_textproperty becomeinner_textby_attrarg ofCheckboxremovedcalculate_coordinate_to_clicknow calculate coordinates from element location
Fixed¶
Reduced count of
find_elementexecutionPage
driver_wrappergetter exception
v1.1.1¶
Release date: 2022-08-10
Added¶
iOS SafariDriver basic support
Different second driver support (for mobile/desktop safari)
Tabs manipulating methods for desktop in
CoreDriver/PlayDriverContext manipulating methods for mobile in
MobileDriverpytest-rerunfailures support
Type annotations for most of code
Auto
locator_typesupport forcom.androidlocatorelement.hoversupport on mobileselement.hover_outsidemethod, that moves pointer outside from current positionpage.swipe(_up/_down)methods for mobileDefault cookie path/domain in
driver_wrapper.set_cookiemethod
Changed¶
DriverbecomesDriverWrapperfor more readabilityMixins classes renamed and moved to
dyatel.mixinsfolderSelenium
core_element.wait_elementnow usingis_displayedSelenium exception stacktrace reduced in most cases
Fixed¶
Custom
driver_wrapper/driverfor child elementsSelenium
KeyErrorofdriver_wrapper.set_cookiewithoutdomainDriver creation with function scope of pytest
v1.1.0¶
Release date: 2022-07-23
Added¶
Checkboxclass for Playwright and Seleniumset_textmethod inElementclasswait_elements_countmethod inElementclasswait_element_textmethod inElementclasswait_element_valuemethod inElementclassdriver_wrapperarg forGroupandPage
Changed¶
Page/Group
set_driverworkflowCorePageandPlayPagemethods moved toPage
v1.0.5¶
Release date: 2022-07-10
Added¶
_first_elementproperty inPlayElement
Changed¶
elementproperty replaced with_first_elementfor elements interactionsparentnesting ofElementchanged from one level to endlessPlayElement/CoreElementinitialization
Fixed¶
all_elementsexecution time/nesting
v1.0.4¶
Release date: 2022-07-07
Added¶
set_driverfunction for page objectMultiple drivers support
Changed¶
Drivers initialization
driver,driver_wrapperbecome property methods