Muhammad Islam Manzoor Ответов: 1

Проблема преобразования типов данных при 2-м запуске.


При первом запуске кода smothly и загрузке пользователя во 2-й раз возникает исключение для преобразования типа данных. Двойное преобразование в строку при полужирном внутреннем цикле для чтения пароля 1234 из столбца 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 Как посмотреть


Строки ColumnA (Имя Пользователя) Столбец B (Пароль)
1 ab ab12
2 cd 1234

Что я уже пробовал:

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

1 Ответов

Рейтинг:
12

Jochen Arndt

Excel использовал автоматическое форматирование для этой ячейки и обрабатывал содержимое как числовое значение (которое находится во второй строке).

Просто используйте Text свойство для получения значения в виде текста:

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