如何使用 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 截屏自动化测试? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 macOS 中,如何自动压缩截屏图片大小

Java Swing GUI 的自动化测试 [关闭]

Android自动化测试之——MonkeyRunner

编写第一个python selenium程序

自动化 GUI 测试 [关闭]

如何对 iOS 应用进行自动化测试? [关闭]