Arhn - архитектура программирования

Добавление скриншота в отчет TestNG

Я пытаюсь добавить скриншоты неудачного теста в отчет testNG, и я понятия не имею об этом.

Это мой класс pom для получения скриншота

package library;

import java.awt.AWTException;
import java.io.File;

import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;

public class TakeScreenShot {

    WebDriver driver;

    public TakeScreenShot(WebDriver driver) {

        this.driver=driver;

    }

     public void CaptureScreenshot(String screenshotName) throws AWTException
        {


                    try {
                                TakesScreenshot ts=(TakesScreenshot)driver;
                                File source=ts.getScreenshotAs(OutputType.FILE);
                                FileUtils.copyFile(source, new File("C:\\Users\\Documents\\Eclipse\\WorkSpace\\ScreenShot\\"+screenshotName));

                                System.out.println("Screenshot taken");


                    } catch (Exception e) {

                                System.out.println("Exception "+e.getMessage());

                    }            
        }
}

А это мой класс TestNG

@AfterMethod
  public void CloseBrowser(ITestResult result) throws AWTException {

     String name=result.getName()+"."+result.getMethod().getCurrentInvocationCount()+".png";

     if(ITestResult.FAILURE==result.getStatus())
         {
            ScreenshotPageObjectModel screenshotPom= new ScreenshotPageObjectModel(driver);

             screenshotPom.CaptureScreenshot(name);

         }

        driver.close();
  }

Спасибо за помощь и, пожалуйста, укажите, где я должен внести изменения для добавления снимка экрана в отчет.

24.04.2018

Ответы:


1

Вам нужно использовать интерфейс ITestListeners для TestNg, он в основном предоставляет 7 методов, а именно:

onTestStart(ITestResult result)  
onTestFailure(ITestResult result)    
onTestSuccess(ITestResult result)  
onTestSkipped(ITestResult result)  
onTestFailedButWithinSuccessPercentage(ITestResult result)  
onStart(ITestContext context)  
onFinish(ITestContext context)  

Ваше требование здесь: "сделать снимок экрана неудачных тестов/методов". Вы должны использовать методы onTestFailure(результат ITestResult).

Демонстрация:

public class TestListener implements ITestListener {
        WebDriver driver=null;  
        String filePath = "D:\\SCREENSHOTS";  

        @Override
        public void onTestFailure(ITestResult result) {
            System.out.println("***** Error "+result.getName()+" test has failed *****");
            String methodName=result.getName().toString().trim();
            takeScreenShot(methodName);
        }

        public void takeScreenShot(String methodName) {
            //get the driver
            driver=TestBase.getDriver();
             File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
             //The below method will save the screen shot in d drive with test method name 
                try {
                    FileUtils.copyFile(scrFile, new File(filePath+methodName+".png"));
                    System.out.println("***Placed screen shot in "+filePath+" ***");
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
        public void onFinish(ITestContext context) {}

        public void onTestStart(ITestResult result) {   }

        public void onTestSuccess(ITestResult result) {   }

        public void onTestSkipped(ITestResult result) {   }

        public void onTestFailedButWithinSuccessPercentage(ITestResult result) {   }

        public void onStart(ITestContext context) {   }
    }  

Вам нужно добавить этот тег в ваш файл XML:

<listeners>
       <listener class-name="com.pack.listeners.TestListener"/>
</listeners>
24.04.2018

2
To get screen shot use this method:


 public static void takeSnapShot(WebDriver driver, String fileWithPath) throws Exception {
            TakesScreenshot scrShot = (TakesScreenshot)driver;
            File SrcFile = (File)scrShot.getScreenshotAs(OutputType.FILE);
            File DestFile = new File(fileWithPath);
            FileUtils.copyFile(SrcFile, DestFile);
        }

    You can call the screen shot under TestNG using below code:
     @AfterMethod(
                alwaysRun = true
        )
        protected void afterMethod(ITestResult result, Method method) throws Exception {
            // boolean testStatus = false;
            String fileName = "FAIL  - Error Message Generated on Details Reports";
            byte testStatus;
            if (result.getStatus() == 2) {
                fileName = System.getProperty("user.dir") + "\\Reports\\failure_screenshots\\" + ".png";
                takeSnapShot(this.driver, fileName);
                ExtentTestManager.getTest().log(LogStatus.FAIL, "Error Screenshot" + ExtentTestManager.getTest().addScreenCapture("failure_screenshots\\" + ".png"));
                ExtentTestManager.getTest().log(LogStatus.FAIL, "Test Failed");
                testStatus = 2;
            } else {
                ExtentTestManager.getTest().log(LogStatus.PASS, "Test passed");
                testStatus = 1;
            }

Ref-> https://www.softwaretestingmaterial.com/screenshots-extent-reports/ http://automationtesting.in/capture-screenshot-in-extent-reports-java/

Надеюсь это поможет!!!

PS- Используйте самую стабильную версию экстентного отчета - 2.41.1.

24.04.2018

3

Я предлагаю использовать ReportNG вместо предварительного отчета TestNG.

02.05.2018
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..