2013-08-20 2 views
-3

Я пытаюсь написать код, который считывает данные из файла excel. Файл excel имеет 7 столбцов, а первые 5 столбцов состоят из данных типа строки, а последние 2 столбца состоят из данных целочисленного типа. Теперь я хочу отправить эти данные в форму веб-страницы.Запрос на отправку целых чисел в текстовое поле

Проблема с моим кодом: Мой код возвращает все данные excel в виде строк, где мне нужны только первые 5 столбцов в виде строк и последние 2 столбца в виде целых чисел. Кроме того, хотя все поля формы веб-страницы являются текстовыми полями, я не уверен, почему поля генерируют ошибку «Недопустимый формат» при отправке строковых данных. Не могли бы вы рассмотреть приведенный ниже код и помочь мне в решении этой проблемы.

@Test общественный недействительный SampleCustNumFormat() бросает исключение {

String vURL; 
    String vEmail; 
    String vPswd; 
    String vCnfmPswd; 
    int vCustAccNum; 
    int vZipCode; 
    long iWait; 
    int Size; 
    // Read Test Data from Excel 

    String xlPath = "C:\\SCE docs\\Automation\\InputData_Registration.xls"; 
    ArrayList<CustomerData> customerData = getExcelData(xlPath,"AccountHolderRegistration"); 
    System.setProperty("webdriver.chrome.driver", "c:\\chromedriver.exe"); 
     driver = new ChromeDriver(); 
     driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
     iWait=3000; 

     for (int k=1; k<xRows; k++) 
     { 


       driver.navigate().to(vURL); 
       driver.findElement(By.linkText("Register")).click(); 
       driver.findElement(By.id("emailInputBox_input")).clear(); 
       driver.findElement(By.id("emailInputBox_input")).sendKeys(vEmail); 
       driver.findElement(By.id("pwdInputBox_input")).clear(); 
       driver.findElement(By.id("pwdInputBox_input")).sendKeys(vPswd); 
       driver.findElement(By.id("confirmpwd_input")).clear(); 
       driver.findElement(By.id("confirmpwd_input")).sendKeys(vCnfmPswd); 
       driver.findElement(By.id("radio1")).click(); 
       driver.findElement(By.id("accountInputBox_input")).sendKeys(Integer.toString(vCustAccNum)); 
       driver.findElement(By.id("accountInputBox_input")).clear(); 
       driver.findElement(By.id("zipcodeBox_input")).sendKeys(Integer.toString(vZipCode)); 
       driver.findElement(By.id("zipcodeBox_input")).clear(); 
       driver.findElement(By.id("terms3")).click(); 
     /*  driver.findElement(By.id("registerButton_label")).click(); 
       driver.findElement(By.id("continueButton_label")).click(); 
       Thread.sleep(iWait); 
      */       

     } 




} 

// Custom Methods 


public ArrayList<CustomerData> getExcelData(String Path, String shtName) 
     throws Exception { 
    ArrayList<CustomerData> customerDataList = new ArrayList<CustomerData>(); 

    File myxl = new File(Path); 
    FileInputStream fi = new FileInputStream(myxl); 
    HSSFWorkbook myWB = new HSSFWorkbook(fi); 
    HSSFSheet mySheet = myWB.getSheet(shtName); 

    xRows = mySheet.getLastRowNum() + 1; 
    xCols = mySheet.getRow(0).getLastCellNum(); 

    for (int i = 1; i < xRows; i++) { 
     HSSFRow row = mySheet.getRow(i); 

     CustomerData customerDetails = new CustomerData(); 
     customerDetails.setvURL(row.getCell(1).getStringCellValue()); 
     customerDetails.setvEmail(row.getCell(2).getStringCellValue()); 
     customerDetails.setvPswd(row.getCell(3).getStringCellValue()); 
     customerDetails.setvCnfmPswd(row.getCell(4).getStringCellValue());   
     customerDetails.setvCustAccNum((int) row.getCell(5).getNumericCellValue()); 
     customerDetails.setvZipCode((int) row.getCell(6).getNumericCellValue()); 
     customerDataList.add(customerDetails); 
     System.out.println("row 2: "+row.getCell(3)); 
    // row.getCell(2).setCellValue(convertFormatCustNo(customerDetails.getCustNo())); 


    } 
    return customerDataList; 

} 
+2

Вы, очевидно, не «написали код». Вы жалуетесь, что все данные возвращаются в виде строк, и у вас есть метод, явно называемый 'cellToString()'. Как вы думаете, что делает этот метод? Метод 'getExcelData()' возвращает массив 'String [] []', как вы ожидаете, что он вернет что-то еще? Очевидно, вы ничего не пишете, и вы ожидаете, что мы дадим вам код, даже не пытаясь сделать что-либо самостоятельно. И выход не относится даже к этому коду. В коде нет ни одной строки, которая выводит 'Some Data' – jbx

+0

. Я не жалуюсь, я знаю, какой результат я получаю, и я хочу знать, как преобразовать последние два столбца из строк в целые числа, прежде чем вводить его в сеть стр. Я уже опубликовал еще один вопрос, и они попросили меня опубликовать новый вопрос, из-за которого я опубликовал этот вопрос. – user1564024

+0

приведенный выше мой фактический код, который возвращает строковые данные и расширение для преобразования в целое число, которое я не публиковал, потому что ясное понимание для человека, который предположительно отвечает на мой вопрос. И в отношении вывода я удалил заявления печати. – user1564024

ответ

1

Прежде всего вы должны разработать классы правильно отражать модель данных вы имеете дело с, а не рассматривать все как String.

Вы можете просто создать класс, который отражает одну строку в вашем первенствует лист:

public class AccountHolder 
{ 
    private String id; 
    private String url; 
    private String email; 
    private String password; 
    private String confirmPassword; 
    private int accountNumber; 
    private int zipCode; 

    public AccountHolder() 
    { 
    } 

    public String getId() 
    { 
    return id; 
    } 

    public void setId(id) 
    { 
    this.id = id; 
    } 

    //todo: do the rest of the fields in the same way with public getters and setters 

} 

Затем изменить getExcelData() вернуть AccountHolder[], а не просто набор String объектов.

Наконец изменить getExcelData() в цикле:

AccountHolder[] accountHolders = new AccountHolder[xRows]; 

for (int i=0;i<xRows;i++) 
{ 
    HSSFRow row = mySheet.getRow(i); 

    AccountHolder accountHolder = new AccountHolder(); 
    accountHolder.setId(row.getCell(0).getStringCellValue()); 

    //todo: the rest of the String fields of AccountHolder 

    accountHolder.setAccountNumber(row.getCell(5).getNumericCellValue()); 
    accountHolder.setZipCode(row.getCell(6).getNumericCellValue()); 

    accountHolders[i] = accountHolder; 
} 

return accountHolders; 

Таким образом, у вас есть AccountHolder экземпляра для каждой строки, с каждым поле имеет свой соответствующий тип.

+0

Я использовал вышеупомянутый подход, используя arraylist, но код просит меня инициализировать переменные, которые определены в коде, и если это сделать, что мой код бросает исключение из null-точки , Не могли бы вы просмотреть обновленный код. – user1564024

+0

Кроме того, если я не конвертирую CustomerNum и Zipcode в строки, которые являются целыми числами, Sendkeys of selenium не принимает. Следовательно, я не могу двигаться дальше. Не могли бы вы помочь мне в решении этой проблемы. – user1564024

+0

Вы никогда не упоминали Селен нигде в своем вопросе. Просто измените все поля на String и используйте метод 'cellToString()', который вы опубликовали ранее. – jbx

Смежные вопросы