Selenium.Essentials 1.0.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package Selenium.Essentials --version 1.0.0
NuGet\Install-Package Selenium.Essentials -Version 1.0.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Selenium.Essentials" Version="1.0.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Selenium.Essentials --version 1.0.0
#r "nuget: Selenium.Essentials, 1.0.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Selenium.Essentials as a Cake Addin
#addin nuget:?package=Selenium.Essentials&version=1.0.0

// Install Selenium.Essentials as a Cake Tool
#tool nuget:?package=Selenium.Essentials&version=1.0.0

Selenium.Essentials

Build Selenium web automation test using advanced web controls with wrappers and plenty of extensions to fasten your automation development time. Focus more on script logic with better consistent script execution, less maintenance, no hardwaits, with improved script execution performance and integrated Api testing framework.

Overview

Selenium provides only option to create only a single generic control which is called the IWebElement. Imagine if you have option to declare controls which resemble the html elements and provide its functionality, for example, Checkbox, Textbox, Button.

Selenium Essentials provide new custom controls giving meaning to your page objects and making it more readable. Every control is defined from a BaseControl which has a set of definitions applicable to all controls as well as its custom actions. For example, Checkbox control will have all properties of the BaseControl and also defines Check() which ticks the checkbox in the UI, UnCheck() which unticks the checkbox, IsChecked returns a bool value based on the control is Checked or Unchecked reading from the UI.

The Custom control also expose the underlying IWebElement as a property used by Selenium, in case you need to do any operations on top of this.

There are plenty of Wait operation defined on the base control which flows through all the custom controls. There are different overrides to the wait operation where you can control the time to wait, whether to throw exception if fails, message for assertions when the waits are used for assert operations. Some custom control overrides the default wait to give a better meaning.

Read more about controls here

WebDriver and WebElement comes with some useful extensions which helps during the automation. For example, executing javascript, scroll operations, taking screenshot, getting driver capabilities.

There is a simple Api framework, which can help in writing Integration tests using a fluent approach.

Package contains lots of extensions and helpers over different types which will help increase productivity. Example,

  • Loading excel and converting to C#
  • Converting Json to Dictionary
  • Serialization and Deserialization
  • Regular Expression, DateTime, String, Enumerable, Async

Benefits

  • Readable page objects which clearly defines what each control resemble in the browser
  • Custom controls with wrapped operations
    • Checkbox - Check, UnCheck, IsChecked, more
    • Textbox - Custom clear and set operations (extented clear which will make sure the content is cleared by doing Ctrl+a and BackSpace) and Set operation to overcome some responsive issues
    • UnorderedList - Total, Items
    • Select - operations on SelectElement
    • Table - TotalColumns, TotalRows, ColumnNames, GeCellContent, GetRowPosition, GetColumnPosition, more
    • Collection - working with Driver.FindElements(...)
    • FileUpload - UploadFile
    • Button
    • WebControl - for all generic html control
  • WebElement and WebDriver extension methods for most of the
  • Api framework to write integration tests
    • Supports fluent
    • Support most of the operations
    • Simple and easy to manage the tests
  • Extensions which provide many methods for automation engineering works
    • String, RegEx, Enumerable, DatTime, Async, more
  • Helpers to load excel, serialization, Json to Dictonary, more
  • Attributes for test to load json and xml data

Prerequisites

Visual Studio 2017 or higher

You need to know

  • Minimum
    • about the basics of writing test using Selenium (concept of IWebDriver, IWebElement and starting the driver)
    • know how to inspect and find elements (creating better selectors)
    • know about the page object model
    • any test framework, for example, nUnit
    • c# beginner
  • Good to know
    • CI CD pipelines
    • Multibrowser automated test configurations (any)
      • Selenium Grid
      • Sauce Labs
      • Browser Stack
      • Inhouse setup with physical servers and Vm
      • Cloud configured machines to run tests
      • Any custom setup to run multibrowser tests
    • Mobile test with Appium
    • Advanced Logging
    • Test Reporting
    • Programming knowledge
      • c# Generics
      • OOPS concepts
      • Linq and Lamda (basic)
      • Multithread programming

Install

nuget install Selenium.Essentials

Setup

Once you have setup your project or added the nuget package to your existing project, follow the links below to speed up your development.

  1. Onboarding
  2. Initialize Web Driver
  3. PageObject with new controls
  4. Some Tips

Usage

Conventional way to declare elements (IWebElement)

private IWebElement _headerContent = driver.FindElement(By.Id("chkAreYouRobot"));

The below section show how to use new Checkbox control. This definition is clear on what element in the UI corresponds to and also contains its custom properties and methods.

Add the using statement for this package

using Selenium.Essentials

Define the new control in your page object. If you have existing page objects with IWebElement, then you can easily change with same selector and passing it to the new custom control. Remember, the driver is explicitly passed to the control, in order to have better control over the page object if you intend to run the scripts in parallel, on the same machine.

private CheckboxControl _userTypeCheck => new CheckboxControl(driver, By.Id("chkAreYouRobot"));

Notice the declaration is by an expression (=>) which does not store the value but fetch everytime when accessed. Following this pattern reduces StaleElementException.

To tick the checkbox

public void CheckUserType() {
  _userTypeCheck.WaitForElementVisible(errorMessage: "The User Type checkbox was not visible in the UI"); //This can be used as an assertions, and when not found, it will throw with an exception with "errorMessage" passed
  _userTypeCheck.Check();
}

Conditionally check if the element exist by waiting for maximum of 2 seconds and make a check operation if available. The below sample will not throw an exception if the control was not found in the browser, instead the WaitForElementVisible will return false after 2 seconds and will not go inside the if condition

public void CheckUserType() {
  if (_userTypeCheck.WaitForElementVisible(waitTimeSec: 2, throwExceptionWhenNotFound: false)) {
    _userTypeCheck.Check();
  }
}

This is how it looks like when you have new controls in your page object

private ButtonControl _loginBtn => new ButtonControl(driver, By.Name("loginUser"));
private TextboxControl _usernameTxt => new TextboxControl(driver, By.Id("txtUserName"));
private TextboxControl _passwordTxt => new TextboxControl(driver, By.Id("txtPassword"));
private WebControl _headerContent => new WebControl(driver, By.CssSelector("div.user h2"));
private UnorderedListControl _tabNavigation => new UnorderedListControl(driver, By.XPath("//div[@id='p-namespaces']/ul"));
private TableControl _tableMainContent => new TableControl(driver, By.Id("mp-upper"));

Documentation

https://github.com/peterrexj/Selenium.Essentials/wiki

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.5.28 322 3/10/2024
1.0.5.27 265 3/10/2024
1.0.5.26 1,241 11/22/2023
1.0.5.25 1,051 10/18/2023
1.0.5.24 931 10/17/2023
1.0.5.23 915 10/17/2023
1.0.5.22 1,026 10/16/2023
1.0.5.21 911 10/16/2023
1.0.5.20 937 10/13/2023
1.0.5.19 949 10/11/2023
1.0.5.18 1,006 10/10/2023
1.0.5.17 1,017 9/29/2023
1.0.5.16 1,154 9/6/2023
1.0.5.15 2,176 2/14/2023
1.0.5.14 1,731 11/21/2022
1.0.5.13 1,432 11/20/2022
1.0.5.12 1,478 11/15/2022
1.0.5.11 1,697 10/16/2022
1.0.5.10 2,178 9/1/2022
1.0.5.8 3,053 5/25/2022
1.0.5.6 7,298 4/12/2022
1.0.5.5 1,724 4/6/2022
1.0.5.4 1,602 4/5/2022
1.0.5.3 1,697 4/4/2022
1.0.5.2 1,806 3/20/2022
1.0.5.1 1,915 1/9/2022
1.0.5 1,592 12/31/2021
1.0.4.1 2,632 7/3/2021
1.0.4 1,552 7/3/2021
1.0.3.1 1,728 6/14/2021
1.0.3 1,570 6/14/2021
1.0.2.1 12,875 10/15/2020
1.0.2 3,327 11/3/2019
1.0.1 1,723 10/6/2019
1.0.0 1,734 10/6/2019