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.