2012-08-01 20 views
0

我需要幫助讀取Excel表格中的所有行作爲我的硒測試用例中的測試數據。如何讀取Excel表格的所有行並使用C#在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)。

任何幫助,將不勝感激。

+0

考慮使用一個foreach或For循環..做谷歌搜索以及.. – MethodMan 2012-08-01 17:04:21

+0

看看這個鏈接並學習如何使用基於這個例子的Interop它將是一個很好的學習經驗.. http://stackoverflow.com/questions/11593628/reading-data-from-excel-spreadsheet-cannot-perform-runtime-binding- on-a-null-r – MethodMan 2012-08-01 17:07:38

+0

感謝DJ KRAZE,我看了一下這個帖子,但它太複雜了。我只想循環使用我無法做到的excel行。 – seleniumlover 2012-08-01 17:09:48

回答

0

這個答案可能會或可能不會幫助你,但我要把握機會,並張貼的代碼,您可以使用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

+0

感謝DJ KRAZE爲您解答。我需要在示例1中爲while循環聲明第1行的變量,以便變量根據迭代進行更改,我該怎麼做? – seleniumlover 2012-08-01 17:18:59

+0

更具體..你指的是我的例子或其他東西..編輯您的初始職位與您正在使用的循環,以便我可以幫助你從那裏..謝謝 – MethodMan 2012-08-01 17:22:42

+0

我指的是你的第一個例子,如何你可以將一個變量關聯到該行,以便它讀取while循環中的所有行。 – seleniumlover 2012-08-01 17:30:43

0

試試這個: -

 //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); 

     } 
相關問題