【问题标题】:How to read all the rows of the excel sheet and run in Selenium test script using C#?如何使用 C# 读取 excel 表的所有行并在 Selenium 测试脚本中运行?
【发布时间】:2012-08-01 16:49:31
【问题描述】:

我需要帮助从 excel 表中读取所有行作为我的 selenium 测试用例中的测试数据。

使用以下代码,我只能读取 Excel 工作表的一行。

//设置硒测试

 public void SetupTest()
    {
        selenium = new DefaultSelenium("localhost", 4444, "*googlechrome", "http://www.google.com/");
        selenium.Start();
        verificationErrors = new StringBuilder();
    }

//将我连接到我的 Excel 表 SampleTestData.xls

public void ConnectExcel()
{
 excel.Application excelApp = new excel.Application();
 excelApp.Visible = true;
 string ExcelDataPath = @"C:\SampleTestData.xls";
 excel.Workbook excelWorkBook = excelApp.Workbooks.Open(ExcelDataPath, 0, false, 5, "", "", false, excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
 excel.Sheets excelSheets = excelWorkBook.Worksheets;
 excel.Worksheet DataworkSheet = (excel.Worksheet)excelSheets.get_Item("Sheet1");
 System.String Search1 = ((excel.Range)DataworkSheet.get_Range("A1", Type.Missing)).Value2 as string;
 }

//运行测试的硒代码

public void StartTest()
{
selenium.open("");
selenium.WaitForPageToLoad("100000");
selenium.Type("gbqfif", search1);
selenium.Click("btnG");
selenium.WaitForPageToLoad("100000");

}

此代码让我只选择包含 search1 值的一行。但是,我需要对其进行迭代,使其继续运行 StartTest() 方法,直到输入 excel 表中的所有行 (50)。

任何帮助将不胜感激。

【问题讨论】:

  • 研究使用 ForEach 或 For Loop.. 也可以进行谷歌搜索..
  • 查看此链接并根据此示例了解如何使用 Interop,这将是一次很棒的学习体验。stackoverflow.com/questions/11593628/…
  • 感谢 DJ KRAZE,我查看了线程,但它太复杂而无法理解。我想要的只是遍历我无法执行的 excel 行。
  • 我刚刚在下面发布了 2 个示例。它并不像您想象的那么复杂.. 这是基于您对尝试的恐惧我能想到的最简单的示例.. 尝试示例并更改它为了适合您上面的代码示例,请告诉我这是否适合您.. 谢谢
  • 我将发布一个更简单的示例,您应该能够遵循......请尽量不要感到沮丧......确保在表格顶部添加必要的参考资料

标签: c# excel c#-4.0 selenium-rc selenium-webdriver


【解决方案1】:

这个答案可能对您有帮助,也可能对您没有帮助,但我会抓住机会发布 2 个您可以使用的代码示例。

示例 #1

using System;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel; 

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Excel.Application xlApp ;
            Excel.Workbook xlWorkBook ;
            Excel.Worksheet xlWorkSheet ;
            Excel.Range range ;

            string str;
            int rCnt = 0;
            int cCnt = 0;

            xlApp = new Excel.ApplicationClass();
            xlWorkBook = xlApp.Workbooks.Open("csharp.net-informations.xls", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

            range = xlWorkSheet.UsedRange;

            for (rCnt = 1; rCnt <= range.Rows.Count; rCnt++)
            {
                for (cCnt = 1; cCnt <= range.Columns.Count; cCnt++)
                {
                    str = (string)(range.Cells[rCnt, cCnt] as Excel.Range).Value2 ;
                    MessageBox.Show(str);
                }
            }

            xlWorkBook.Close(true, null, null);
            xlApp.Quit();

            releaseObject(xlWorkSheet);
            releaseObject(xlWorkBook);
            releaseObject(xlApp);
        }

        private void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch (Exception ex)
            {
                obj = null;
                MessageBox.Show("Unable to release the Object " + ex.ToString());
            }
            finally
            {
                GC.Collect();
            }
        } 

    }
}

示例 #2

FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);

//1. Reading from a binary Excel file ('97-2003 format; *.xls)
IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
//...
//2. Reading from a OpenXml Excel file (2007 format; *.xlsx)
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
//...
//3. DataSet - The result of each spreadsheet will be created in the result.Tables
DataSet result = excelReader.AsDataSet();
//...
//4. DataSet - Create column names from first row
excelReader.IsFirstRowAsColumnNames = true;
DataSet result = excelReader.AsDataSet();

//5. Data Reader methods
while (excelReader.Read())
{
    //excelReader.GetInt32(0);
}

//6. Free resources (IExcelDataReader is IDisposable)
excelReader.Close();

示例 #3

using (FileStream fileStream = File.Open(inputFilenames[0], FileMode.Open, FileAccess.Read))
{
    IExcelDataReader excelReader;
    if (Path.GetExtension(inputFilenames[0]) == ".xls")
        excelReader = Factory.CreateReader(fileStream, ExcelFileType.Binary);
    else
        excelReader = Factory.CreateReader(fileStream, ExcelFileType.OpenXml);

    excelReader.NextResult();
    while (excelReader.Name != this.Worksheet)
        excelReader.NextResult();                

    while (excelReader.Read())
    {
        if (FirstRowHasColumnNames)
        {
            FirstRowHasColumnNames = false;
        }
        else
        {
            //do stuff
            var test = GetColumnData(excelReader, 1);
        }
    }

    this.Save(outputFilename);
}

你也可以看看这个链接 Reading from Excel File

【讨论】:

  • 感谢 DJ KRAZE 的回答。我需要为示例 1 中的 while 循环内的第 1 行声明变量,以便变量根据迭代进行更改,我该怎么做?
  • 更具体..您指的是我的示例还是其他内容..使用您正在使用的循环编辑您的初始帖子,以便我可以从那里为您提供帮助..谢谢
  • 我指的是您的第一个示例,您如何将变量与行关联,以便它读取 while 循环中的所有行。
  • 我也收到 IExcelDataReader 错误。我需要添加什么引用才能将其视为对象?
  • 您是否在项目顶部添加了类似这样的 using 语句...这称为 Aliasing using Excel = Microsoft.Office.Interop.Excel;
【解决方案2】:

试试这个:-

        //Reading from a OpenXml Excel file (2007 format; *.xlsx)
        IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);

        // DataSet - Create column names from first row
        excelReader.IsFirstRowAsColumnNames = true;
        DataSet result = excelReader.AsDataSet();

        while (excelReader.Read())
        {    // Reading from row and get columns by index           
            var test = excelReader.GetString(1);

        }

【讨论】:

    猜你喜欢
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多