Atata 1.0.0 is Released

October 15, 2018 by Yevgeniy Shunevych


Atata 1.0.0 is released with new features, enhancements and fixes. Check the changelog.

Changelog

Breaking Changes

  • break #193 Change behavior of FindSettingsAttribute and TermFindSettingsAttribute
  • break #206 Fix typo in ComponentDefinitonAttribute property name of UIComponentMetadata
  • break #213 Remove PhantomJSDriver usage
  • break #218 Remove WithCapabilities method of RemoteDriverAtataContextBuilder
  • break #221 Remove obsolete types and members inclusive prior v0.15.0

New Features

  • minor #185 Add Image<TOwner> control
  • minor #189 Add RightClickParentAttribute trigger
  • minor #194 Add overloaded Get and GetAll methods to UIComponentMetadata without required parameters
  • major #195 Add AttributeSettingsAttribute
  • minor #196 Add AttributeFilter<TAttribute> class
  • minor #197 Add overloaded Get and GetAll methods to UIComponentMetadata that use AttributeFilter<TAttribute>
  • minor #210 Add Do(Action action) method to PageObject<TOwner>
  • major #212 Add IsPresent property to UIComponent<TOwner>
  • minor #219 Add overloaded WithOptions methods to RemoteDriverAtataContextBuilder
  • minor #220 Add overloaded WithOptions method to DriverAtataContextBuilder<TBuilder, TService, TOptions>
  • major #224 Create Report<TOwner> class and add Report property to PageObject<TOwner>

Changes and Enhancements

  • major #192 Add IsTargetSpecified and TargetAnyType properties to MulticastAttribute
  • minor #198 Add AttributeSettingsAttribute filtering by TargetAttributeTypes to UIComponentMetadata
  • minor #199 Mark as obsolete old Get and GetAll methods of UIComponentMetadata
  • major #200 Make some members of UIComponent and UIComponent<TOwner> public
  • major #203 Add Push methods to UIComponentMetadata
  • minor #204 Update UIComponentResolver.CreateControlForProperty method to push attributes into metadata
  • major #205 Inherit ScopeDefinitionAttribute from MulticastAttribute
  • major #207 Dynamic resolving of UIComponentMetadata.ComponentDefinitionAttribute
  • minor #208 Enhance SequalComponentScopeLocateResult to support multiple scope sources
  • minor #209 Change types of UIComponentResolver dictionaries to ConcurrentDictionary<TKey, TValue>
  • major #214 Use Selenium.WebDriver package v3.14.0
  • major #215 Use Atata.WebDriverExtras package v1.1.0
  • major #217 Improve FileInput<TOwner> to handle hidden input
  • minor #222 Mark as obsolete Get method of DataProvider<TData, TOwner>

Fixes

  • fix #191 Incorrect applying of MulticastAttribute defined at component level
  • fix #201 Incorrect handling of null value by some setters of properties of MulticastAttribute
  • fix #202 FindByColumnHeaderStrategy fails for table inside another table
  • fix #211 NoSuchElementException is thrown when access UIComponent.IsVisible property of hidden/missing element
  • fix #216 Navigation using relative URL fails on Linux

Changed Behavior of FindSettingsAttribute and TermFindSettingsAttribute

The basic idea is to force all attributes to work in the same manner (MulticastAttribute with targets). FindSettingsAttribute and TermFindSettingsAttribute had specific behavior before and were updated to work using new common approaches:

  • FindSettingsAttribute is inherited from AttributeSettingsAttribute.
  • From now FindSettingsAttribute and TermFindSettingsAttribute defined at class level without any target will apply to class where it defined, not children. To apply it to all children you can set TargetAnyType property to true: [FindSettings(TargetAnyType = true)].
  • Marked as obsolete non-default constructors of FindSettingsAttribute and TermFindSettingsAttribute. From now on use default constructor instead and set target attribute via TargetAttributeType property, e.g.: [FindSettings(TargetAttributeType = typeof(FindByNameAttribute))].
  • Marked as obsolete FindAttributeType property of FindSettingsAttribute. It should also return TargetAttributeType property value.
  • FindAttribute should find FindSettingsAttribute at any attribute level. Formerly component level was excluded.
  • TermFindAttribute should find TermFindSettingsAttribute at any attribute level. Formerly component level was excluded.
  • Removed restricted AttributeUsage from TermFindSettingsAttribute.

PhantomJSDriver Removed

Removed usage of PhantomJSDriver as it was removed in Selenium.WebDriver v3.14.0.

New Report Property of PageObject<TOwner>

  1. Created Report<TOwner> class that wraps ILogManager and duplicates its methods but with returning of TOwner. Is useful for reporting inside tests within a fluent chain.

  2. Added property to PageObject<TOwner>:

    public Report<TOwner> Report { get; }
    

Usage

Go.To<SomePage>().
    Report.Trace("tracemessage").
    Report.Debug("debugmessage").
    Report.Info("infomessage").
    Report.Warn("warnmessage").
    Report.Error(errorException).
    Report.Error("errormessage", errorException).
    Report.Error("errormessage", exceptionStackTrace).
    Report.Fatal(fatalException).
    Report.Fatal("fatalmessage", fatalException).

    Report.Start("Some section").
    // Do something within section.
    Report.EndSection().

    Report.Screenshot().
    Report.Screenshot("sometitle");

New Image<TOwner> Control

Added Image<TOwner> control for <img> element.

FileInput<TOwner> Now Handles Hidden <input>

FileInput<TOwner> is updated to handle hidden <input> as file inputs often made invisible/transparent.

  • Visibility = Visibility.Any is set in ControlDefinition.
  • SetValue and OnClear methods are overridden to handle visible and hidden inputs.

Members of UIComponent That Became Public

public UIComponent Owner { get;  }

public UIComponent Parent { get; }

public ScopeSource ScopeSource { get; }

public string ComponentName { get; }

public string ComponentTypeName { get; }

public string ComponentFullName { get; }

public UIComponentMetadata Metadata { get; }

Members of UIComponent<TOwner> That Became Public

public new TOwner Owner { get; }

public new UIComponent<TOwner> Parent { get; }

public UIComponentChildrenList<TOwner> Controls { get; }

public TComponentToFind GetAncestor<TComponentToFind>();

public TComponentToFind GetAncestorOrSelf<TComponentToFind>();

ScopeDefinitionAttribute is Inherited from MulticastAttribute

ScopeDefinitionAttribute is inherited from MulticastAttribute to add support of advanced targeting functionality for ControlDefinitionAttribute, PageObjectDefinitionAttribute and other inherited attributes.