尝试在Selenium Java中制作屏幕截图时获取NPE

问题描述 投票:0回答:1

我已经尝试了各种方法,但是仍然获得了NPE。请参阅下面的代码段。

TestBase.class

public WebDriver initializeDriver() { // nothing special }

public void takeScreenshot(String testResult) {
    try {
      File screenshotFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
      FileUtils.copyFile(screenshotFile, new File(
        "//Users//roman//Desktop//MainProject//SeleniumJava//ScreenshotsFailure//"
        + testResult + "_" + "screenshot.png"));

      //
      // System.getProperty("user.dir")

      log.info("Screenshot of " + testResult + "'s failure has been created successfully");
    } catch (IOException e) {
      e.printStackTrace();
      log.error("Screenshot of " + testResult + "'s failure has not been created");
    }
  }

Listeners.class

public class Listeners implements ITestListener {
  TestBase testBase = new TestBase();
  Date currentDate;

  @Override
  public void onTestFailure(ITestResult iTestResult) {
        currentDate = new Date();
        testBase.takeScreenshot(iTestResult.getName() + "_" + currentDate.getTime());
  }

HomePageTest.class

          @Test
          void my() {
            Assert.assertEquals(driver.getTitle(), "adb"); 
// intentionally cause False to take a screenshot of this failure
          }

因此发生NPE的是这两行:

  File screenshotFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);

testBase.takeScreenshot(iTestResult.getName() + "_" + currentDate.getTime());

如何解决?提前非常感谢!

java selenium-webdriver automated-tests testng ui-automation
1个回答
0
投票

NPE不能在两行中发生。总是只有一行引发异常。打印并显示异常的堆栈跟踪。

出于任何原因,我都假定driveriTestResultcurrentDate为空。您可以插入一条日志消息以打印出它们的值,然后再使用它们。

您也可以插入换行符,然后堆栈跟踪将准确告诉您哪个部分具有空指针:

testBase.takeScreenshot(
      iTestResult.getName() + "_" + 
      currentDate.getTime());
© www.soinside.com 2019 - 2024. All rights reserved.