In this blog on.Net Core, we shall discuss unit testing for user interface (UI). It is a topic very common, and we will see how to do it here.

An_Overview_Of_Unit_Testing_With_Dot_NET_Core

Selenium is a software-testing framework, quite portable and for web applications and there is a .NET port of it. Here we shall use the Selenium.WebDriver package, and one or more of the following, for different browsers:

Selenium.Chrome.WebDriver: for Chrome

Selenium.Firefox.WebDriver: for Firefox

Selenium.WebDriver.MicrosoftWebDriver: for IE and Edge

Selenium gives a “minimum” contract that works over all the browsers.

Here let’s discuss some examples of how it works. Let’s start with instantiating a driver:

using (var driver = (IWebDriver) new ChromeDriver(Environment.CurrentDirectory))

{

//…

}

Take note of the Environment.CurrentDirectory parameter; it marks the path where the driver can find a chromedriver.exe file, or geckodriver.exe for Firefox or MicrosoftWebDriver.exe, in case of IE/Edge. These executables get added automatically by the Nuget packages. If you don’t remove the driver, the window will remain open after the unit test finishes. You also have a choice to Quit at any time.

Let’s now navigate to some page:

driver

.Navigate()

.GoToUrl(“http://www.google.com”);

And get some element from its name:

var elm = driver.FindElement(By.Name(“q”));

Besides the name, you can also search by:

Id: By.Id

CSS class: By.ClassName

CSS selector: By.CssSelector

Tag name: By.TagName

Link text: By.LinkText

Partial link text: By.PartialLinkText

XPath: By.XPath

Once an element is found, its properties can be accessed:

var attr = elm.GetAttribute(“class”);

var css = elm.GetCssValue(“display”);

var prop = elm.GetProperty(“enabled”);

Then we can send it text strokes:

elm.SendKeys(“asp.net core”);

Or click on it:

elm.Click();

It is to be known that, page loading could take some time, so, you can configure the default time of waiting, before doing a GoToUrl:

var timeouts = driver.Manage().Timeouts();

timeouts.ImplicitWait = TimeSpan.FromSeconds(1);

timeouts.PageLoad = TimeSpan.FromSeconds(5);

ImplicitWait is only a time that Selenium awaits before searching an element.

If you have to wait for some period of time, like, till some AJAX request is done with, you can do the following:

var waitForElement = new WebDriverWait(driver, TimeSpan.FromSeconds(5));

var logo = waitForElement.Until(ExpectedConditions.ElementIsVisible(By.Id(“hplogo”)));

The condition is passed on to ExpectedConditions could be one of:

AlertIsPresent

ElementExists

ElementIsVisible

ElementSelectionStateToBe

AlertState

ElementToBeSelected

FrameToBeAvailableAndSwitchToIt

InvisibilityOfElementWithText

PresenceOfAllElementsLocatedBy

StalenessOf

TextToBePresentInElementLocated

TextToBePresentInElementValue

TitleContains

TitleIs

UrlContains

UrlMatches

UrlToBe

VisibilityOfAllElementsLocatedBy

You can see, there are several conditions that you can make use of. If the condition is not met and the timer expires, then the value returned is null.This is nice for your unit tests.

With this, we conclude.

Keep coding!

If you want to enhance yourself in basics and concepts with Dot Net Course and improve yourself through Dot NET training program; our institute, CRBtech Solutions would be of great help and support. We give a well-structured program for the best Dot Net Course. Among several good institutes of dot net training and placement in Pune, CRBtech has created a niche for itself.