【问题标题】:How to screencast automated tests using Java? [closed]如何使用 Java 截屏自动化测试? [关闭]
【发布时间】:2016-02-23 02:55:18
【问题描述】:

我目前正在使用 Selenium 和 TestNg 和 Java 来自动化我的测试。我可以在测试运行时截取屏幕截图,但在某些情况下测试通过了,而理想情况下它应该失败。

那么,是否有任何 java 工具可以帮助记录正在运行的 Selenium 测试?

基本上,我想将屏幕投射添加到我的框架中。我在 web/SO 上搜索了很多,但找不到任何相关资源。欢迎任何帮助或建议。

【问题讨论】:

  • 好的 2 个问题。您是指通过截屏录制视频吗?你在用网格吗?
  • 是的。录制视频。不使用网格,而是使用内部框架。
  • 不是您问题的完全答案,而是另一种想法。根据我的经验,即使以交互方式查看测试运行也可能无济于事,因为您看不到为什么会发生或没有发生(即您看到 UI,但看不到 HTML 的 DOM)。其次,很难将脚本与屏幕录制的内容同步,你只能假设。所以我发现更有帮助的是 1 - 在各种有问题的阶段保存 HTML 的内容 (driver.getPageSource());和 2 - 投资于日志记录,以明确测试每时每刻都在做什么以及为什么采用这条或其他路径

标签: java selenium testng screencast


【解决方案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】:

    另一种选择是在BrowserStackSauce 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"));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-10
        • 1970-01-01
        • 2011-05-06
        • 2011-07-21
        • 1970-01-01
        • 2017-01-05
        • 2019-07-05
        • 2010-09-18
        相关资源
        最近更新 更多