WebDriver.Extensions
1.0.8
dotnet add package WebDriver.Extensions --version 1.0.8
NuGet\Install-Package WebDriver.Extensions -Version 1.0.8
<PackageReference Include="WebDriver.Extensions" Version="1.0.8" />
paket add WebDriver.Extensions --version 1.0.8
#r "nuget: WebDriver.Extensions, 1.0.8"
// Install WebDriver.Extensions as a Cake Addin #addin nuget:?package=WebDriver.Extensions&version=1.0.8 // Install WebDriver.Extensions as a Cake Tool #tool nuget:?package=WebDriver.Extensions&version=1.0.8
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 | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. 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. net9.0 is compatible. |
-
net8.0
- Newtonsoft.Json (>= 13.0.3)
- Selenium.WebDriver (>= 4.27.0)
-
net9.0
- Newtonsoft.Json (>= 13.0.3)
- Selenium.WebDriver (>= 4.27.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
1.0.8
-> Support dotnet 9.0
-> Update NuGet packages
1.0.7 -
-> Update NuGet packages due to vulnerability.
-> Support dotnet 7.0
-> Support dotnet 8.0
-> Remove support for dotnet versions that are out of support. Supporting dotnet 6.0 and above.
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