Получение NPE при попытке сделать скриншот в Selenium Java - PullRequest
0 голосов
/ 22 февраля 2020

Я пробовал разные вещи, но всё ещё получаю 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());

Как это можно исправить ? Большое спасибо заранее!

1 Ответ

1 голос
/ 22 февраля 2020

NPE не может встречаться в двух строках. Всегда есть ровно одна строка, которая выдает исключение. Распечатайте и покажите трассировку стека вашего исключения.

Я предполагаю, что driver и iTestResult или currentDate равны нулю по любой причине. Вы можете вставить сообщение журнала, чтобы распечатать их значения, прежде чем они будут использованы.

Вы также можете вставить разрывы строк, тогда трассировка стека точно скажет, какая часть имеет нулевой указатель:

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