Selenium-Extent_Reports: невозможно просмотреть скриншоты сбоев на другом компьютере / компьютере - PullRequest
0 голосов
/ 21 мая 2018

- Скриншот ошибки виден в Extent_Reports на моей локальной машине.Но не удается просмотреть скриншот ошибки в Extent_Reports на другом компьютере / компьютере.

-При запуске сборки из Jenkins, после успешной сборки, отправка электронной почты в: Список получателей

ВСнимок экрана Capture

    public String captureScreen(String fileName) {
    if(fileName =="") {
        fileName="Screenshot";  }

    File destFile=null;
    Calendar calendar =Calendar.getInstance() ;
    SimpleDateFormat formater= new SimpleDateFormat("dd_MM_yyy_hh_mm_ss");
    File srcFile=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);

    try {

         String reportDirectory = "/src/main/java/com/test/automation/Demo/screenshot/";
         //String reportDirectory= new File(System.getProperty("user.dir")).getAbsolutePath()+"./src/main/java/com/test/automation/Demo/screenshot/";
         destFile= new File((String)reportDirectory + fileName +"-" + formater.format(calendar.getTime())+ ".png");
         FileUtils.copyFile(srcFile,destFile );
         //This will help us to link screen shot in Extent report
         Reporter.log("<a href='"+destFile+ "'><img src='" +destFile+"' height='100' width='100'/></a>");
         //Reporter.log("<a href='"+destFile.getAbsolutePath()+ "'><img src='" +destFile.getAbsolutePath()+"' height='100' width='100'/></a>");
    }
    catch(IOException e) {
        e.printStackTrace();
    }
    return destFile.toString();
}

Для создания отчетов Extent со скриншотами для тестовых случаев отказа

 public void getresult(ITestResult result) {

if(result.getStatus()==ITestResult.FAILURE) 
{
  test.log(LogStatus.ERROR, result.getName()+" Test case FAILED due to below issues: "+result.getThrowable());
  String screen = captureScreen("");
  test.log(LogStatus.FAIL," Failure Screenshot : "+ test.addScreenCapture(screen));
    }}

Ответы [ 3 ]

0 голосов
/ 21 мая 2018

Я не использовал отчеты Extent, у меня есть собственная реализация отчетов.Но я ожидаю, что есть проблема с src

<img src='" +destFile+"' height='100' width='100'/></a>");

Здесь, destFile приносит местоположение изображения или скриншота, который связан с вашей машиной.то же самое не должно работать на других.Мы должны использовать относительный путь, посмотрите это

https://www.w3schools.com/html/html_filepaths.asp

А также убедитесь, что при совместном использовании отчетов он должен содержать все необходимые файлы и папки.

0 голосов
/ 29 ноября 2018

Обычно проблема возникает из-за того, что локальные файлы не могут быть загружены.Так что даже мы ставим относительный или абсолютный путь, который, кажется, не работает во многих случаях.Поэтому я стараюсь вместо этого использовать base64screenshot, и он достаточно хорошо отображается в отчете по экстентам.Чтобы иметь скриншот в отчете папки, нужно просто сделать скриншот как обычно.

public static String getBase64Screenshot(WebDriver driver, String screenshotName) throws IOException {
    String encodedBase64 = null;
    FileInputStream fileInputStream = null;
    TakesScreenshot screenshot = (TakesScreenshot) driver;
    File source = screenshot.getScreenshotAs(OutputType.FILE);
    String destination = windowsPath + "\\FailedTestsScreenshots\\"+screenshotName+timeStamp+".png";
    File finalDestination = new File(destination);
    FileUtils.copyFile(source, finalDestination);

    try {
        fileInputStream =new FileInputStream(finalDestination);
        byte[] bytes =new byte[(int)finalDestination.length()];
        fileInputStream.read(bytes);
        encodedBase64 = new String(Base64.encodeBase64(bytes));
    }catch (FileNotFoundException e){
        e.printStackTrace();
    }

    return encodedBase64;
}

Вызовите его в случае отказа:

public synchronized void onTestFailure(ITestResult result) {
    System.out.println("==="+methodDes + "=== failed!");
    try {
        WebDriver driver = (WebDriver) result.getTestContext().getAttribute("driver");
        String base64Screenshot = ExtentManager.getBase64Screenshot(driver, result.getName());
        MediaEntityModelProvider mediaModel = MediaEntityBuilder.createScreenCaptureFromBase64String(base64Screenshot).build();
        test.get().fail("image:", mediaModel);
    } catch (IOException e) {
        e.printStackTrace();
    }
    test.get().fail(result.getThrowable().getMessage());
}
0 голосов
/ 21 мая 2018

Если вы используете remoteWebDriver, его необходимо увеличить, прежде чем вы сможете использовать функцию скриншота.Вы пытались

WebDriver driver = new RemoteWebDriver();
driver = new Augmenter().augment(driver);

// or for mobile driver

androidDriver.setFileDetector(new LocalFileDetector()); 
//this is needed when using remoteDriver

Вот как я делаю снимок экрана для ExtentReport

File scrFile = driver.getScreenshotAs(OutputType.FILE);

String dest = System.getProperty("user.dir") + "/resources/screenshots/" + dataMethod.getAndroidDriver().getSessionId() + ".png";

File destination = new File(dest);
try {
    FileUtils.copyFile(scrFile, destination);

    // this is just utility which takes screenshot and copy it to desired destination 

     dataMethod.setScreenshotPath(destination.getAbsolutePath());
} catch (IOException e) {
     e.printStackTrace();
}

И при сбое кода:

@Override
public synchronized void onTestFailure(ITestResult result) {
    setTestEndTime(result);

    ExtentTest extentTest = methodData.getExtentTest();           
    extentTest.addScreenCaptureFromPath(methodData.getScreenshotPath());
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...