Why Your Development Team Should Use data-testid Attributes

Automation Test
4 min readMar 1, 2023

As web applications become more complex, it becomes increasingly important to ensure that the code is reliable and maintainable. One way to achieve this is by using data-testid attributes to identify elements on web pages for testing purposes. In this blog post, we will discuss the advantages of using data-testid attributes in the development process, along with some examples of how they can be used.

What are data-testid attributes?

data-testid attributes are custom attributes that can be added to HTML elements to identify them for testing purposes. They are not part of the HTML specification, but they are commonly used in testing frameworks and tools to locate and interact with elements on web pages.

data-testid attributes can be added to any HTML element, such as <div>, <span>, <input>, and so on. The attribute value can be any string that is meaningful to the developer or tester, such as "login-button", "dropdown-menu", or "product-description". The goal is to provide a consistent and reliable way to identify elements for testing.

Advantages of using data-testid attributes

There are several advantages to using data-testid attributes in the development process:

1. Improved test reliability

One of the main advantages of using data-testid attributes is that they can help improve the reliability of automated tests. Tests that rely on CSS selectors or XPath expressions can be brittle and prone to breaking when the markup changes. By using data-testid attributes to identify elements, tests can be more robust and less likely to break.

For example, consider the following CSS selector: button.primary-button

This selector targets a button with a class of "primary-button". However, if the class name changes, the selector will no longer work. By using a data-testid attribute instead, we can create a more reliable selector: button[data-testid="login-button"

This selector targets a button with a data-testid attribute of "login-button". This selector is less likely to break when the markup changes, as long as the data-testid attribute remains the same.

2. Easier to locate elements

data-testid attributes provide a clear and consistent way to identify elements on a web page, which makes it easier for developers and testers to locate and interact with those elements. By using a naming convention that is meaningful and consistent, developers can quickly locate the elements they need for testing or debugging.

For example, consider a login form that contains an email input field and a password input field. By using data-testid attributes to identify these fields, we can make it easier for testers to locate them:

<input type=”email” data-testid=”login-email-input”>
<input type=”password” data-testid=”login-password-input”>

Now, testers can easily reference these fields in their tests by using the data-testid attributes.

3. Separation of concerns

By using data-testid attributes to identify elements for testing purposes, developers can separate the concerns of markup and testing. This separation can make it easier to maintain and update the code over time, as changes to the markup won't necessarily impact the tests.

For example, consider a button that triggers a modal window. Instead of relying on the class name of the button to identify it for testing purposes, we can use a data-testid attribute:

<button data-testid=”open-modal-button”>Open Modal</button>

Now, if the class name of the button changes, the test won’t break, as long as the data-testid attribute remains the same.

4. Clearer documentation

data-testid attributes can serve as a form of documentation for developers and testers. By using meaningful and consistent naming conventions for data-testid attributes, developers can quickly understand the purpose of each element and its intended behavior. This can make it easier for new developers to onboard and contribute to the codebase.

For example, consider a product listing page that displays a thumbnail image, product name, and price for each item. By using data-testid attributes to identify these elements, we can document their intended purpose:

<div class=”product”>
<img src=”product-thumbnail.jpg” data-testid=”product-thumbnail”>
<h2 data-testid=”product-name”>Product Name</h2>
<span data-testid=”product-price”>$19.99</span>
</div>

Now, developers can quickly understand the purpose of each element and its intended behavior, which can make it easier to maintain and update the code over time.

Conclusion

In summary, using data-testid attributes in the development process can provide several advantages, such as improved test reliability, easier element location, separation of concerns, and clearer documentation. By using consistent and meaningful naming conventions, developers can create more reliable and maintainable code.

Examples

--

--