java.lang.IllegalArgumentException:表索引(26)超出范围(0..2)

当我试图将数据写入Excel表,我得到以上例外。 请参考我的问题的解决scheme。

请在下面find我的代码:

import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; import java.util.concurrent.TimeUnit; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.ui.Select; public class CityBusRoutes { static String routeName; static String routeList; public static void main(String[] args) throws IOException { System.setProperty("webdriver.chrome.driver", "D://Selenium//Selenium Drivers//chromedriver_win32//chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("http://www.onefivenine.com/busRoute.dont?method=findBusRoute"); driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); Select ddl1 = new Select(driver.findElement(By.id("cityId"))); List<WebElement> elementCount = ddl1.getOptions(); int citiesCount = elementCount.size(); for (int i = 1; i <= citiesCount; i++) { ddl1.selectByIndex(i); Select ddl2 = new Select(driver.findElement(By.id("routeId"))); List<WebElement> element = ddl2.getOptions(); int routesCount = element.size(); for (int j = 1; j <= routesCount; j++) { ddl2.selectByIndex(j); routeName = driver.findElement(By.xpath("html/body/table/tbody/tr[3]/td[2]/div[2]/table[2]")).getText(); routeList = driver .findElement(By.xpath("html/body/table/tbody/tr[3]/td[2]/div[2]/table[3]/tbody/tr/td[1]")) .getText(); FileInputStream input = new FileInputStream("D:\\Citybus-Routes-List.xlsx"); XSSFWorkbook wBook = new XSSFWorkbook(input); XSSFSheet sh = wBook.getSheetAt(citiesCount); int rowCount = sh.getLastRowNum() - sh.getFirstRowNum(); Row newRow = sh.createRow(rowCount + 1); newRow.createCell(0).setCellValue(routeName); newRow.createCell(1).setCellValue(routeList); input.close(); FileOutputStream output = new FileOutputStream("D:\\Citybus-Routes-List.xlsx"); wBook.write(output); wBook.close(); output.close(); } driver.quit(); } } } 

以下是我的StackTrace:

 Exception in thread "main" java.lang.IllegalArgumentException: Sheet index (26) is out of range (0..3) at org.apache.poi.xssf.usermodel.XSSFWorkbook.validateSheetIndex(XSSFWorkbook.java:1236) at org.apache.poi.xssf.usermodel.XSSFWorkbook.getSheetAt(XSSFWorkbook.java:991) at CityBusRoutes.main(CityBusRoutes.java:86) 

完成一个j循环迭代后,显示如下错误

 Exception in thread "main" org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document (Session info: chrome=60.0.3112.90) (Driver info: chromedriver=2.29.461591 (62ebf098771772160f391d75e589dc567915b233),platform=Windows NT 6.1.7600 x86_64) (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 30 milliseconds For documentation on this error, please visit: http://seleniumhq.org/exceptions/stale_element_reference.html 

问题是你正在试图获取尚未创build的工作表。 尝试更换

 XSSFSheet sh = wBook.getSheetAt(citiesCount); 

 XSSFSheet sh = wBook.createSheet(String.valueOf(i)); //change sheet name if needed