selenium + java 屏幕截图

我使用selenium 进行自动化测试,驱动使用的chrome浏览器的驱动,在用到selenium 的截屏功能的时候发现一个问题,就是截图的结果只是当前页面显示出来的部分,并不是整个页面的全部内容。

但是之前在使用phantomjs进行截图的时候,就可以完全把整个界面,超过一屏幕的部分全部截取下来,

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

截屏代码使用的是这个。

第二个问题:
我看其他语言或者驱动实现截屏功能的时候,有一个单元素的截图功能,

WebElement element = driver.findElement(By.id("header"));
File file1 = element.getScreenshotAs(OutputType.FILE);

但是这个在 java + selenium + chrome 浏览器下报错,
报错内容如下:

Exception in thread "main" org.openqa.selenium.UnsupportedCommandException: unknown command: session/d1d93b03a5610dccfa22f775a7dd5bad/screenshot/0.34969357638110843-1
Command duration or timeout: 8 milliseconds
Build info: version: '2.53.1', revision: 'a36b8b1cd5757287168e54b817830adce9b0158d', time: '2016-06-30 19:26:09'
System info: host: 'DESKTOP-L6804PP', ip: '192.168.99.156', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_131'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, networkConnectionEnabled=false, chrome={chromedriverVersion=2.34.522940 (1a76f96f66e3ca7b8e57d503b4dd3bccfba87af1), userDataDir=C:\Users\zzg\AppData\Local\Temp\scoped_dir54824_4941}, takesHeapSnapshot=true, pageLoadStrategy=normal, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=64.0.3282.167, platform=XP, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true, setWindowRect=true, unexpectedAlertBehaviour=}]
Session ID: d1d93b03a5610dccfa22f775a7dd5bad
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:678)
    at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:327)
    at org.openqa.selenium.remote.RemoteWebElement.getScreenshotAs(RemoteWebElement.java:447)

请大佬给指明一下是哪里的问题!

阅读 12.2k
1 个回答

对于 Selenium 本身不是很熟,但或许以下两个来自 StackOverFlow 的回答可以帮到你:

1、截取整个页面,核心思路是添加 Chrome WebDriver 参数。
https://stackoverflow.com/que...

2、获取指定元素的截图,这个相对复杂一点,核心思路就是截完整图之后,用图片处理类根据需要获取的元素位置再进行图片处理。
https://stackoverflow.com/que...

如果以上两个回答解决了你的问题,记得给 StackOverFlow 原作者一个 upvote。:)

Update on 2018-03-12: 根据题主的测试反馈,第一个答案提供了 full screen (全屏)的截图方案,并不是 full web page。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题