Atata stands with Ukraine


In solidarity, please consider financially support Ukraine (UNITED24, "Come Back Alive" fund) or check out other ways to support Ukraine.

Atata

C#/.NET web test automation full-featured framework

Atata Framework 4 Release

September 7, 2026

Atata Framework 4 introduces session-based WebDriver separation, hierarchical AtataContext, session pooling & sharing, new modules, and more - moving Atata toward a universal automation framework.

Atata 3.13.0 is Released

September 4, 2026

Atata 3.13.0 is released with an upgrade of Selenium.WebDriver to v4.48.0.

Atata 3.12.0 is Released

June 20, 2026

Atata 3.12.0 is released with a DOM mutation waiting functionality and an upgrade of Selenium.WebDriver to v4.45.0.

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 example for Sign In page.

Define Page Object Class

using Atata;

namespace SampleApp.UITests;

using _ = SignInPage;

[Url("signin")] // Relative URL of the page.
public class SignInPage : Page<_>
{
    [FindById] // Finds text input by "email" id.
    public TextInput<_> Email { get; private set; }

    [FindById] // Finds password input by "password" id.
    public PasswordInput<_> Password { get; private set; }

    [FindByContent] // Finds button by "Sign In" text content.
    public Button<_> SignIn { get; private set; }
}
Sign in page

Implement Test

[Test]
public void SignIn() =>
    Go.To<SignInPage>()
        .Email.Type("admin@mail.com")
        .Password.Type("abc123")
        .SignIn.Click();

[SetUp]
public void SetUp() =>
    AtataContext.Configure()
        .UseChrome()
        .UseBaseUrl("https://demo.atata.io/")
        .Build();

[TearDown]
public void TearDown() =>
    AtataContext.Current?.Dispose();
Sign in page with filled data
Get Started

Or check out Tutorials for guides and Examples for how to.