当前位置: 首页 > 知识库问答 >
问题:

尝试使用Selenium从Excel文件读取数据时出现NullPointerException

仲孙兴旺
2023-03-14

我正在使用Maven创建一个Selenium项目,其中我试图从Excel文件(xlsx)中读取“username”和“password”。

这是密码-

public class NewTest {

WebDriver driver;


@BeforeTest
public void setup() {
    System.setProperty("webdriver.gecko.driver",Util.FIREFOX_PATH);
    driver = new FirefoxDriver();
    driver.navigate().to(Util.BASE_URL);
}
    

public void readExcel(String filePath, String fileName, String sheetName) throws IOException, InterruptedException {
    File file = new File(filePath+"\\"+fileName);
    FileInputStream fs = new FileInputStream(file);
    Workbook workBook = null;
    String fileExtensionName = fileName.substring(fileName.indexOf("."));
    if (fileExtensionName.equals(".xlsx")) {
        workBook = new XSSFWorkbook(fs); 
    }
    if (fileExtensionName.equals(".xls")) {
        workBook = new HSSFWorkbook(fs);
    }
    Sheet sheet = workBook.getSheet(sheetName);
    int rowCount = sheet.getLastRowNum();
    for (int i = 0; i <= rowCount; i++) {
        Row row = sheet.getRow(i);
        for (int j = 0; j < row.getLastCellNum(); j++) {
            
            driver.findElement(By.xpath("//input[@type='text']")).sendKeys(sheet.getRow(i).getCell(j).getStringCellValue());
            driver.findElement(By.xpath("//input[@type='password']")).sendKeys(sheet.getRow(i).getCell(j+1).getStringCellValue());
            driver.findElement(By.xpath("//input[@type='submit']")).click();
            Thread.sleep(5000);
            String actualTitle = driver.getTitle();
            String expectedTitle = "Home Page";
            SoftAssert sassert = new SoftAssert();
            sassert.assertEquals(actualTitle, expectedTitle);
            sassert.assertAll();
            break;
        }
    }
    
}

@Test
public static void callingFunction() throws IOException, InterruptedException {
    NewTest newTest = new NewTest();
    String filePath = "C:\\Users\\Sitesh\\Desktop";
    newTest.readExcel(filePath, "Book2.xlsx", "Sheet1");
}
}
FAILED: callingFunction
java.lang.NullPointerException
at Guru99_Bank.Guru99_Bank.NewTest.readExcel(NewTest.java:59)
at Guru99_Bank.Guru99_Bank.NewTest.callingFunction(NewTest.java:78)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:132)
at org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:599)
at org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:174)
at org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:46)
at org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:822)
at org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:147)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128)
at java.util.ArrayList.forEach(Unknown Source)
at org.testng.TestRunner.privateRun(TestRunner.java:764)
at org.testng.TestRunner.run(TestRunner.java:585)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:384)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:378)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:337)
at org.testng.SuiteRunner.run(SuiteRunner.java:286)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:96)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1218)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1140)
at org.testng.TestNG.runSuites(TestNG.java:1069)
at org.testng.TestNG.run(TestNG.java:1037)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

我得到的错误在这一行:

Driver.FindElement(By.XPath(“//input[@type='text']”)).SendKeys(Sheet.GetRow(i).GetCell(j).GetStringCellValue());

共有1个答案

法烨烨
2023-03-14

问题-空指针异常

您正在尝试访问不可用的单元格

sheet.getRow(i).getCell(j+1)

这是试图从当前单元格移到下一个单元格,但该单元格不存在

//rows
for (int i = 0; i < sheet.getPhysicalNumberOfRows(); i++) {
        Row row = sheet.getRow(i);
        //cells
        for (int j = 0; j < row.getPhysicalNumberOfCells(); j++) {
            // gettingrow cell
            Cell cell = row.getCell(j);
            driver.findElement(By.xpath("//input[@type='text']")).sendKeys(cell.getStringCellValue());
            driver.findElement(By.xpath("//input[@type='password']")).sendKeys(cell.getStringCellValue());
            driver.findElement(By.xpath("//input[@type='submit']")).click();
            Thread.sleep(5000);
            String actualTitle = driver.getTitle();
            String expectedTitle = "Home Page";
            SoftAssert sassert = new SoftAssert();
            sassert.assertEquals(actualTitle, expectedTitle);
            sassert.assertAll();
        }
    }
public void readExcel(String filePath, String fileName, String sheetName, WebDriver driver)
newTest.readExcel(filePath, "Book2.xlsx", "Sheet1", driver);

而且会奏效的。

 类似资料:
  • 这是我的代码 错误如下: 线程“main”中出现异常Java . lang . nosuchfielderror:RAW _ XML _ FILE _ HEADER at org . Apache . poi . poi fs . FILE system . FILE magic .(FILE magic . Java:42)at org . Apache . poi . open XML 4j

  • 我试图使用Selenium从代码中获得jpg。我已经设法找到了链接点击获得我的jpg所在的位置。(真倒霉!我刚接触硒)。所有的窗户都随着它的点击而打开。与刮刮乐相比,它真的很慢,所以如果有人能告诉我一个更快的方法,那就太好了。 我试图搜索的网站是www.rosegal.com。我正在刮的类别是大尺寸的背心。这第一页有60个产品在它。如果单击这些产品,它会将您带到一个产品页面,在该页面上您可以选择所

  • 问题内容: 在尝试使用apache poi读取Excel 2007文件.xlsx文件扩展时出现问题: 此行请给我一个例外 ,什么原因可能导致此错误? 问题答案: 您需要在类路径中包含一个名为“ your_location_of_poi \ poi-xx \ ooxml-lib \” 的jar文件 。 注意:是您正在使用的poi的版本,并且是上述文件夹下该jar文件的版本号

  • 我想读一个属性文件,如下所示: 但当我尝试这样做时,我会出现一个错误: 线程“main”java中出现异常。lang.NullPointerException:inStream参数在java中为null。base/java。util。物体。java上的requirennoull(Objects.java:246)。base/java。util。财产。在majorbot加载(Properties.j

  • 我正在尝试读取文本文件,然后对其应用一些数据验证规则。添加规则后,我将数据写回Excel文件。 但是当尝试将其写回excel文件时,我收到了这个错误: 线程“主”org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException:保存失败:保存包时发生错误:部分 /docProps/app.xml无法保存在流中,编组器org.apache.p

  • 我试图读取xsd文件以验证模式。 我的架构位于位置 我的类读取这个文件也在< code > x/y/z/read schema . Java 中 它们都装在我的罐子里。 我试图在中读取这个文件,如下所示,其中名称是但url返回为null? 我做错什么了吗?