# Element Best Practices When using a `Element` class in your test automation framework, following best practices can significantly enhance the readability, maintainability, and effectiveness of your test code. Here are key best practices to consider when writing `Element` objects:
## 1. Use Element as attributes The primary use case for `Element` is as a class attribute of `Group` or `Page` classes. This allows you to organize and manage multiple UI elements within a container or page. ### Code example ```python from mops.base.page import Page from mops.base.element import Element class IndexPage(Page): def __init__(self): super().__init__() login_button = Element('button.login', name='login button') signup_button = Element('button.signup', name='signup button') ``` ---
## 2. Extend the Element In some cases, you might want to create a custom UI element that extends or change the functionality of `Element`. This is particularly useful when you need to add specific behaviors or properties. ### Code example ```python from mops.base.page import Page from mops.base.element import Element class IndexButton(Element): def __init__(self, locator: str, name: str = ''): name = name or locator super().__init__(f'button.{locator}', name=f'{name} button') def click(self): # noqa # Add custom behavior here super().click() # Using previous PO with IndexButton class IndexPage(Page): def __init__(self): super().__init__() login_button = IndexButton('login') signup_button = IndexButton('signup') ``` In this example, `IndexButton` inherits from `Element` and mutates the given `locator`/`name` args. This allows you to create buttons with different or extended functionality while still benefiting from the base `Element` functionality.