使用Selenium框架截屏时发生“ TypeError:rootNode为null”

时间:2019-09-16 01:59:22

标签: selenium selenium-webdriver geb

为什么在截屏时会发生此错误TypeError: rootNode is null?开发人员应修复HTML DOM结构中的问题,还是Selenium版本有问题?

截屏时发生此错误:

org.openqa.selenium.WebDriverException: TypeError: rootNode is null
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'linuxhost', ip: 'x.x.x.x', os.name: 'Linux', os.arch: 'amd64', os.version: '2.6.32-754.17.1.el6.x86_64', java.version: '1.8.0_202'
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities {acceptInsecureCerts: true, browserName: firefox, browserVersion: 60.8.0, javascriptEnabled: true, moz:accessibilityChecks: false, moz:headless: false, moz:processID: 6651, moz:profile: /tmp/rust_mozprofile.LlBKoU..., moz:useNonSpecCompliantPointerOrigin: false, moz:webdriverClick: true, pageLoadStrategy: normal, platform: LINUX, platformName: LINUX, platformVersion: 2.6.32-754.17.1.el6.x86_64, rotatable: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}}
Session ID: 1afd06ed-4939-42c9-9d1d-51fa113dfe97
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187)
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122)
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:609)
    at org.openqa.selenium.remote.RemoteWebDriver.getScreenshotAs(RemoteWebDriver.java:295)

依赖版本:

Firefox:Mozilla Firefox 60.8.0 壁虎:0.23.0 硒:3.141.59 geb-spock:3.0.1

2 个答案:

答案 0 :(得分:0)

我只是尝试了,对我有用。

  • Firefox:69.0(64位)
  • Gecko驱动程序:v0.25.0
  • Webdriver:3.141.59
FirefoxDriver fdriver;
System.setProperty("webdriver.gecko.driver", "/path/geckodriver");
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability("marionette", true);

FirefoxOptions foptions = new FirefoxOptions();
foptions.merge(capabilities);
fdriver = new FirefoxDriver(foptions);
fdriver.get("http://demo.guru99.com/selenium/guru99home/");

File src = ((TakesScreenshot) fdriver).getScreenshotAs(OutputType.FILE);
try {
    // now copy the screenshot to desired location using copyFile //method
    FileUtils.copyFile(src, new File("path/fchart.png"));
    fdriver.quit();
}
catch (IOException e) {
    System.out.println(e.getMessage());
}

答案 1 :(得分:0)

我发现了为什么发生“ TypeError:rootNode为null”错误。

如果测试试图在完全下载html页面源之前尝试截取屏幕截图,则会发生此错误。

添加动态等待页面完全加载的等待确实解决了此问题。

  waitFor {
         ((JavascriptExecutor)driver).executeScript("return document.readyState").equals("complete")
      }

takeScreenshot()