# Automated UI End to End(E2E) tests using ReqnRoll BDD, MSTest, and Chrome

## Prerequisites

- Visual Studio with ReqnRoll extension installed
- Chrome browser installed
- .NET Core SDK (please take a look of required version)

## Project Setup

1. Create a new SpecFlow project in Visual Studio.

2. Install the required NuGet packages:
   - Reqnroll
   - Reqnroll.MSTest
   - Selenium.WebDriver
   - Selenium.WebDriver.ChromeDriver


## Writing the Test. Example

1. Create a new feature file named "Login.feature" in the "Features" folder of your SpecFlow project.

2. Add the following scenario to the "Login.feature" file:

```gherkin
Feature: User Authentication
    In order to access my account
    As a user
    I want to be able to authenticate in the system

Scenario: Successful User Login
    Given I am on the login page
    When I enter valid credentials
    And I click the login button
    Then I should be redirected to the home page
```

3. Right-click on the "Login.feature" file and choose "Generate Step Definitions."

4. Select the class where you want to generate the step definitions or create a new class.

### Writing the Test Code

1. Open the step definition file corresponding to the "Login.feature" scenario.

2. Add the following code to the step definition file:

```csharp
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using TechTalk.SpecFlow;

namespace YourNamespace
{
    [Binding]
    public class LoginSteps
    {
        private IWebDriver driver;

        [Given(@"I am on the login page")]
        public void GivenIAmOnTheLoginPage()
        {
            driver = new ChromeDriver();
            driver.Navigate().GoToUrl("http://localhost:3000/login");
        }

        [When(@"I enter valid credentials")]
        public void WhenIEnterValidCredentials()
        {
            // Enter valid credentials in the login fields here
            var usernameField = driver.FindElement(By.Id("username"));
            usernameField.SendKeys("yourusername");

            var passwordField = driver.FindElement(By.Id("password"));
            passwordField.SendKeys("yourpassword");
        }

        [When(@"I click the login button")]
        public void WhenIClickTheLoginButton()
        {
            var loginButton = driver.FindElement(By.Id("login-button"));
            loginButton.Click();
        }

        [Then(@"I should be redirected to the home page")]
        public void ThenIShouldBeRedirectedToTheHomePage()
        {
            Assert.AreEqual("http://localhost:3000/", driver.Url);
        }

        [AfterScenario]
        public void AfterScenario()
        {
            driver.Quit();
        }
    }
}
```

### Running the Test

1. Build your ReqnRoll project to compile the code.

2. In Visual Studio, open the "Test Explorer" window.

3. Click the "Run All Tests" button to execute the authentication test.
