WebDriver.Extensions 1.0.5

There is a newer version of this package available.
See the version list below for details.
dotnet add package WebDriver.Extensions --version 1.0.5
NuGet\Install-Package WebDriver.Extensions -Version 1.0.5
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="WebDriver.Extensions" Version="1.0.5" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add WebDriver.Extensions --version 1.0.5
#r "nuget: WebDriver.Extensions, 1.0.5"
#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 WebDriver.Extensions as a Cake Addin
#addin nuget:?package=WebDriver.Extensions&version=1.0.5

// Install WebDriver.Extensions as a Cake Tool
#tool nuget:?package=WebDriver.Extensions&version=1.0.5

Selenium Web Driver Extension

I created this repository to help with Selenium testing.

I found there were some problems with using the built in tools.

  • Exceptions
  • Wait until

Exceptions

The current tooling seems to throw exceptions a lot when the element can't be found. This is due to the page not loading fully, or not being visible.

So, these extensions use the catch Exception to catch all exceptions raised by the find methods.

If you need the exceptions to be raised, then this extension is not for you.

Wait until

There is a way to try and find an element using a class called WebDriverWait. However, I found that this still threw exceptions. So, I have written this extension to wrap a do while loop around the try catch block.

Signatures

public static IWebElement SafeFindElement(this IWebDriver driver, By by, int timeOutInSeconds = 0, Func<IWebElement, IWebElement> elementCheckFunc = null)
public static IReadOnlyCollection<IWebElement> SafeFindElements(this IWebDriver driver, By by, int timeOutInSeconds = 0)

IWebDriver

The object that we are using for testing.

By

The By parameter we are using for the search.

int

The time out in seconds that the process will run for while it is attempting to find the element(s). If the time runs out, and the element(s) still hasn't been found, then it will return null, and not throw an exception.

Func<IWebElement, IWebElement>

This function is what you would like to run against the element found. As long as it returns an IWebElement.

You would use it to limit the element further. You might not want the element that has been found, as it is not enabled, or displayed.

Usages

Here are some examples of how to use the element. They are, mostly, taken from the unit test project.

Safe Find Element

var result = _driver.SafeFindElement(By.Id("banana"));
var result = _driver.SafeFindElement(By.Id("banana"), 5);
var result = _driver.SafeFindElement(By.Id("banana"), 0, (element) => element.Displayed ? element : null);
var result = _driver.SafeFindElement(By.Id("banana"), 5, (element) => element.Displayed ? element : null);
var result = _driver.SafeFindElement(By.Id("banana"), 5, (element) => (element.Displayed && element.Enabled) ? element : null);

Safe Find Elements

var result = _driver.SafeFindElements(By.Id("banana"));
var result = _driver.SafeFindElements(By.Id("banana"), 5);

Obsolete Methods

To keep the methods names the same as the Selenium.WebDriver methods, an issue was raised on GitHub. This has been fixed.

The following methods are now obsolete and will be removed in a later version of the library.

  • SafeGetElement
  • SafeGetElements
Product Compatible and additional computed target framework versions.
.NET net5.0 is compatible.  net5.0-windows was computed.  net6.0 is compatible.  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 netcoreapp3.1 is compatible. 
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.7 139 11/17/2023
1.0.5 2,290 4/30/2022
1.0.3 444 4/2/2022
1.0.1.3 13,058 9/27/2020
1.0.0 986 12/26/2019

1.0.5 -
-> Update vulnerable packages identified by Snyk
* Newtonsoft.Json v9.0.1 - v13.0.1
* System.Net.Http v4.3.0 - v4.3.4
* System.Text.RegularExpressions v4.3.0 - v4.3.1
1.0.4 -
-> Skipped due to failed build
1.0.3 -
-> Add support for dotnet 5.0
-> Add support for dotnet 6.0
-> Updated Selenium package to v4
1.0.1.3 -
-> Changed name of method.
-> Set original method as obsolete
-> "Get" method will be removed in v1.1.0
1.0.0 -
-> Initial version