使用JAVA在硒中进行测试执行的屏幕录制

时间:2015-04-02 14:36:56

标签: java selenium testng

我使用java selenium创建了一个自动化程序。我使用了TestNG框架。 我想记录在脚本执行期间执行的屏幕(视频),因此最好跟踪失败/通过的场景并查看执行过程。

任何人都可以帮我解决这个问题,如何在运行自动化套件执行期间记录屏幕。

2 个答案:

答案 0 :(得分:3)

请参阅此API(蒙特库):http://www.seleniummonster.com/boost-up-your-selenium-tests-with-video-recording-capability/

和此链接:http://unmesh.me/2012/01/13/recording-screencast-of-selenium-tests-in-java/

示例代码(来自上面的链接):

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();
}
public void stopRecording() throws Exception
{
this.screenRecorder.stop();
}

答案 1 :(得分:1)

前面提到的解决方案问题:-

回答所有解决方案以录制视频,从头到尾记录测试执行情况。如果自动化套件运行了几个小时,那么这将不是切实可行的最佳解决方案。

录制视频的主要目的是查看自动化测试用例失败时到底发生了什么。因此,恰恰在测试案例失败之前,测试人员需要录制最后15秒的视频。通过测试用例无需任何记录

理论上的解决方案:-

在Windows 10及更高版本上,Windows Xbox游戏栏[Windows + G]可以捕获最后15秒(可自定义)的视频。键盘快捷键Windows + Alt + G用于使用XBox游戏栏捕获最后15秒的视频,并将其存储在设置中提到的文件夹中。

硒自动化可以利用Windows Xbox Game bar的此录制功能。 在您的testNG自动化项目中,在testNG侦听器的onTestFailure方法中,只需将代码添加到按键Windows + Alt + G即可捕获最后15秒的视频。这将仅针对失败的测试案例捕获视频,而不会针对PASS测试案例捕获视频。如果您使用的是Java,则可以使用机器人库以编程方式发送按键。

屏幕截图显示了Windows XBox游戏栏,它的设置是捕获最后15秒。

enter image description here

enter image description here

代码解决方案:-

我正在从testNG listner的recordFailedTCVideo()方法下面调用
公共无效的onTestFailure(ITestResult结果)方法。 这只会记录最后15秒的视频,仅用于失败的测试案例。[而不是用于PASS测试案例]

视频说明:-https://www.youtube.com/watch?v=p6tJ1fVaRxw

public void recordFailedTCVideo(ITestResult result) {
    //private void pressKey() {
    System.out.println("In recordFailedTCVideo::***In Try Block *** Video for test case failed " + result.getName());
    commonUtility.logger.error("BaseTest::recordFailedTCVideo::***In Try Block ***  Video for test case failed " + result.getName());
    
        try {
            // Useing Robot class to keypres Win+Alt+G which will capture last 15 seconds of video
            Robot r = new Robot();
            r.keyPress(KeyEvent.VK_WINDOWS );
            Thread.sleep(1000);
            r.keyPress(KeyEvent.VK_ALT );
            Thread.sleep(1000);
            r.keyPress(KeyEvent.VK_G );
            Thread.sleep(5000);
            
            r.keyRelease(KeyEvent.VK_WINDOWS);
            Thread.sleep(1000);
            r.keyRelease(KeyEvent.VK_ALT);
            Thread.sleep(1000);
            r.keyRelease(KeyEvent.VK_G);
            Thread.sleep(5000);
          
            /// Copy Video saved to desired location
            
            File srcDir = new File(commonUtility.prop.getProperty("VIDEO_CAPTURE_DEFAULT_LOCATION"));

            DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMdd HHmmss");  
            LocalDateTime now = LocalDateTime.now();  
          
            String destination = ".\\ScreenshotsAndVideos\\" + dtf.format(now) ;
            File destDir = new File(destination);

            try {
                System.out.println("In RecordFailedTCVideo::Source Folder is "+ srcDir +" Destination Folder = " + destDir);
                commonUtility.logger.error("In RecordFailedTCVideo::Source Folder is "+ srcDir +" Destination Folder = " + destDir);

                FileUtils.moveDirectory(srcDir, destDir);
                
            } catch (IOException e) {
                e.printStackTrace();
            }
                    
        } catch (Exception e) {
            System.out.println("In recordFailedTCVideo::***In Catch Block ***\n" +e);
            commonUtility.logger.error("BaseTest::recordFailedTCVideo::***In Catch Block *** \n"+e );
            
            e.printStackTrace();
        }
    //}
}

更多视频说明:- https://www.youtube.com/watch?v=p6tJ1fVaRxw

约束:-

此解决方案不适用于非Windows平台。 XBar Game实用程序不会记录Windows资源管理器,文本文件等。尽管它可以记录浏览器没有问题。