rana
rana

Reputation: 77

Assert in Selenium C#

Is there a Assert class present in Selenium C# just like we have in Coded UI test.

Or I should use the Microsoft.VisualStudio.TestTools.UnitTesting.Assert class to perform asserts in Selenium?

Upvotes: 1

Views: 31250

Answers (9)

CSharp
CSharp

Reputation: 1583

Selenium C# is not offering an assert class. You have to borrow it from somewhere or write your own implementation.

Writing your own implementation will give you more freedom to manage assertions, as Peter said.

Here is the basic idea. Just create a static class having assert methods like this:

public static class MyAssertClass
{
    public static void MyAreEqualMethod(string string1, string string2)
    {
        if (string1 != string2)
        {
          // Throw an exception
        }
    }
}

Upvotes: 0

Hemlata Gehlot
Hemlata Gehlot

Reputation: 361

Assert.Equals(obj1, obj2); // Object comparison
Assert.AreEqual(HomeUrl, driver.Url); // Overloaded, comparison. Same object value
Assert.AreNotEqual(HomeUrl, driver.Url);
Assert.AreSame("https://www.google.com", URL); // For the same object reference

Assert.IsTrue(driver.WindowHandles.Count.Equals(2));
Assert.IsFalse(driver.WindowHandles.Count.Equals(2));

Assert.IsNull(URL); Assert.IsNotNull(URL);

Upvotes: 0

Peter
Peter

Reputation: 51

You can use MSTest or I would rather prefer to write simple assertion method. In Selenium, most of the use cases would be a Boolean check, IsTrue | IsFalse (you can even extend to write more complex assertions), so when you define your own assertion you will get more control of your script, like,

  • Taking a screenshot if the assertion fails
  • You can live with the failure and continue the test
  • You can mark the script as partially passing
  • Extract more information from the UI, like JavaScript errors or server errors

Upvotes: 1

Mahesh Chaugule
Mahesh Chaugule

Reputation: 21

To use Assert you have to first create the unit testing project in Visual Studio.

Or import the following reference to the project.

using Microsoft.VisualStudio.TestTools.UnitTesting;
// Using this you can use the Assert class.

Assert.IsTrue(bool);
Assert.IsFalse(bool);
Assert.AreEqual(string,string);

Upvotes: 0

JyoGi108
JyoGi108

Reputation: 31

The Assert class is available with either the MSTest or NUnit framework.

I used NUnit, and there is the Assert class as in below line of code.

Sample code:

Assert.AreEqual(AmericaEmail, "[email protected]", "Strings are not matching");

Upvotes: 3

mrfreester
mrfreester

Reputation: 1991

Yes, you would use the Assert class in your unit test framework, in your case MSTest.

The Selenium library doesn't have responsibility over test framework type of functions, including asserts.

You can use FluentAssertions which supports many different frameworks including MSTest which might minimize changes needed if you need to switch frameworks for any reason.

Upvotes: 5

qchar90
qchar90

Reputation: 474

According to https://msdn.microsoft.com/en-us/library/ms182532.aspx

[TestClass]
public class UnitTest1
{
    private IWebDriver driver;
    [TestInitialize]
    public void Setup()
    {
        driver = new ChromeDriver();
        driver.Url = "Your URL";
    }

    [TestMethod]
    public void TestMethod1()
    {
        //Your first test method
        var element = driver.FindElement(By.Id("ID"));
        Assert.IsTrue(element.Displayed);
        Assert.AreEqual(element.Text.ToLower(), "Expected text".ToLower());
    }

    [TestMethod]
    public void TestMethod2()
    {
        //Your second test method
    }

    [TestCleanup]
    public void TearDown()
    {
        driver.Quit();
    }
}

Upvotes: 2

Midhun Kumar
Midhun Kumar

Reputation: 9

This way assert can be used for switching into popup's displayed:

IAlert alert = driver.SwitchTo().Alert();
String alertcontent = alert.Text;
Assert.AreEqual(alertcontent, "Do you want to save this article as draft?");
obj.waitfn(5000);
alert.Accept();

Upvotes: -1

Related Questions