第二次运行时的数据类型转换问题。 [英] Data type conversion issue on 2nd run.

查看:80
本文介绍了第二次运行时的数据类型转换问题。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

第一次代码运行平稳并在第二次加载用户时数据类型转换发生异常。粗体内循环的双到字符串转换,用于从B列读取密码1234.





 for(rCnt = 2; rCnt< = range.Rows.Count; rCnt ++)
{
for(cCnt = 1; cCnt< = range.Columns.Count; cCnt ++)
{
Loginname =(string)(range.Cells [rCnt,cCnt] as Excel.Range).Value;

< big>(for(cCnt = 2; cCnt< = range.Columns.Count; cCnt ++)
{
Password =(string)(range.Cells [ rCnt,cCnt] as Excel.Range).Value;
}< / big>
}







像文件一样的Excel文件





行ColumnA(用户名)B列(密码)

1 ab ab12

2 cd 1234



我的尝试:



< pre lang =c#>< pre>使用System; 
使用System.Text;
使用System .Collections.Generic;
使用System.Threading;
使用System.Linq;
使用Microsoft.VisualStudio.TestTools.UnitTesting;
使用Microsoft.CSharp;
使用OpenQA.Selenium;
使用OpenQA.Selenium.Firefox;
使用OpenQA.Selenium.Support.UI;
使用Excel = Microsoft.Office.Interop。 Excel的;


名称空间Reading_from_Excel
{
[TestClass]
公共类ReadingExcel
{
string Loginname;
string密码;
[TestMethod]
public void TestMethod1()
{


int rCnt;
int cCnt;
string workbookPath =e:\\Test \\Reading_from_Excel \\Reading_from_Excel \\ TestData.xlsx;

Excel.Application excelApp;
Excel.Workbook excelWorkbook;
Excel.Sheets excelSheets;
Excel.Worksheet excelWorksheet;
Excel.Range范围;

string currentSheet =DataSet;

excelApp = new Excel.Application();
excelWorkbook = excelApp.Workbooks.Add(workbookPath);
excelSheets = excelWorkbook.Sheets;
excelWorksheet =(Excel.Worksheet)excelSheets.get_Item(currentSheet);
range = excelWorksheet.UsedRange;

// Excel.Range myIDBinder =(Excel.Range)excelWorksheet.get_Range(B2,B2);
// string loginID = myIDBinder.Value.ToString();

// Excel.Range myPasswordBinder =(Excel.Range)excelWorksheet.get_Range(C2,C2);
// string usrPwd = myPasswordBinder.Value.ToString();

for(rCnt = 2; rCnt< = range.Rows.Count; rCnt ++)
{
for(cCnt = 1; cCnt< = range.Columns.Count ; cCnt ++)
{
Loginname =(string)(range.Cells [rCnt,cCnt] as Excel.Range).Value;

for(cCnt = 2; cCnt< = range.Columns.Count; cCnt ++)
{
Password =(string)(range.Cells [rCnt,cCnt] as Excel.Range).value的;
}
}


string baseURL =https://www.mycabtravel.com;

FirefoxDriver driver = new FirefoxDriver();

driver.Navigate()。GoToUrl(baseURL);
driver.FindElement(By.Id(loginlink))。Click();
driver.FindElement(By.Id(login-popup));
driver.FindElement(By.Id(userFieldDiv));
driver.FindElement(By.Id(headerSubView:inputUserName:input))。SendKeys(Loginname);
driver.FindElement(By.Id(passwordFieldDiv));
driver.FindElement(By.Id(headerSubView:inputPassword:input))。Clear();
driver.FindElement(By.Id(headerSubView:inputPassword:input))。SendKeys(Password);
driver.FindElement(By.Id(headerSubView:loginBtnId))。Click();
}
}
}
}

解决方案

Excel使用自动格式化单元格并将内容视为数值(位于第二行)。



只需使用文本将值作为文本获取的属性:

密码=( string )(range.Cells [rCnt] ,cCnt]  as  Excel.Range).Text; 


First time code runs smothly and load the user on 2nd time an exception occurs for data type conversion. Double to string conversion at bold inner loop for password reading 1234 from column B.


for (rCnt = 2; rCnt <= range.Rows.Count; rCnt++)
            {
                for (cCnt = 1; cCnt <= range.Columns.Count; cCnt++)
                {
                    Loginname = (string)(range.Cells[rCnt, cCnt] as Excel.Range).Value;

                    <big>(for (cCnt = 2; cCnt <= range.Columns.Count; cCnt++)
                    {
                        Password = (string)(range.Cells[rCnt, cCnt] as Excel.Range).Value; 
                    }</big>
                }




Excel File like View


Rows ColumnA(Username) Column B(Password)
1 ab ab12
2 cd 1234

What I have tried:

<pre lang="c#"><pre>using System;
using System.Text;
using System.Collections.Generic;
using System.Threading;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.CSharp;
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Support.UI;
using Excel = Microsoft.Office.Interop.Excel;


namespace Reading_from_Excel
{
    [TestClass]
    public class ReadingExcel
    {
        string Loginname;
        string Password;
        [TestMethod]
        public void TestMethod1()
        {
            
            
            int rCnt;
            int cCnt;
            string workbookPath = "e:\\Test\\Reading_from_Excel\\Reading_from_Excel\\TestData.xlsx";

            Excel.Application excelApp;
            Excel.Workbook excelWorkbook;
            Excel.Sheets excelSheets;
            Excel.Worksheet excelWorksheet;
            Excel.Range range;

            string currentSheet = "DataSet";
            
            excelApp = new Excel.Application();
            excelWorkbook = excelApp.Workbooks.Add(workbookPath);
            excelSheets = excelWorkbook.Sheets;
            excelWorksheet = (Excel.Worksheet)excelSheets.get_Item(currentSheet);
            range = excelWorksheet.UsedRange;

            //Excel.Range myIDBinder = (Excel.Range)excelWorksheet.get_Range("B2", "B2");
            //string loginID = myIDBinder.Value.ToString();

            //Excel.Range myPasswordBinder = (Excel.Range)excelWorksheet.get_Range("C2", "C2");
            //string usrPwd = myPasswordBinder.Value.ToString();

            for (rCnt = 2; rCnt <= range.Rows.Count; rCnt++)
            {
                for (cCnt = 1; cCnt <= range.Columns.Count; cCnt++)
                {
                    Loginname = (string)(range.Cells[rCnt, cCnt] as Excel.Range).Value;

                    for (cCnt = 2; cCnt <= range.Columns.Count; cCnt++)
                    {
                        Password = (string)(range.Cells[rCnt, cCnt] as Excel.Range).Value;
                    }
                }
                    

                string baseURL = "https://www.mycabtravel.com";

                FirefoxDriver driver = new FirefoxDriver();

                driver.Navigate().GoToUrl(baseURL);
                driver.FindElement(By.Id("loginlink")).Click();
                driver.FindElement(By.Id("login-popup"));
                driver.FindElement(By.Id("userFieldDiv"));
                driver.FindElement(By.Id("headerSubView:inputUserName:input")).SendKeys(Loginname);
                driver.FindElement(By.Id("passwordFieldDiv"));
                driver.FindElement(By.Id("headerSubView:inputPassword:input")).Clear();
                driver.FindElement(By.Id("headerSubView:inputPassword:input")).SendKeys(Password);
                driver.FindElement(By.Id("headerSubView:loginBtnId")).Click();
            }
        }
    }
}

解决方案

Excel used auto formatting for that cell and treated the content as numeric value (which it is in your second row).

Just use the Text property to get the value as text:

Password = (string)(range.Cells[rCnt, cCnt] as Excel.Range).Text; 


这篇关于第二次运行时的数据类型转换问题。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆