Selenium、別名WebDriverのホームビデオ。または、Java、壊れたテスト、少しの時間があれば、画面を記録するよりも

職場では、いくつかのWebアプリケーションのテストを自動化することにしました。そして、情報に加えて、テストが失敗したとき、私はまた、ページがこの悲しい瞬間をどのように見ているかを見たかったのです。



私はチェッカーとセレニウムを長い間手に入れていなかったので、インターネットを少し掘り下げて、この状況で賢い人々が何をしているのかを探す必要がありました。最終的に私に合ったソリューションは、Java + Selenium + Junit + Allure + ffmpeg + VideoRecorder(Pirogovによる)といういくつかのテクノロジーをまとめました。しかし、私はまだ正直に掘り下げて、問題の最善の解決策を見つけようとしていたので、スクリーンショットを撮る方法など、いくつかの代替的で簡単な方法がありました。



見つかった情報はインターネット全体に散らばっているので、簡潔な概要を1か所にまとめておくとよいと思います。実際、この記事は初心者向けの小さな紹介であることが判明しました。同じ問題に関心のある人は、自動テストで赤い旗が投げられたときに何が存在したか、何が存在しなかったかを目で確認します。



私たちが何をするように求められているか見てみましょう。



画面のスクリーンショットを撮る方法



私たちの問題について考えることができる最初のオプションは、画面のスクリーンショットを撮ることです。それら。テストが失敗する瞬間を推測し、写真を撮ります。通常、アクションごとにスクリーンショットを撮ることができます。または、特定の頻度でスクリーンショットを撮ります(たとえば、0.5秒に1回)。



方法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.セレニド



2番目の方法は、セレニウムのラッパー、たとえばセレニドを使用することです。このフレームワークは、ドライバーでの作業を簡素化し、特に、エラーが発生したときにスクリーンショットを自動的に作成します。デフォルトでは、スクリーンショットは「test-result / reports」フォルダーに保存されます。



方法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.クラウドテクノロジーを使用する



まったく気にせず、お金が雇用主の太ももを燃やす場合は、クラウドサービスでのテストの実行に切り替えることができます。このようなサービスのインフラストラクチャでは、通常、さまざまなオペレーティングシステムやさまざまなブラウザでの実行に関するレポートを作成して、驚異的なロギングを行うことができます。合格したテストのビデオを含むことが利用可能です。宣伝しないように、サービスについては特に言及していません。すべてがグーグルされています。



スクリーンビデオを取得する方法



ビデオの場合、もう少し複雑です。ただビデオを撮って撮影することはできません。少し踊る必要があります。



踊る主な方法は2つあります。



  • スクリーンショットを作成してビデオに変換します(以下、方法1)
  • すぐにビデオを撮る(以下、方法2と3)


方法1.手作業で写真をビデオに変換します(例としてffmpegを使用)。



ビデオを取得するには、0.5秒ごとにスクリーンショットを撮り、それらを1つのビデオに結合します。たとえば、ffmpegライブラリ(https://ffmpeg.org/)を



使用します。同じディレクトリにあるPNG拡張子のファイルの場合、コマンドは次のようになります。



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


自動化を追加して、たとえば、テストの最後に同様のコマンドを実行するスクリプトを作成できます。



方法2.ビデオレコーダー-モンテスクリーンレコーダー



ビデオを作成する別の方法は、スクリーンショットを撮るステップをバイパスして、レコーダーをすぐに使用することです。



私が最初に出会ったのはMonteScreen 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();


このレコーダーの欠点は、ビデオを視聴するためにコンピューター(https://www.techsmith.com/products.html)にTSCコーデックをインストールする必要があることです。



方法3.レコーダー-ffmpeg



私が出会った2番目のレコーダーは、最も有名で広く使用されているffmpegライブラリでした。画像をビデオに変換するための使用例については、すでに説明しました。ライブラリにはいくつかのラッパーがあります。結局、github.com / SergeyPirogov / video-recorder-javaに落ち着きました



このライブラリは、更新が非常に新しいという事実に私を魅了しました。これは、プロジェクトが生きていることを意味し、バグが迅速に修正されることを期待できます。さらに、ラッパーは、テストが失敗したときにビデオを撮影するという問題をサポートするために特別に作成されました。使用する最も簡単な方法はJava注釈ですビデオ(name = "second_test")



例:



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


重要なことは、デフォルトではラッパーがffmpegではなくMonteコーデックを使用することを覚えておくことです。したがって、構成ファイルのビデオ形式をオーバーライドすることを忘れないでください(これがどのように行われるかは中央のGitプロジェクトページで確認できます)。



出力はありません。私自身は、VideoRecorder(Pirogovによる)を選択しましたが、注釈は使用せず、ビデオ録画を開始および停止できるクラスを直接使用しました。次の投稿では、この



方法について説明する予定です。研究目的でコードが正直に盗まれたページを参照しないのは不正です。





PS:突然、偶然に、他に何ができるかについていくつかのアイデアがあります。コメントにリンクまたはテキストを追加してください。ありがとう。



All Articles