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.
- Place it in a static class like this one.
- Create a static method for the action.
- Pass the extended element as a parameter with the keyword ‘this’.
- 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.