如何使用 Java 截屏自动化测试? [关闭]
Posted
技术标签:
【中文标题】如何使用 Java 截屏自动化测试? [关闭]【英文标题】:How to screencast automated tests using Java? [closed] 【发布时间】:2016-02-23 02:55:18 【问题描述】:我目前正在使用 Selenium 和 TestNg 和 Java 来自动化我的测试。我可以在测试运行时截取屏幕截图,但在某些情况下测试通过了,而理想情况下它应该失败。
那么,是否有任何 java 工具可以帮助记录正在运行的 Selenium 测试?
基本上,我想将屏幕投射添加到我的框架中。我在 web/SO 上搜索了很多,但找不到任何相关资源。欢迎任何帮助或建议。
【问题讨论】:
好的 2 个问题。您是指通过截屏录制视频吗?你在用网格吗? 是的。录制视频。不使用网格,而是使用内部框架。 不是您问题的完全答案,而是另一种想法。根据我的经验,即使以交互方式查看测试运行也可能无济于事,因为您看不到为什么会发生或没有发生(即您看到 UI,但看不到 html 的 DOM)。其次,很难将脚本与屏幕录制的内容同步,你只能假设。所以我发现更有帮助的是 1 - 在各种有问题的阶段保存 HTML 的内容 (driver.getPageSource()
);和 2 - 投资于日志记录,以明确测试每时每刻都在做什么以及为什么采用这条或其他路径
【参考方案1】:
您可以使用 java 代码录制您的测试视频,要运行此代码,您还需要将 jar 文件添加到您的项目中: 参考:Road to automation
@BeforeSuite
public void startRecording() throws Exception
GraphicsConfiguration gc = GraphicsEnvironment
.getLocalGraphicsEnvironment()
.getDefaultScreenDevice()
.getDefaultConfiguration();
this.screenRecorder = new ScreenRecorder(gc,
new Format(MediaTypeKey, MediaType.FILE, MimeTypeKey, MIME_AVI),
new Format(MediaTypeKey, MediaType.VIDEO, EncodingKey, ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE,
CompressorNameKey, ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE,
DepthKey, 24, FrameRateKey, Rational.valueOf(15),
QualityKey, 1.0f,
KeyFrameIntervalKey, 15 * 60),
new Format(MediaTypeKey, MediaType.VIDEO, EncodingKey, "black",
FrameRateKey, Rational.valueOf(30)),
null);
this.screenRecorder.start();
@AfterSuite
public void stopRecording() throws Exception
this.screenRecorder.stop();
【讨论】:
【参考方案2】:另一种选择是在BrowserStack 或Sauce Labs 上远程运行您的测试——这两个服务都提供了测试运行视频录制功能。
【讨论】:
我们已经使用 Saucelabs 远程运行测试,但它们最终对于常规测试套件运行来说成本很高。【参考方案3】:一种方法是在每个步骤之后进行屏幕截图,然后将它们组合成一个视频。 this questions 的答案为此任务提供了几个候选库。
另一个想法是在执行测试时使用一些浏览器插件实际进行截屏。但我不确定如何开始录制过程。可以使用 selenium 发送开始/停止录制的快捷方式,但我不确定这是否可行。 For such plugins I can't offer more than a google search
【讨论】:
感谢您的链接。我使用 Xuggler 创建了一个视频,但由于拍摄了多个屏幕截图,它无法与我的框架很好地集成。你能推荐一些自己录制视频的工具吗? 更新了我的答案,以反映我在这个方向上所能提供的一点点【参考方案4】:您可以查看由 Groupon 创建和使用的Selenium-Grid-Extras。他们已经构建了一个框架,该框架能够使用 Selenium Grid 完成您所描述的工作。我自己尝试过一次,似乎工作正常。也许它会满足您的需求。
【讨论】:
我会试一试。但是,我正在寻找一个截屏工具,而不是一个新框架。无论如何,谢谢。【参考方案5】:我将采取 thebobblob 的 的答案。我最近用 groupon's Selenium-Grid_Extras 配置了 selenium grid-hub 环境,它就像魅力一样。首次设置节点/集线器时,您需要回答几个问题。在某些时候运行java -jar Selenium-Grid-Extras-Jar.jar
后,它会询问您要录制的视频数量,默认为 20。之后,测试运行所有录制都可以通过 hub:port 访问,如图所示here
更进一步,您可以使用 groupon api 控制测试中的记录。你有灵活性。有一个开放的issue,但它让你可以选择通过休息服务来操纵它
【讨论】:
【参考方案6】:您可以在需要时使用 Robot 类从您的 java 代码中自动截取屏幕截图。它是 java 标准库的一部分。
在测试开始时创建机器人:
Rectangle screen = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
Robot robot = new Robot();
然后,当您需要截屏(测试中的每一步)时,只需调用:
BufferedImage capture = robot.createScreenCapture(screen);
ImageIO.write(capture, "jpg", new File("c:/some_distinct_name_designating_test_phase_and_number.jpg"));
【讨论】:
以上是关于如何使用 Java 截屏自动化测试? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章