Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何读取excel工作表的所有行并使用C在Selenium测试脚本中运行?_C#_Excel_C# 4.0_Selenium Rc_Selenium Webdriver - Fatal编程技术网

C# 如何读取excel工作表的所有行并使用C在Selenium测试脚本中运行?

C# 如何读取excel工作表的所有行并使用C在Selenium测试脚本中运行?,c#,excel,c#-4.0,selenium-rc,selenium-webdriver,C#,Excel,C# 4.0,Selenium Rc,Selenium Webdriver,我需要帮助读取excel工作表中的所有行作为selenium测试用例中的测试数据 我只能用以下代码读取excel工作表的一行 //硒的建立试验 public void SetupTest() { selenium = new DefaultSelenium("localhost", 4444, "*googlechrome", "http://www.google.com/"); selenium.Start(); verificatio

我需要帮助读取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;
 }
//运行测试的selenium代码

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

}
这段代码允许我只选择一行,其中包含search1的值。但是,我需要以这样一种方式对其进行迭代:它将继续运行StartTest方法,直到输入excel工作表中的所有行50为止


任何帮助都将不胜感激。

这个答案可能对您有帮助,也可能对您没有帮助,但我将借此机会发布两个您可以使用的代码示例

例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();
            }
        } 

    }
}
例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 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);

        }

研究如何使用ForEach或For循环。。也做一个谷歌搜索..看看这个链接,学习如何使用Interop基于这个例子,这将是一个伟大的学习经验。。谢谢DJ KRAZE,我看了这条线索,但太复杂了,无法理解。我只想在excel行上循环,但我做不到。我刚刚在下面发布了两个示例。。这并不像你想象的那么复杂。。这是基于你对尝试的恐惧,我能想到的最简单的例子。。尝试该示例,并将其更改为适合上面的代码示例。请让我知道这是否适用于您。。谢谢我将发布一个更简单的例子,你应该能够遵循。。请不要灰心。。。确保在表格顶部添加必要的参考资料,同时感谢DJ KRAZE的回答。在示例1中,我需要为while循环中的第1行声明变量,以便变量随着迭代而变化,我如何才能做到这一点?更具体点。。你指的是我的例子还是别的什么。。用你正在使用的循环编辑你的初始帖子,这样我就可以从那里帮助你了。。谢谢,我指的是你的第一个例子,你如何将一个变量与行相关联,这样它就可以读取while循环中的所有行。我需要添加什么引用才能将其视为对象?您是否在项目顶部添加了类似于以下内容的using语句..这称为使用Excel的别名=Microsoft.Office.Interop.Excel;
        //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);

        }