Selenium C# считывает данные из Excel для тестирования на основе данных На Основе имени листа

#c# #excel #selenium-webdriver #junit

Вопрос:

Я пытаюсь выполнить тестирование на основе данных, загрузив клиентские коды из файла Excel для входа в систему и выполнения других операций.Я пытаюсь повторить свой тест для всех клиентов в столбце Имя пользователя. Мне нужно только прочитать данные из SheetName, прямо сейчас у меня есть постоянное имя листа (i,e sheet1), я хотел добавить параметр SheetName

Любая помощь в этом будет очень признательна, спасибо.

Я использую ExcelDataReader v3.4.0, ExcelDataReader.Набор данных v3.4.0, selenium Webdriver v3.11.0

Мой общий код Excel приведен Ниже:

 ```
    using ExcelDataReader;
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.IO;
    using System.Linq;
    using System.Runtime.Remoting.Messaging;
    using System.Text;
    using System.Threading.Tasks;

    namespace MyDemoAutomation
    {
     public class ExcelUtil
     {
     public DataTable ExcelToDatable(string fileName)
        {
        // open file and returns as stream

        FileStream stream = File.Open(fileName, FileMode.Open, FileAccess.Read);
        // create openXmlReader via ExcelReaderFactory
        IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
        //Set the first row as column name
      var result1 = excelReader.AsDataSet(new ExcelDataSetConfiguration()
            {
            ConfigureDataTable = (_) => new ExcelDataTableConfiguration()
                {
                UseHeaderRow = true
                }
            });
 
        // Return as dataset
        DataSet result = excelReader.AsDataSet();
        // Get all tables
        DataTableCollection table = result.Tables;
        // Store in Database
        DataTable resultTable = table["Sheet1"];
 

Здесь вместо листа 1 я хочу передать Имя листа в качестве параметра(В существующем Коде, Как я могу добавить
// возврат
таблица результатов возврата;

         }

         List<DataCollection> dataCol = new List<DataCollection>();
         public void PopulateInCollection(string fileName)
        {

        DataTable table = ExcelToDatable(fileName);
        for (int row = 1; row <= table.Rows.Count; row  )
            {

            for (int col = 0; col < table.Columns.Count; col  )
                {

                DataCollection dtTable = new DataCollection()
                    {
     


                    rowNumber = row,
                    colName = table.Columns[col].ColumnName,
                    colValue = table.Rows[row - 1][col].ToString()
                    };
                dataCol.Add(dtTable);

                }
            }
        }

        public string ReadData(int rowNumber, string columnName)
        {
        try
            {
            // Retriving data using LINQ to reduce much of iterations
            string data = (from colData in dataCol
                           where colData.colName == columnName amp;amp; colData.rowNumber == rowNumber
                           select colData.colValue).SingleOrDefault();

            return data.ToString();
            }
        catch (Exception e)
            {
            return null;
            }
        }

        internal class DataCollection
        {
        public int rowNumber { get; internal set; }
        public string colName { get; internal set; }
        public string colValue { get; internal set; }
        }
    }
 

}

и тестовый класс:

         [Test]
        public void DataDrivenTest_FromExcel()
        {

        Driver = new ChromeDriver();
    
        ExcelUtil util = new ExcelUtil();
        util.PopulateInCollection(@"C:danAutomationTestTestDatatest.xlsx");
        Driver.FindElement(By.Id("contentPlaceholder_txtClientCode")) 
       .SendKeys(util.ReadData(i));
    
         Driver.FindElement(By.XPath("//*[@id='btnLogin']")).Click();
         Driver.FindElement(By.XPath("//* 
              [@id='tabContent0']/table/tbody/tr[2]/td[1]")).Click();
        Driver.FindElement(By.Id("contentPlaceholder_txtcloseButton")).Click();
    
          Driver.Quit

           }
 

Ответ №1:

 List<DataCollection> dataCol = new List<DataCollection>();
public void PopulateInCollection(string fileName, string sheetName)
{
    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 dtTable = new Datacollection()
            {
                rowNumber = row,
                colName = table.Columns[col].ColumnName,
                colValue = table.Rows[row - 1][col].ToString()
            };
            //Add all the details for each row
            dataCol.Add(dtTable);
        }
    }
}

public DataTable ExcelToDaTable(string fileName, string sheetName)
{
    // open file and returns as stream

    FileStream stream = File.Open(fileName, FileMode.Open, FileAccess.Read);
    // create openXmlReader via ExcelReaderFactory
    IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
    //Set the first row as column name
    var result = excelReader.AsDataSet(new ExcelDataSetConfiguration()
    {
        ConfigureDataTable = (_) => new ExcelDataTableConfiguration()
        {
            UseHeaderRow = true
        }
    });

    // Return as dataset
    DataSet result = excelReader.AsDataSet();
    // Get all tables
    DataTableCollection table = result.Tables;
    // Store in Database
    DataTable resultTable = table[sheetName];
    return resultTable;
}
 

#Конец

//Определите это первое использование.Коллекция PopulateInCollection(«Имя файла», «Имя листа»);

//Чтение из файла excel util.ReadData(номер строки, имя столбца)

Комментарии:

1. Пожалуйста, предоставьте подробное объяснение вашему ответу, чтобы следующий пользователь лучше понял ваш ответ.

2. Неясно, почему этот ответ был бы решением проблемы, с которой столкнулся открыватель.