Heimvideo für Selenium aka WebDriver. Oder als einen Bildschirm aufzunehmen, wenn Sie Java, fehlerhafte Tests und ein wenig Zeit haben

Bei der Arbeit haben wir beschlossen, Tests für einige unserer Webanwendungen zu automatisieren. Und neben den Informationen, als die Tests fielen, wollte ich auch sehen, wie die Seite in diesem traurigen Moment aussah.



Ich habe seit langer Zeit keine Kontrolleure und Selen mehr aufgenommen, deshalb musste ich ein wenig im Internet stöbern und nachsehen, was kluge Leute in dieser Situation tun. Die Lösung, die am Ende zu mir passte, brachte mehrere Technologien zusammen: Java + Selen + Junit + Allure + ffmpeg + VideoRecorder (von Pirogov). Aber da ich immer noch ehrlich gegraben habe, um die beste Lösung für das Problem zu finden, gab es mehrere alternative und einfachere Möglichkeiten, meine zu finden - wie Sie einen Screenshot machen können.



Da die gefundenen Informationen über das gesamte Internet verteilt sind, wäre es meiner Meinung nach schön, eine kurze Zusammenfassung an einem Ort zu haben. Tatsächlich stellte sich heraus, dass der Artikel eine kleine Einführung für Anfänger war. Diejenigen, die sich mit dem gleichen Problem befassen - mit ihren Augen zu sehen, was existierte oder nicht, als die Autotests die rote Fahne auswarfen.



Mal sehen, wozu wir aufgefordert werden.



So machen Sie einen Screenshot des Bildschirms



Die allererste Option, die für unser Problem in Betracht gezogen werden kann, besteht darin, Screenshots des Bildschirms zu machen. Jene. Erraten Sie den Moment, in dem der Test fehlschlägt, und machen Sie sich ein Bild. Sie können im Allgemeinen für jede Aktion einen Screenshot erstellen. Oder machen Sie einen Screenshot mit einer bestimmten Frequenz (z. B. alle halbe Sekunde).



Methode 1. Selen



Da viele Tests in Selenium / WebDriver geschrieben sind, ist es ratsam, seine Methoden zu verwenden. Zum Beispiel:



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"));


Methode 2. Selenid Die



zweite Möglichkeit besteht darin, Wrapper für Selen zu verwenden, beispielsweise Selenid. Dieses Framework vereinfacht die Arbeit mit dem Treiber und erstellt unter anderem automatisch Screenshots, wenn ein Fehler auftritt. Standardmäßig werden Screenshots im Ordner "Testergebnisse / Berichte" gespeichert.



Methode 3. java.awt.Robot



Der nächste Weg besteht darin, eine allgemein standardmäßige Java-Klasse (seit Version 1.3) zu verwenden, um direkt mit dem Betriebssystem zu arbeiten. Ein kleines Beispiel dafür, wie ähnlicher Code aussehen könnte:



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


Methode 4. Verwenden externer Programme



Suchen Sie ein Programm, das Screenshots erstellt, und verwenden Sie dessen API. Natürlich gibt es eine solche Methode, aber ich habe nicht einmal in diese Richtung gegraben.



Methode 5. Cloud-Technologien verwenden



Wenn Sie sich überhaupt nicht darum kümmern möchten und Geld den Oberschenkel Ihres Arbeitgebers verbrennt, können Sie zur Ausführung von Tests in Cloud-Diensten wechseln. Die Infrastruktur solcher Dienste im Allgemeinen ermöglicht es Ihnen, Wunder der Protokollierung zu vollbringen und Berichte für Läufe auf verschiedenen Betriebssystemen und in verschiedenen Browsern zu erstellen. Ein Video mit bestandenen Tests ist verfügbar. Ich erwähne die Dienstleistungen nicht ausdrücklich - um keine Werbung zu machen. Alles ist gegoogelt.



So erhalten Sie ein Bildschirmvideo



Mit Video ist es etwas komplizierter. Sie können nicht einfach ein Video aufnehmen und aufnehmen. Du musst ein bisschen tanzen.



Es gibt zwei Hauptarten zu tanzen:



  • Machen Sie Screenshots und konvertieren Sie sie in Video (im Folgenden Methode 1)
  • Nehmen Sie sofort ein Video auf (im Folgenden Methoden 2 und 3).


Methode 1. Bilder von Hand in Videos konvertieren (am Beispiel von ffmpeg)



Um ein Video zu erhalten, können Sie alle halbe Sekunde Screenshots machen und diese dann zu einem Video kombinieren. Verwenden der ffmpeg-Bibliothek (https://ffmpeg.org/)



Für Dateien mit der PNG-Erweiterung im selben Verzeichnis sieht der Befehl möglicherweise folgendermaßen aus:



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


Sie können Automatisierung hinzufügen und beispielsweise ein Skript erstellen, das am Ende der Tests einen ähnlichen Befehl ausführt.



Methode 2. Videorecorder - Monte Screen Recorder



Eine andere Möglichkeit, Videos zu erstellen, besteht darin, den Schritt des Aufnehmens von Screenshots zu umgehen und die Rekorder sofort zu verwenden.



Der erste, auf den ich stieß, war Monte Screen Recorder. Im Folgenden finden Sie ein kleines Beispiel für die Verwendung von Java Wrapper für diesen Recorder (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();


Der Nachteil dieses Rekorders ist, dass Sie den auf Ihrem Computer installierten TSC-Codec benötigen, um Videos anzusehen (https://www.techsmith.com/products.html).



Methode 3. Rekorder - ffmpeg Der



zweite Rekorder, auf den ich stieß, war die berühmteste und am weitesten verbreitete ffmpeg-Bibliothek. Ich habe bereits ein Beispiel für die Verwendung zum Konvertieren eines Bildes in ein Video gegeben. Es gibt mehrere Wrapper für die Bibliothek. Am Ende habe ich mich für github.com/SergeyPirogov/video-recorder-java entschieden .



Diese Bibliothek hat mich durch die Tatsache angezogen, dass die Updates ziemlich neu sind - es bedeutet, dass das Projekt am Leben ist und man hoffen kann, dass die Fehler schnell behoben werden. Darüber hinaus wurde der Wrapper speziell zur Unterstützung unseres Problems geschrieben - um ein Video aufzunehmen, wenn die Tests fehlgeschlagen sind. Die einfachste Verwendung sind Java-AnmerkungenVideo(name = "second_test")



Zum Beispiel:



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


Die Hauptsache ist, sich daran zu erinnern, dass der Wrapper standardmäßig den Monte-Codec verwendet, nicht ffmpeg. Vergessen Sie daher nicht, das Videoformat in der Konfigurationsdatei zu überschreiben (Sie können sehen, wie dies auf der zentralen Git-Projektseite gemacht wird).



Es erfolgt keine Ausgabe. Für mich selbst habe ich mich für VideoRecorder (von Pirogov) entschieden, jedoch ohne Anmerkungen, sondern direkt mit Klassen, mit denen Sie die Videoaufzeichnung starten und stoppen können. Im nächsten Beitrag



möchte ich diese Methode beschreiben. Es wäre unehrlich, nicht auf die Seiten zu verweisen, von denen der Code zu Forschungszwecken ehrlich gestohlen wurde:





PS: Wenn Sie versehentlich Ideen haben, was Sie sonst noch tun können, fügen Sie bitte Links oder Text in die Kommentare ein. Danke.



All Articles