Selenium或WebDriver的家庭视频。或者,如果您有Java,测试失败和有一点时间,则比记录屏幕

在工作中,我们决定为多个Web应用程序自动化测试。除了这些信息,当测试失败时,我还想看看页面如何看待这个悲伤的时刻。



我已经很长一段时间没有拿起Checker和Selenium了,所以我不得不在Internet上挖一点东西,寻找在这种情况下聪明的人正在做什么。最终适合我的解决方案汇集了多种技术:Java + Selenium + Junit + Allure + ffmpeg + VideoRecorder(由Pirogov提供)。但是,由于我仍然诚实地进行挖掘,试图找到解决问题的最佳方法,因此我有几种其他更简单的挖掘方法-您可以如何截屏。



由于发现的信息散布在整个Internet上,因此我认为将一个简短的摘要放在一个地方会很好。实际上,这篇文章对初学者来说只是一个小介绍。那些关心相同问题的人-用眼睛看自动测试抛出红色标记时存在或不存在的东西。



让我们看看我们被要求做什么。



如何拍摄屏幕截图



对于我们的问题,可以想到的第一个选择是获取屏幕截图。那些。猜测测试失败的那一刻,并获得一张照片。通常,您可以为每个操作拍摄屏幕截图。或以一定的频率(例如,每半秒钟一次)截屏。



方法1. Selenium



由于许多测试是用Selenium / WebDriver编写的,因此使用其方法将是明智的。例如:



WebDriver driver = new FirefoxDriver(); driver.get("http://www.google.com/"); 
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("c:\\tmp\\screenshot.png"));


方法2.硒化物



第二种方法是对硒使用包装纸,例如硒化物。该框架简化了驱动程序的工作,除其他外,当发生错误时自动生成屏幕截图。默认情况下,屏幕截图存储在“测试结果/报告”文件夹中。



方法3。java.awt.Robot



下一步是使用一般标准的Java类(从1.3版开始)直接与操作系统一起使用。一个类似代码看起来的小例子:



BufferedImage image = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize())); 
ImageIO.write(image, "png", new File("/screenshot.png"));


方法4.使用外部程序



查找一个需要屏幕截图并使用其API的程序。当然,有这样一种方法,但是我什至没有朝这个方向进行挖掘。



方法5.使用云技术



如果您根本不想打扰,而且金钱烧伤了您的雇主的大腿,那么您可以切换到在云服务中运行测试。通常,此类服务的基础结构使您可以进行日志记录,为不同操作系统和不同浏览器上的运行情况创建报告。包括通过测试的视频。我没有特别提及服务-以免做广告。一切都用谷歌搜索。



如何获取屏幕视频



有了视频,它会稍微复杂一些。您不能只是拍摄和拍摄视频。需要跳舞一点。



跳舞的主要方式有两种:



  • 制作屏幕截图并将其转换为视频(以下称为方法1)
  • 立即拍摄视频(以下为方法2和3)


方法1.将图片手动转换为视频(以ffmpeg为例)



要获取视频,您可以每半秒拍摄一次屏幕截图,然后将其组合为一个视频。例如,使用ffmpeg库(https://ffmpeg.org/)



对于具有PNG扩展名的文件位于同一目录中,该命令可能如下所示:



ffmpeg -framerate 1 -pattern_type glob -i '*.png' \ -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4


您可以添加自动化,例如,使脚本在测试结束时运行类似的命令。



方法2。录像机-蒙特屏幕录像机



创建视频的另一种方法是绕过屏幕截图创建步骤,并立即使用录像机。



我遇到的第一个是Monte Screen Recorder,下面是为此记录器使用Java包装器的一个小示例(https://github.com/stephenc/monte-screen-recorder):



 GraphicsConfiguration gc = GraphicsEnvironment
            .getLocalGraphicsEnvironment()
            .getDefaultScreenDevice()
            .getDefaultConfiguration(); 
         
    screenRecorder = new ScreenRecorder(gc,
            gc.getBounds(),
            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,
            new File(targetFolder));
    screenRecorder.start();


该录像机的缺点是您需要在计算机上安装TSC编解码器才能观看视频(https://www.techsmith.com/products.html)。



方法3.记录器-ffmpeg



我遇到第二个记录器是最著名且使用最广泛的ffmpeg库。我已经给出了将其转换为视频的示例。该库有几个包装器。我最终在github.com/SergeyPirogov/video-recorder-java上安顿下来



这个库吸引了我,因为这些更新是相当新的-这意味着该项目仍然有效,并且人们希望可以尽快修复这些错误。此外,包装程序是专门为支持我们的问题而编写的,即在测试失败时拍摄视频。最简单的使用方法是Java批注视频(名称=“ second_test”)



例如:



   @Test
    @Video(name = "second_test")
    public void videoShouldHaveNameSecondTest(){
        Thread.sleep(1000);
        assertTrue(false);
    }


最主要的是要记住,默认情况下,包装器使用的是Monte编解码器,而不是ffmpeg。因此,不要忘记在配置文件中覆盖视频格式(您可以在中央Git项目页面上看到如何完成此操作),



不会有任何输出。对于我自己,我选择了VideoRecorder(由Pirogov开发),但没有使用注释,而是直接使用允许您启动和停止视频记录的类。在下一篇文章中,我计划描述这种



方法,不要引用出于研究目的而诚实地窃取了代码的页面:





PS:如果突然之间,偶然地,您对可以采取的其他措施有所了解-请在评论中添加链接或文字。谢谢。



All Articles