Execute Automation

With C#

Advanced Selenium automation with C# (Data driven testing using Excel.)

Data driven testing using Excel:

Data driven testing is a testing in which test data/ expected data is got from an external source such as Excel files,  CSV files, ODBC sources.  Data driven testing should be used when the testing relays on a huge number of input data, for example, Online Application Form . This application has a lot of different data combination and permutation which is hard to handle and needs pulling from the external data source.

How to execute Data driven testing:

  • Read data from external data source
  • Populate data on UI by data entry operation.

Here is the code Read data from Excel  example:

We follow bellow steps:

 

/// 1. Define collection class to store Data from excel sheet
/// 2. Read data from file excel and store data into Datatable

/// 3. Read data from Datatable and populate in collection

/// 4. Get required test data from Collection to use ( GetData())

///5. Call GetData() when we want to get test data.

//// 1. Define collection class to store Data from excel sheet
 public class Datacollection
 {
 public int rowNumber { get; set; }
 public string colName { get; set; }
 public string colValue { get; set; }
 }
// Declare collection to use

 static List<Datacollection> dataCollection = new List<Datacollection>();

// 2.Read file excel and store data into Datatable
 private static DataTable ExcelToDataTable(string fileName, string SheetNumber)
 {
 DataTable resultTable = new DataTable();

 // Open file and return as Stream
 FileStream stream = File.Open(fileName, FileMode.Open, FileAccess.Read);

 if (stream != null)
 {
 //Createopenxmlreader via ExcelReaderFactory
 IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
 if (excelReader != null)
 {
 //Set the First Row as Column Name
 excelReader.IsFirstRowAsColumnNames = true;

 //Return as dataset
 DataSet result = excelReader.AsDataSet();

 //Get all the tables from Dataset
 DataTableCollection table = result.Tables;

 // Get datatable contains data from excel sheet and Store it in data table
 resultTable = table[SheetNumber];
 }
 }

 return resultTable;
 }

// 3.Read data and populate in collection
 public static void PutDataInCollection(string fileName, string SheetName)
 {
 // clear collection fisrt
 dataCollection.Clear();

 // Read file excel and store data into Datatable
 DataTable table = ExcelToDataTable(fileName, SheetName);

 //Iterate through the rows and columns of the Table
 for (int row = 1; row <= table.Rows.Count; row++)
 {
 for (int col = 0; col < table.Columns.Count; col++)
 {
 Datacollection dtTableCollection = new Datacollection()
 {
 rowNumber = row,
 colName = table.Columns[col].ColumnName,
 colValue = table.Rows[row - 1][col].ToString()
 };

 //Add all the details for each row
 dataCollection.Add(dtTableCollection);

 }
 }

 }

 //4. Get data from Collection
 public static string GetData(int rowNumber, string columnName)
 {
 // Row number in Excel file always starts by 2
 rowNumber--;
 string data = string.Empty;
 try
 {
 //Retriving Data using LINQ to reduce much of iterations 
 data = (from item in dataCollection
 where item.colName == columnName && item.rowNumber == rowNumber
 select item.colValue).SingleOrDefault();
 // data = dataCollection.Where(x => x.colName == columnName && x.rowNumber == rowNumber).SingleOrDefault().colValue;
 return data;
 }
 catch (Exception e)
 {
 Console.WriteLine("Exception occurred in Read Data Excel:" + e.Message.ToString());
 return data;
 }

 }

//// 5. Call Getdata ()
  public void LoginTest()

 {
 //Launch the url
 Base.driver.Navigate().GoToUrl(Base.URL);
 Base.driver.Navigate().

 // Maximize browser
 Base.driver.Manage().Window.Maximize();

 // Input Username (using Extension Method) 
 //CommonMethods.EnterText(Username, ExcelLib.GetData(2, "UserName"));
 Username.EnterText(ExcelLib.GetData(2, "UserName")); 
 

 // Input Password 
 Password.EnterText(ExcelLib.GetData(2, "PassWord"));
}

Leave a Reply

Your email address will not be published. Required fields are marked *