Atata Framework is a full-featured C#/.NET test automation framework built around a powerful context-driven architecture and session-based execution model. It provides an intuitive, fluent page object pattern for web UI testing, which remains its core capability, while Atata 4 expands beyond web UI automation into a universal, extensible testing ecosystem. Designed to minimize boilerplate, Atata enables clean, declarative test components using properties, attributes, and reusable building blocks. With customizable built-in logging, a unique event-driven trigger system, and a rich ecosystem of ready-to-use components, Atata provides a consistent foundation for building maintainable and scalable automated tests across different testing domains.
The package targets .NET 8.0 and .NET Framework 4.6.2.
- WebDriver. Provides Selenium WebDriver session functionality. Preserves all WebDriver capabilities for local, remote, and headless browser automation.
- Page object model. Provides a unique fluent page object pattern for concise, maintainable page and component definitions.
- Components. Includes a rich set of ready-to-use UI testing components for inputs, tables, lists, etc.
- Smart verification. Offers fluent assertions, aggregate checks, wait-aware verification, and built-in verification triggers.
- Triggers. Includes a set of triggers to bind with different events to extend component behavior.
- Configuration. Enables flexible settings, variables, URL templates, environment-aware run options, etc.
- Logging and reporting. Built-in customizable structured logging, screenshots, page snapshots, artifact generation, and extensible log consumer support.
- Extensible ecosystem. Features a bunch of add-ons such as Atata.HtmlValidation, Atata.NLog, Atata.AspNetCore, Atata.Testcontainers.
- Integration. Easily integrates with NUnit, xUnit, MSTest, Reqnroll via dedicated packages. Works flawlessly on CI systems like GitHub Actions, Jenkins, etc.
Simple sign-in page object for https://demo.atata.io/signin page:
using Atata;
namespace SampleApp.UITests;
using _ = SignInPage;
[Url("/signin")] // Relative URL of the page.
public class SignInPage : Page<_>
{
[FindByLabel] // Finds <label> element containing "Email" (<label for="email">Email</label>), then finds text <input> element by "id" that equals label's "for" attribute value.
public TextInput<_> Email { get; private set; }
[FindById("password")] // Finds password <input> element by id that equals "password" (<input id="password" type="password">).
public PasswordInput<_> Password { get; private set; }
[FindByValue(TermCase.Title)] // Finds button element by value that equals "Sign In" (<input value="Sign In" type="submit">).
public Button<_> SignIn { get; private set; }
}Usage in the test method:
[Test]
public void SignIn()
{
Go.To<SignInPage>()
.Email.Set("[email protected]")
.Password.Set("abc123")
.SignIn.Click();
}Find out more on Atata usage. Check atata-framework/atata-samples repository for different Atata test scenario samples.
Demo atata-framework/atata-sample-app-tests UI tests application demonstrates different testing approaches and features of Atata Framework. It covers main Atata features: page navigation, data input and verification, interaction with pop-ups and tables, logging, screenshot capture, etc.
Sample test:
[Test]
public void Create() =>
Login()
.New()
.ModalTitle.Should.Be("New User")
.General.FirstName.SetRandom(out string firstName)
.General.LastName.SetRandom(out string lastName)
.General.Email.SetRandom(out string email)
.General.Office.SetRandom(out Office office)
.General.Gender.SetRandom(out Gender gender)
.Save()
.GetUserRow(email).View()
.AggregateAssert(x => x
.Header.Should.Be($"{firstName} {lastName}")
.Email.Should.Be(email)
.Office.Should.Be(office)
.Gender.Should.Be(gender)
.Birthday.Should.Not.BeVisible()
.Notes.Should.Not.BeVisible());Find out more on Atata Docs and on Getting Started page in particular.
You may also find the following tutorials helpful:
- Basic web UI test project
How to create a basic web UI test project with a workflow test using Atata Framework - Verification of page
How to verify a web page data using different approaches of Atata Framework. - Verification of validation messages
How to verify validation messages on web pages using Atata Framework. - Handle confirmation popups
How to handle different confirmation popups using Atata Framework. - Complex configuration
How to configure multi-environment tests application using environment variables, .json and .runsettings files. - Multi-browser configuration via .runsettings files
How to configure multi-browser tests application using .runsettings files. - Reporting to ExtentReports
How to configure Atata reporting to ExtentReports.
- Slack: https://atata-framework.slack.com
- X: https://x.com/AtataFramework
- Stack Overflow: https://stackoverflow.com/questions/tagged/atata
Any feedback, issues and feature requests are welcome.
If you faced an issue please report it to Atata Issues, ask a question on Stack Overflow using atata tag or use another Atata Contact way.
Contact me, Yevhenii Shunevych, if you need help with test automation using the Atata Framework. You can hire me for test automation development or consulting if you are looking for a high-quality, maintainable automation solution for your project.
- LinkedIn: https://www.linkedin.com/in/yevgeniy-shunevych
- Email: [email protected]
- Consulting: https://atata.io/consulting/
Many thanks to the sponsors that regularly support the development of Atata Framework through donations:
If Atata Framework is useful to you or your company, consider supporting the framework development with a donation.
Check out Contributing Guidelines for details.
Atata Framework tries to follow Semantic Versioning 2.0 when possible. Sometimes Selenium.WebDriver dependency package can contain breaking changes in minor version releases, so those changes can break Atata as well. But Atata manages its sources according to SemVer. Thus backward compatibility is mostly followed and updates within the same major version (e.g. from 2.1 to 2.2) should not require code changes.
Atata is an open source software, licensed under the Apache License 2.0. See LICENSE for details.