Saya sudah lama tidak mengambil checker dan Selenium, jadi saya harus menggali sedikit di Internet dan mencari apa yang dilakukan orang pintar dalam situasi ini. Solusi yang cocok untuk saya pada akhirnya menyatukan beberapa teknologi: Java + Selenium + Junit + Allure + ffmpeg + VideoRecorder (oleh Pirogov). Tetapi karena saya masih terus menggali dengan jujur, mencoba menemukan solusi terbaik untuk masalah tersebut, ada beberapa cara alternatif dan sederhana untuk menambang - bagaimana Anda dapat mengambil gambar layar.
Karena informasi yang ditemukan tersebar di seluruh Internet, saya rasa alangkah baiknya memiliki sinopsis ringkas di satu tempat. Faktanya, artikel itu ternyata sebagai pengantar kecil untuk pemula. Mereka yang prihatin dengan masalah yang sama - untuk melihat dengan mata mereka sendiri apa yang ada atau tidak ada ketika autotest mengeluarkan bendera merah.
Mari kita lihat apa yang diminta untuk kita lakukan.
Cara mengambil tangkapan layar layar
Opsi pertama yang dapat dipikirkan untuk masalah kami adalah mengambil tangkapan layar dari layar. Itu. tebak momen ketika tes akan gagal dan dapatkan gambaran. Biasanya Anda dapat mengambil tangkapan layar untuk setiap tindakan. Atau ambil tangkapan layar pada frekuensi tertentu (misalnya, setiap setengah detik sekali).
Metode 1. Selenium
Karena banyak tes ditulis dalam Selenium / WebDriver, akan bijaksana untuk menggunakan metodenya. Misalnya:
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"));
Metode 2. Selenide Cara
kedua adalah menggunakan pembungkus untuk Selenium, misalnya Selenide. Kerangka kerja ini menyederhanakan pekerjaan dengan driver dan, antara lain, membuat tangkapan layar secara otomatis saat terjadi kesalahan. Secara default, screenshot disimpan di folder "test-result / reports".
Metode 3. java.awt.Robot
Cara selanjutnya adalah menggunakan kelas Java yang umumnya standar (sejak versi 1.3) untuk bekerja secara langsung dengan sistem operasi. Contoh kecil tampilan kode yang mirip:
BufferedImage image = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
ImageIO.write(image, "png", new File("/screenshot.png"));
Metode 4. Menggunakan program eksternal
Temukan program yang mengambil screenshot dan menggunakan API-nya. Tentu saja, ada metode seperti itu, tetapi saya bahkan tidak menggali ke arah ini.
Metode 5. Gunakan teknologi cloud
Jika Anda tidak ingin repot sama sekali, dan uang membakar paha majikan Anda, maka Anda dapat beralih ke menjalankan tes di layanan cloud. Infrastruktur layanan semacam itu secara umum memungkinkan Anda melakukan keajaiban pencatatan, membuat laporan untuk dijalankan pada sistem operasi yang berbeda dan di browser yang berbeda. Termasuk video tes yang lulus tersedia. Saya tidak secara khusus menyebutkan layanan - agar tidak beriklan. Semuanya googled.
Cara mendapatkan video layar
Dengan video, ini sedikit lebih rumit. Anda tidak bisa hanya mengambil dan merekam video. Anda perlu menari sedikit.
Ada dua cara utama untuk menari:
- Buat tangkapan layar dan ubah menjadi video (selanjutnya, metode 1)
- Rekam video segera (selanjutnya, metode 2 dan 3)
Metode 1. Ubah gambar menjadi video dengan tangan (menggunakan ffmpeg sebagai contoh)
Untuk mendapatkan video, Anda dapat mengambil screenshot setiap setengah detik dan kemudian menggabungkannya menjadi satu video. Misalnya, menggunakan pustaka ffmpeg (https://ffmpeg.org/)
Untuk file dengan ekstensi PNG yang terletak di direktori yang sama, perintahnya mungkin terlihat seperti ini:
ffmpeg -framerate 1 -pattern_type glob -i '*.png' \ -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
Anda dapat menambahkan otomatisasi dan, misalnya, membuat skrip yang menjalankan perintah serupa di akhir pengujian.
Metode 2. Perekam Video - Perekam Layar Monte
Cara lain untuk membuat video adalah dengan melewati langkah mengambil tangkapan layar dan langsung menggunakan perekam.
Yang pertama saya temukan adalah Monte Screen Recorder dan di bawah ini adalah contoh kecil penggunaan pembungkus Java untuk perekam ini (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();
Kerugian dari perekam ini adalah Anda memerlukan codec TSC yang diinstal di komputer Anda untuk menonton video (https://www.techsmith.com/products.html).
Metode 3. Perekam - ffmpeg
Perekam kedua yang saya temukan adalah pustaka ffmpeg yang paling terkenal dan banyak digunakan. Saya sudah memberikan contoh penggunaannya untuk mengubah gambar menjadi video. Ada beberapa pembungkus untuk perpustakaan. Saya akhirnya memilih github.com/SergeyPirogov/video-recorder-java .
Perpustakaan ini menarik perhatian saya dengan fakta bahwa pembaruannya cukup baru - itu berarti proyek tersebut masih hidup dan orang dapat berharap bahwa bug akan diperbaiki dengan cepat. Selain itu, pembungkusnya ditulis secara khusus untuk mendukung masalah kita - untuk merekam video saat pengujian gagal. Cara termudah untuk menggunakannya adalah anotasi JavaVideo(name = "second_test")
Misalnya:
@Test
@Video(name = "second_test")
public void videoShouldHaveNameSecondTest(){
Thread.sleep(1000);
assertTrue(false);
}
Hal utama yang harus diingat adalah bahwa secara default pembungkusnya menggunakan codec Monte, bukan ffmpeg. Oleh karena itu, jangan lupa untuk mengganti format video di file konfigurasi (Anda dapat melihat bagaimana ini dilakukan di halaman pusat proyek Git).
Tidak akan ada keluaran. Untuk diri saya sendiri, saya memilih VideoRecorder (oleh Pirogov), tetapi tanpa menggunakan anotasi, tetapi secara langsung menggunakan kelas yang memungkinkan Anda untuk memulai dan menghentikan perekaman video. Di posting berikutnya saya berencana untuk menjelaskan
metode ini, tidak jujur jika tidak merujuk ke halaman dari mana kode itu secara jujur dicuri untuk tujuan penelitian:
- www.ontestautomation.com/creating-a-video-capture-of-your-selenium-tests-using-monte-screen-recorder
- habr.com/ru/sandbox/67456
- stackoverflow.com/questions/24961127/how-to-create-a-video-from-images-with-ffmpeg
- github.com/stephenc/monte-screen-recorder
- habr.com/ru/sandbox/67456
PS: Jika tiba-tiba, secara tidak sengaja, Anda punya ide tentang apa lagi yang bisa Anda lakukan - tambahkan tautan atau teks di komentar. Terima kasih.