فيديو منزلي للسيلينيوم ويعرف أيضًا باسم WebDriver. أو بدلاً من تسجيل الشاشة إذا كان لديك جافا ، واختبارات مكسورة وقليل من الوقت

في العمل ، قررنا أتمتة الاختبارات للعديد من تطبيقات الويب الخاصة بنا. وإلى جانب المعلومات ، عندما سقطت الاختبارات ، أردت أيضًا أن أرى كيف تبدو الصفحة في هذه اللحظة الحزينة.



لم أحصل على أجهزة الداما والسيلينيوم لفترة طويلة ، لذلك اضطررت إلى البحث قليلاً على الإنترنت والبحث عما يفعله الأشخاص الأذكياء في هذه الحالة. جمع الحل الذي يناسبني في النهاية عدة تقنيات: Java + Selenium + Junit + Allure + ffmpeg + VideoRecorder (بواسطة Pirogov). ولكن نظرًا لأنني ما زلت أحفر بصدق ، في محاولة للعثور على أفضل حل للمشكلة ، كان هناك العديد من الطرق البديلة والأبسط للتعدين - كيفية عمل لقطة شاشة.



نظرًا لأن المعلومات التي تم العثور عليها منتشرة في جميع أنحاء الإنترنت ، أعتقد أنه سيكون من الجيد الحصول على ملخص موجز في مكان واحد. في الواقع ، تحولت المقالة إلى مقدمة صغيرة للمبتدئين. أولئك الذين يهتمون بنفس المشكلة - ليروا بأعينهم ما كان أو لم يكن موجودًا عندما ألقت الاختبارات التلقائية العلم الأحمر.



دعونا نرى ما يطلب منا القيام به.



كيف تأخذ لقطة للشاشة



الخيار الأول الذي يمكن التفكير فيه لمشكلتنا هو التقاط لقطات للشاشة. أولئك. تخمين اللحظة التي يفشل فيها الاختبار والحصول على صورة. يمكنك عمومًا التقاط لقطة شاشة لكل إجراء. أو التقط لقطة شاشة بتردد معين (على سبيل المثال ، مرة كل نصف ثانية).



الطريقة الأولى: السيلينيوم



نظرًا لأن العديد من الاختبارات مكتوبة في السيلينيوم / 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"));


الطريقة الثانية: السلينيد



الطريقة الثانية هي استخدام أغلفة للسيلينيوم ، على سبيل المثال السيلينيوم. يعمل إطار العمل هذا على تبسيط العمل مع برنامج التشغيل ، ومن بين أمور أخرى ، يقوم بعمل لقطات شاشة تلقائيًا عند حدوث خطأ. بشكل افتراضي ، يتم تخزين لقطات الشاشة في مجلد "نتيجة الاختبار / التقارير".



الطريقة الثالثة. java.awt.Robot



الطريقة التالية هي استخدام فئة Java قياسية عامة (منذ الإصدار 1.3) للعمل مباشرة مع نظام التشغيل. مثال صغير لكيفية ظهور الكود المتشابه:



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


الطريقة الرابعة: استخدام البرامج الخارجية



ابحث عن برنامج يأخذ لقطات شاشة واستخدم API الخاص به. بالطبع ، هناك مثل هذه الطريقة ، لكنني لم أحفر حتى في هذا الاتجاه.



الطريقة الخامسة: استخدام التقنيات السحابية



إذا كنت لا تريد الإزعاج على الإطلاق ، وحرق المال فخذ صاحب العمل ، فيمكنك التبديل إلى إجراء الاختبارات في الخدمات السحابية. تتيح لك البنية التحتية لهذه الخدمات بشكل عام القيام بمعجزات التسجيل وإنشاء تقارير لعمليات التشغيل على أنظمة تشغيل مختلفة وفي متصفحات مختلفة. بما في ذلك فيديو الاختبارات التي تم اجتيازها متاح. لا أذكر الخدمات تحديدًا - حتى لا يتم الإعلان عنها. كل شيء غوغل.



كيفية الحصول على شاشة الفيديو



مع الفيديو ، الأمر أكثر تعقيدًا بعض الشيء. لا يمكنك التقاط مقطع فيديو وتصويره فقط. تحتاج إلى الرقص قليلا.



هناك طريقتان رئيسيتان للرقص:



  • قم بعمل لقطات شاشة وتحويلها إلى فيديو (يشار إليها فيما يلي بالطريقة 1)
  • قم بتصوير مقطع فيديو على الفور (فيما يلي ، الطريقتان 2 و 3)


الطريقة الأولى: تحويل الصور إلى فيديو يدويًا (باستخدام ffmpeg كمثال)



للحصول على فيديو ، يمكنك التقاط لقطات شاشة كل نصف ثانية ثم دمجها في فيديو واحد. على سبيل المثال ، باستخدام مكتبة ffmpeg (https://ffmpeg.org/)



بالنسبة للملفات ذات الامتداد PNG الموجود في نفس الدليل ، قد يبدو الأمر كما يلي:



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


يمكنك إضافة أتمتة ، على سبيل المثال ، إنشاء برنامج نصي يقوم بتشغيل أمر مماثل في نهاية الاختبارات.



الطريقة الثانية: مسجل الفيديو - Monte Screen Recorder



طريقة أخرى لإنشاء فيديو وهي تجاوز خطوة إنشاء لقطة الشاشة واستخدام المسجلات على الفور.



أول ما صادفته كان 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).



الطريقة الثالثة. المسجل - 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) ، ولكن بدون استخدام التعليقات التوضيحية ، ولكن باستخدام الفئات التي تتيح لك بدء تسجيل الفيديو وإيقافه مباشرةً. أخطط في



المنشور التالي لوصف هذه الطريقة ، وسيكون من غير النزيه عدم الإشارة إلى الصفحات التي سُرق منها الرمز بأمانة لأغراض البحث:





ملاحظة: إذا كان لديك فجأة ، عن طريق الصدفة ، بعض الأفكار حول ما يمكنك فعله - الرجاء إضافة روابط أو نص في التعليقات. شكر.



All Articles