Extensibility- Extend Existing Elements- Extension Methods

Learn how to extend BELLATRIX web elements using extension methods.

Example

[TestFixture] public class ExtendExistingElementWithExtensionMethodsTests : WebTest {     [Test]     public void PurchaseRocket()     {         App.Navigation.Navigate("http://demos.bellatrix.solutions/");          Select sortDropDown = App.Components.CreateByNameEndingWith<Select>("orderby");         Anchor protonMReadMoreButton = App.Components.CreateByInnerTextContaining<Anchor>("Read more");         Anchor addToCartFalcon9 = App.Components.CreateByAttributesContaining<Anchor>("data-product_id", "28").ToBeClickable();         Anchor viewCartButton = App.Components.CreateByClassContaining<Anchor>("added_to_cart wc-forward").ToBeClickable();         TextField couponCodeTextField = App.Components.CreateById<TextField>("coupon_code");         Button applyCouponButton = App.Components.CreateByValueContaining<Button>("Apply coupon");         Number quantityBox = App.Components.CreateByClassContaining<Number>("input-text qty text");         Div messageAlert = App.Components.CreateByClassContaining<Div>("woocommerce-message");         Button updateCart = App.Components.CreateByValueContaining<Button>("Update cart").ToBeClickable();         Button proceedToCheckout = App.Components.CreateByClassContaining<Button>("checkout-button button alt wc-forward");         Heading billingDetailsHeading = App.Components.CreateByInnerTextContaining<Heading>("Billing details");         Span totalSpan = App.Components.CreateByXpath<Span>("//*[@class='order-total']//span");          sortDropDown.SelectByText("Sort by price: low to high");         protonMReadMoreButton.Hover();         addToCartFalcon9.Focus();         addToCartFalcon9.Click();         viewCartButton.Click();         couponCodeTextField.SetText("happybirthday");         applyCouponButton.Click();          messageAlert.ToHasContent().ToBeVisible().WaitToBe();         messageAlert.ValidateInnerTextIs("Coupon code applied successfully.");         quantityBox.SetNumber(0);         quantityBox.SetNumber(2);          updateCart.Click();          totalSpan.ValidateInnerTextIs("95.00€", 15000);          proceedToCheckout.SubmitButtonWithEnter();         billingDetailsHeading.ToBeVisible().WaitToBe();     } } 

Explanations

public static class ButtonExtensions {     public static void SubmitButtonWithEnter(this Button button)     {         var action = new Actions(button.WrappedDriver);         action.MoveToElement(button.WrappedElement).SendKeys(Keys.Enter).Perform();     } } 

One way to extend an existing element is to create an extension method for the additional action.

  1. Place it in a static class like this one.
  2. Create a static method for the action.
  3. Pass the extended element as a parameter with the keyword ‘this’.
  4. Access the native element through the WrappedElement property and the driver via WrappedDriver.

Later to use the method in your tests, add a using statement containing this class’s namespace.

using Bellatrix.Web.GettingStarted.Advanced.Elements.Extension.Methods; using Microsoft.VisualStudio.TestTools.UnitTesting;  namespace Bellatrix.Web.GettingStarted 

To use the additional method you created, add a using statement to the extension methods’ namespace.

proceedToCheckout.SubmitButtonWithEnter(); 

Use the custom added submit button behaviour through ‘Enter’ key.