Extensibility- Add New Find Locators

Learn how to extend BELLATRIX adding new custom find locators.

Introduction

Imagine that you want to create a new locator for finding all elements with an ID starting with a specific value. First, you need to create a new ‘FindStrategy’ class.

Example

public class FindIdStartingWithStrategy : FindStrategy {     public FindIdStartingWithStrategy(string value)         : base(value)     {     }      public override By Convert()     {         return By.CssSelector($"[id^='{Value}']");     } } 

In the Convert method, we use a standard WebDriver By locator, and in this case we implement our requirements through a little CSS.

To ease the usage of the locator, we need to create an extension methods for ComponentCreateService and Component classes.

public static class ComponentCreateExtensions {     public static ComponentsList<TComponent> CreateAllByIdStartingWith<TComponent>(this Element element, string idEnding)         where TComponent : Component => new ComponentsList<TComponent>(new FindIdStartingWithStrategy(idEnding), component.WrappedElement); } 
public static class ComponentRepositoryExtensions {     public static TComponent CreateByIdStartingWith<TComponent>(this ComponentCreateService repository, string idPrefix, bool shouldCache = false)         where TComponent : Component => repository.Create<TComponent, FindIdStartingWithStrategy>(new FindIdStartingWithStrategy(idPrefix), shouldCache);      public static ComponentsList<TComponent> CreateAllByIdStartingWith<TComponent>(this ComponentCreateService repository, string idPrefix)         where TComponent : Component => new ComponentsList<TComponent>(new FindIdStartingWithStrategy(idPrefix), null); } 

Usage

using Bellatrix.Web.GettingStarted.ExtensionMethodsLocators; using Microsoft.VisualStudio.TestTools.UnitTesting;  namespace Bellatrix.Web.GettingStarted {     [TestFixture]     public class NewFindLocatorsTests : WebTest     {         [Test]         public void PromotionsPageOpened_When_PromotionsButtonClicked()         {             App.Navigation.Navigate("http://demos.bellatrix.solutions/");              var promotionsLink = App.Components.CreateByIdStartingWith<Anchor>("promo");              promotionsLink.Click();         }     } } 

You need to add a using statement to the namespace where the extension methods for new locator are situated.

using Bellatrix.Web.GettingStarted.ExtensionMethodsLocators; 

After that, you can use the new locator as it was originally part of BELLATRIX.

var promotionsLink = App.Components.CreateByIdStartingWith<Anchor>("promo");