Search code examples
c#selenium-webdriverspecflow

How to import examples from CSV and use it in StepDefinitions in SpecFlow


I have this code in feature:

Feature: CheckLicense

    @T-1
    @DataSource:licenses.csv @DataField:key=licenseNum
    Scenario Outline: Open site - Enter key - Search - Personal List - Get name
        Given Load settings
        When I enter '<key>'
        And I click on Search button
        And I click on Personnel List button
        Then I get name for '<key>'

and this StepDefinition class:

using CheckLicencesTest.Drivers;
using CheckLicencesTest.Pages;
using OpenQA.Selenium.Chrome;
using TechTalk.SpecFlow;

namespace CheckLicencesTest.StepDefinitions
{
    [Binding, Scope(Tag = "T-1")]
    public sealed class CheckLicenseStepDefinitions
    {
        private readonly BrowserDriver driver;

        private LicenseCheckPage _licenseCheckPage;
        private CheckDetailPage _checkDetailPage;
        private ContractorsDetailPage _contractorsDetailPage;

        public CheckLicenseStepDefinitions(BrowserDriver browserDriver)
        {
            driver = browserDriver;
        }

        [Given("Load settings")]
        public void GivenLoadSettings()
        {
            _licenseCheckPage = new LicenseCheckPage(driver.Current);
            _checkDetailPage = new CheckDetailPage(driver.Current);
            _contractorsDetailPage = new ContractorsDetailPage(driver.Current);
        }

        [When("I enter '(.*)'")]
        public void ThenIEnterKey(string key)
        {
            _licenseCheckPage.EnterKey(key);
        }

        [When("I click on Search button")]
        public void WhenIClickOnSearchButton()
        {
            _licenseCheckPage.ClickSearch();
        }

        [When("I click on Personnel List button")]
        public void WhenIClickOnPersonnelListButton()
        {
            _checkDetailPage.ClickPersonnelLink();
        }

        [Then("I get name for '(.*)'")]
        public void ThenIGetName(string key)
        {
            Console.WriteLine($"Name for {key}: {_contractorsDetailPage.GetName()}");
        }
    }
}

In official documentation I see that they don't use stepDefinition.cs files, but I should use, so how can I use keys from csv and use it in StepDefinition.cs? May be I should I use another way to import data from csv to StepDefinition?


Solution

  • I found answer:

    1. Install CsvHelper plugin through NuGet
    2. Install SpecFlow.ExternalData plugin through NuGet

    I was inattentive and did not notice these two links. In addition, the colors on the official website are rather pale. BUT, it helped me