Selenium.SelfHealing.v3
0.99.24-beta.1
dotnet add package Selenium.SelfHealing.v3 --version 0.99.24-beta.1
NuGet\Install-Package Selenium.SelfHealing.v3 -Version 0.99.24-beta.1
<PackageReference Include="Selenium.SelfHealing.v3" Version="0.99.24-beta.1" />
paket add Selenium.SelfHealing.v3 --version 0.99.24-beta.1
#r "nuget: Selenium.SelfHealing.v3, 0.99.24-beta.1"
// Install Selenium.SelfHealing.v3 as a Cake Addin #addin nuget:?package=Selenium.SelfHealing.v3&version=0.99.24-beta.1&prerelease // Install Selenium.SelfHealing.v3 as a Cake Tool #tool nuget:?package=Selenium.SelfHealing.v3&version=0.99.24-beta.1&prerelease
Selenium.SelfHealing
Selenium Self-Healing is a revolutionary technology and is set to become the industry standard for rock solid browser automation.
A must have technology for any organization with a heavy investment in Selenium Automation.
Selenium Self-Healing is a technology suite working together heal your broken selectors, stabilize your Selenium Automation and deliver time-saving Insights.
Selenium Self-Healing will uplift your platform and deliver solid results you can count on.
Problem Domain
Selenium Automation Stability
After years of experience delivering large automation suites the stability of the scripts and the reliably of the scripts was always an issue. The types of issues we would see were
- StaleElementException
- ElementNotFoundException
- WebDriverTimeoutException
Broken Selenium Script
Repeatedly we saw Selenium scripts written today only to be failing tomorrow. The developers push some new code or the system got an upgrade and everything would fail.
Hard to get consistent results
The classic problem, 'Works on my machine'
Raising Technical Debt
Technical debt across a platform was ever increasing and there was never enough time allocated to maintenance.
Delivered code was ugly
In order to handle all the errors thrown by the Selenium WebDriver the code was littered with
Try.... Catch...
Thread.Sleep
new WebDriverWait(theDriver).Until(ExpectedCondition.....).
> There had to be a better way and that was our focus
What is it?
Selenium is a technology suite implemented at the WebDriver level. A single line of code is all that is required to get started.
The technology suite covers the following areas.
Self-Healing Engine
Self-Healing is the ability to repair broken selectors at run-time. It does not matter if the the elements attributes have changed or has moved to a new position in the UI.
AutoWait Engine
Selenium was originally developed in 2004 when the web was relatively static. Modern web sites are high dynamic, elements are constantly changing and reacting to user input.
Without a modernizing library like Selenium Self-Healing the types of issues you would run into are
- WebElementException
- ElementNoFoundException
- WebElementTimeoutException
- StaleReferenceException.
If your frustrated by this, so to were we.
AutoWait feature is similar to that of Playwrite's AutoWait. Essentially web pages can be slow load and if the element is not found then a process of retry operations will kick in.
Overall as the developer, instantly you will see more stable Selenium sessions and better test execution results in your CICD pipeline.
Selector Optimization Engine
The Selector Optimization Engine is responsible for reviewing selectors at run-time and making optimization suggestions.
These alternate selectors are guaranteed to uniquely find the same element you intended. They are surfaced through development logs and ultimately feed back into the Self-Healing Engine.
Self-Healing Insights Report
The Self-Healing Insights report is a real time save when reviewing Test Execution Sessions and diagnosing issue.
The report easily integrates into your CICD processes and will save you time.
Package Selection
Our technology operates at the WebDriver level and we have a NuGet package to suite your requirements.
Before installing this package you need to identify the version of Selenium.Support your are using. We have 3 technology solutions to target any major Selenium version and platform compatibility from .Net Framework 4.0 - .Net6.
There are packages available to support
Selenium.WebDriver.SelfHealing
- Deprecated package that targeted Selenium.SelfHealing.v4.
- Slitting the package enabled us to expand support to all major versions Selenium and the whole .Net Platform.
Installation
Selenium.SelfHealing is distributed as a NuGet package.
Pre-installation
Please ensure you have carefully reviewed the version of Selenium.Support you are using and choose the package to suite.
New projects will probably default to Selenium.SelfHealing.v4.
It is also good practice to ensure the following 2 NuGet packages are in sync.
- Selenium.Support
- Selenium.WebDriver
Using command-line
The easiest way to get started is to run the following command.
dotnet add package Selenium.SelfHealing.v4
Using Package Manager
Install-Package Selenium.SelfHealing.v4
Getting Started
Once installed into the project getting started is just one line of code.
using Selenium.SelfHealing;
var options = new ChromeOptions();
var chromeDriver = new ChromeDriver(options);
// this creates a self-healing WebDriver
var selfHealingDriver = chromeDriver.ToSelfHealingDriver();
Capabilities
Resilient • Reduce flaky tests
Self-healing. Selenium.SelfHealing will repair broken selectors on the fly. Saving you time and money. Elements can change attributes or position and still be self-healed.
Auto-wait. Selenium.SelfHealing waits for elements to be actionable prior to performing actions. Auto-wait will search for interactable elements in preference. The combination of the Auto-wait and Self-healing eliminate the need for artificial timeouts - primary cause of flaky tests.
Selector-optimization. While your scripts are running, we analyse the chosen selector and provide optimization suggestions.
No trade-offs • No limits
Parallel test execution. Run tests in parallel and save time. Our framework was build to handle everything.
Selenium-insights. While Selenium.SelfHealing is active all activity is logged for review.
Self-Healing Insights Report
Healing-report. A detailed report is created after every session, detailing any broken selectors and the actions required to fix.
TeamCity integration. Easily integrate your self-healing report into a build tab.
Emailable HTML Report. Reports are viewable directly from the file system and can easily be emailed and shared.
Sample Report
![Self-healing report][self-healing-report]
Sample Logs
![Self-healing logs][self-healing-logs]
Product | Versions 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 | net40 is compatible. net403 was computed. net45 is compatible. net451 was computed. net452 was computed. net46 was computed. 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. |
-
.NETFramework 4.0
- DotNetSeleniumExtras.WaitHelpers (>= 3.11.0)
- HtmlAgilityPack (>= 1.11.45)
- Newtonsoft.Json (>= 13.0.1)
- Selenium.Support (>= 3.10.0)
- Selenium.WebDriver (>= 3.10.0)
-
.NETFramework 4.5
- DotNetSeleniumExtras.WaitHelpers (>= 3.11.0)
- HtmlAgilityPack (>= 1.11.45)
- Newtonsoft.Json (>= 13.0.1)
- Polly (>= 7.2.3)
- Polly.Contrib.WaitAndRetry (>= 1.1.1)
- Selenium.Support (>= 3.10.0)
- Selenium.WebDriver (>= 3.10.0)
- Serilog.Sinks.Console (>= 4.0.1)
- Serilog.Sinks.File (>= 5.0.0)
-
.NETStandard 2.0
- DotNetSeleniumExtras.WaitHelpers (>= 3.11.0)
- HtmlAgilityPack (>= 1.11.45)
- Microsoft.Extensions.Configuration (>= 3.1.23)
- Microsoft.Extensions.Configuration.Binder (>= 3.1.23)
- Microsoft.Extensions.Configuration.Json (>= 3.1.23)
- Newtonsoft.Json (>= 13.0.1)
- Polly (>= 7.2.3)
- Polly.Contrib.WaitAndRetry (>= 1.1.1)
- Selenium.Support (>= 3.10.0)
- Selenium.WebDriver (>= 3.10.0)
- Serilog.Sinks.Console (>= 4.0.1)
- Serilog.Sinks.File (>= 5.0.0)
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 |
---|---|---|
0.99.24-beta.1 | 93 | 9/20/2022 |
0.99.23-beta.1 | 66 | 9/18/2022 |