【问题标题】:Getting NPE while trying to make screenshot in Selenium Java尝试在 Selenium Java 中制作屏幕截图时获取 NPE
【发布时间】:2020-02-22 13:27:58
【问题描述】:

我尝试了各种方法,但仍然获得了 NPE。请看下面的代码sn-ps。

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】:

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

    我假设 driveriTestResultcurrentDate 为空,无论出于何种原因。您可以插入一条日志消息以在使用它们之前打印出它们的值。

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

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

    【讨论】:

    • 感谢 Stefan 的帮助!我确实像你说的那样 - 把日志消息和驱动程序在截图的时候为空,这里 File screenshotFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);我将驱动程序变量的“静态”放在 TestBase 中,它有帮助!但是我听说过有关静态驱动程序的各种缺点(特别是并发执行)。你知道怎么解决吗?
    • 我不知道使用静态驱动是不是一个坏主意。我会检查该类的文档,如果没有这样的说明,那就去做吧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 2011-05-28
    • 2015-11-13
    • 2011-10-13
    • 2019-03-11
    • 1970-01-01
    相关资源
    最近更新 更多