2016-02-26 2 views
0

У меня есть таблица на странице, и мне нужно прочитать значения из определенной ячейки в таблице. Я хочу записать эти значения в файл excel. Проблема в том, что для циклов цикла только один раз и значение записывается только для первой ячейки в excel. Я пробовал много разных циклов и искал в google, но не могу найти ответ. Пожалуйста, помогите. Вот мой код, чтобы написать, чтобы преуспеть:для циклов цикла только один раз при записи в excel

public static void setExcelFile(String Path, String SheetName) throws Exception { 

     try { 

      // Open the Excel file 

      FileInputStream ExcelFile = new FileInputStream(Path); 

      // Access the required test data sheet 

      ExcelWBook = new XSSFWorkbook(ExcelFile); 

      ExcelWSheet = ExcelWBook.getSheet(SheetName); 

     } catch (Exception e) { 

      throw (e); 

     } 

    } 

Это где я пишу Excel файл

 public static void setCellData(String Result, int RowNum, int ColNum) throws Exception { 

     try { 

      Row = ExcelWSheet.getRow(RowNum); 

      Cell = Row.getCell(ColNum, Row.RETURN_BLANK_AS_NULL); 

      if (Cell == null) { 

       Cell = Row.createCell(ColNum); 

       Cell.setCellValue(Result); 

      } else { 

       Cell.setCellValue(Result); 

      } 

      // Constant variables Test Data path and Test Data file name 

      FileOutputStream fileOut = new FileOutputStream(Constant.Path_TestData + Constant.File_TestData); 

      ExcelWBook.write(fileOut); 

      fileOut.flush(); 

      fileOut.close(); 



     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     } 

and here is my loop 
// 
ExcelUtils.setExcelFile(Constant.Path_TestData + Constant.File_TestData, "Item_Selection"); 

List<WebElement> li = driver.findElements(By.cssSelector("#offerVersionSkuListTable>table:nth-child(2)>tbody>tr>td#regularCost")); 

for (int j = 0; j<li.size(); j++) { 

    String cellValue = li.get(j).getText(); 
    List<String> valueList = new ArrayList<String>(); 
    valueList.add(cellValue); 

      for (int m = 0; m<valueList.size(); m++) { 

         int temp = row; 

     ExcelUtils.setCellData(valueList.get(m), temp, Constant.Col_TblRegCost); 
         temp++; 

        } 
       } 

Ошибка Я получаю это: org.openqa.selenium.StaleElementReferenceException: не Element в кэше - возможно, страница изменилась, поскольку он был посмотрел

После дальнейшего исследования я обнаружил, что если я удалить ExcelUtils.setCellData (valueList.get (м), температура, Constant.Col_TblRegCost);

Петля проходит успешно и правильно печатает значения из таблицы, но мне нужно написать эти значения, чтобы преуспеть. Кажется, что после написания первого значения в excel, для циклов петли снова, но не пишет ничего, чтобы превзойти второй раз. Можете ли вы помочь мне выяснить, почему?

+0

Где код для чтения данных со страницы? – Rehman

+0

Использование списка Я в основном получаю 2 ячейки под столбцом, которые я хочу. Затем я использую for loop для получения значения из списка и присваивания массиву, который затем используется для заполнения значения в ячейке excel. –

ответ

0

Объяснение тому, почему цикл цикла loop только один раз состоит в том, что List, который вы пытаетесь пропустить, содержит только одно значение. Когда цикл for выполняется через одно значение, цикл прерывается. То же самое, как если бы List имел пять значений, цикл пробивал бы их, а затем прерывал.

+0

Спасибо, что нашли время, чтобы ответить на мой вопрос. Когда я пытаюсь li.size(), он возвращает 2, поэтому означает, что он содержит 2 значения. –