Atata 2.0.0 is Released

May 11, 2022 by Yevgeniy Shunevych

Atata 2.0.0 is released with upgrade to Selenium WebDriver 4 and other useful improvements.

Migrating to Atata v2

There was a lot of breaking changes made in Atata v2. Please check out information on all breaking changes and migration process in the Upgrade to Atata 2 guide, which was created specifically to help with upgrade.


Breaking Changes

  • minor #580 Change getting of content to skip whitespace text nodes using ContentSource values: FirstChildTextNode, LastChildTextNode and ChildTextNodesTrimmedAndSpaceJoined
  • major #581 Return "" instead of null as value of string-based field component
  • minor #582 Remove obsolete behavior attributes
  • minor #583 Remove obsolete types and members
  • minor #585 Remove Triggers property of UIComponent<TOwner>
  • major #589 Rename classes related to component scope finding
  • minor #590 Rename LogConsumerInfo to LogConsumerConfiguration
  • minor #594 Change type of DirectorySubject.Directories property to SubdirectoriesProvider
  • minor #595 Change type of DirectorySubject.Files property to DirectoryFilesProvider
  • major #599 Set target .NET framework to only .NET Standard 2.0
  • minor #600 Rename ExtendedStringFormatter to AtataTemplateStringFormatter
  • minor #601 Remove ApplyMetadata method from UIComponent
  • minor #602 Replace InitValueTermOptions method with GetValueTermOptions in Field<T, TOwner>
  • minor #603 Remove ValueTermOptions property from IDataProvider<out TData, out TOwner> and all classes implementing it
  • minor #604 Update TitleTermFormatter to not lowercase “from” and “with”
  • minor #605 Replace IPropertySettings with IHasOptionalProperties
  • minor #606 Change PropertyBag
  • minor #607 Add UIComponentMetadata parameter to CreateStrategy and BuildComponentName method of FindAttribute
  • minor #608 Remove Properties property from MulticastAttribute
  • minor #609 Replace RemoteWebDriverLoggingExtensions with IJavaScriptExecutorLoggingExtensions
  • major #610 Replace RemoteWebDriver usage with IWebDriver
  • major #611 Use Selenium.WebDriver package v4.1.1
  • major #613 Replace WithCapability method of DriverAtataContextBuilder<TBuilder, TService, TOptions> with AddAdditionalBrowserOption
  • major #614 Replace WithGlobalCapability method of driver AtataContextBuilder’s with AddAdditionalOption
  • major #616 Change default value of AtataContext.ModeOfCurrent property to AtataContextModeOfCurrent.AsyncLocal
  • major #617 Rename WaitAttribute to WaitSecondsAttribute
  • minor #619 Remove Component property from IDataProvider<out TData, out TOwner>
  • minor #620 Replace inheritance of IDataProvider<out TData, out TOwner> with IObjectProvider<out TObject, out TOwner>
  • minor #621 Make obsolete DataProvider<TData, TOwner> and IDataProvider<TData, TOwner>
  • minor #622 Inherit ControlList<TItem, TOwner> from IEnumerableProvider<TItem, TOwner> instead of IDataProvider<TData, TOwner>
  • minor #626 Rename DataVerificationProvider<TData, TOwner> to ObjectVerificationProvider<TObject, TOwner>
  • minor #627 Rename Value property of IObjectProvider<out TObject> to Object
  • minor #628 Rename IsValueDynamic property of IObjectProvider<out TObject, out TOwner> to IsDynamic
  • minor #629 Rename Value property of IObjectSource<out TObject> to Object
  • minor #630 Rename EnumerableProvider<TItem, TOwner> to EnumerableValueProvider<TItem, TOwner>
  • minor #633 Remove VerificationKind property from IVerificationProvider<out TOwner>
  • minor #634 Change return type of IVerificationProvider<out TOwner>.GetRetryOptions method
  • minor #635 Remove GetShouldText method from IVerificationProvider<out TOwner>
  • minor #636 Remove ReportFailure method from IVerificationProvider<out TOwner>
  • minor #639 Extract WithProperties method of AtataContextBuilder<TContext> to extension method
  • minor #640 Extract log consumer methods from AtataContextBuilder to new LogConsumersAtataContextBuilder
  • minor #641 Extract screenshot consumer methods from AtataContextBuilder to new ScreenshotConsumersAtataContextBuilder
  • major #645 Change date/time format of {build-start} folder in AtataContext.Artifacts directory path to yyyyMMddTHHmmss
  • major #647 Update FileScreenshotConsumer and NLogFileConsumer to use AtataContext.Artifacts as a default DirectoryPathBuilder
  • major #650 Change default control visibility from Visible to Any
  • major #657 Rename AtataContextInitEvent to AtataContextInitStartedEvent
  • major #660 Use Atata.WebDriverExtras package v2.0.0

New Features

  • minor #586 Add HasDriver property to AtataContext
  • minor #588 Add ToggleRandom method to RadioButtonList<T, TOwner>
  • minor #623 Add CreateValueProvider method to UIComponent<TOwner>
  • minor #624 Add DynamicObjectSource.Create method
  • minor #625 Add support of UIComponent script arguments to UIComponentScriptExecutor<TOwner>
  • minor #632 Add WithRetryInterval and WithRetryIntervalSeconds methods to VerificationProvider<TVerificationProvider, TOwner>
  • minor #643 New WaitForAlertBoxAttribute trigger
  • major #646 Add IDictionary<string, object> Variables property to AtataContext
  • major #651 Add DefaultControlVisibility property to AtataContext
  • minor #652 Add FindOnlyVisibleAttribute inherited from FindSettingsAttribute with preset Visibility = Visibility.Visible
  • minor #653 Add visibility set extension methods for FindAttribute
  • minor #658 Add AtataContextPreInitEvent

Changes and Enhancements

  • minor #596 Change default file name format of FileScreenshotConsumer
  • minor #597 Wrap UIComponent scope element getting in StaleSafely.Execute
  • minor #612 Add Microsoft.CSharp v4.7.0 package reference
  • minor #615 Extract ChromiumAtataContextBuilder<TBuilder, TService, TOptions> from ChromeAtataContextBuilder for reuse by EdgeAtataContextBuilder
  • minor #618 Update implementation of DragsAndDropsUsingActionsAttribute to use Actions.DragAndDrop
  • minor #631 Rename Within method of VerificationProvider<TVerificationProvider, TOwner> to WithinSeconds
  • minor #637 Change log level of “Clean up AtataContext” log section from Info to Trace
  • minor #638 EventBus should call subscriptions in the order they were subscribed
  • minor #642 Rename FolderPathBuilder property of NLogFileConsumer to DirectoryPathBuilder
  • minor #644 Rename FolderPathBuilder and FolderPath properties of FileScreenshotConsumer to DirectoryPathBuilder and DirectoryPath
  • minor #648 Make obsolete properties of LogEventInfo
  • minor #654 Rename PageObject<TOwner>.Wait(double seconds) method to WaitSeconds
  • minor #655 Move types from Atata.TermFormatting namespace to Atata
  • minor #656 Remove logging of event handler execution from EventBus


  • fix #649 Base class attribute doesn’t get to metadata when there is the same attribute in a base class

All Other Atata.* Releases

Check out release notes of other Atata.* packages.


AtataContext.Artifacts became a default root directory path for log files, screenshots and other files. Now you can configure in one place common Artifacts path for all test output files.

The default Artifacts path template is "{basedir}/artifacts/{build-start:yyyyMMddTHHmmss}{test-suite-name-sanitized:/*}{test-name-sanitized:/*}".

AtataContext Variables

The IDictionary<string, object> Variables property is added to AtataContext.

The list of predefined variables that are present in Variables:

  • build-start
  • build-start-utc
  • basedir
  • artifacts
  • test-name-sanitized
  • test-name
  • test-suite-name-sanitized
  • test-suite-name
  • test-start
  • test-start-utc
  • driver-alias

Custom variables can be added as well.

Methods were added to AtataContextBuilder:

public AtataContextBuilder AddVariable(string key, object value);

public AtataContextBuilder AddVariables(IDictionary<string, object> variables);

Atata.Configuration.Json v2 also supports variables:

  "variables": {
    "anyVariableName": "value" // Any custom variable. Value can be string, number or boolean.