2017-02-08 2 views
1

Я создаю отчет с ExtentReports для отправки членам команды вне домена. Я использую метод скриншота (ниже), чтобы сохранить скриншоты тестов. Они хранятся в дочерней папке в отчете HTML ExtentReports.Как отправить HTML-отчет (в виде вложения) с встроенными изображениями?

Прилагаю отчет к электронному письму, и в нем изображения отображаются отлично для членов команды в домене с разрешением на папку. Но я не понимаю, как разрешить людям, находящимся за пределами разрешений этой папки, увидеть изображения, встроенные в отчет. Это HTML для изображения, непосредственно ссылающегося на этот файл.

<img class="report-img" data-featherlight="file:///\\domain.local\files\QA\Projects\AutomationReports\ExtentScreens\1486487870116.jpg" src="file:///\\domain.local\files\QA\Projects\AutomationReports\ExtentScreens\1486487870116.jpg"> 

Вот мой метод скрининга.

public static String CaptureScreen(WebDriver driver) { 
    String ImagesPath = "\\\\domain.local\\files\\QA\\Projects\\AutomationReports\\ExtentScreens\\" 
      + new Date().getTime(); 

    TakesScreenshot oScn = (TakesScreenshot) driver; 
    File oScnShot = oScn.getScreenshotAs(OutputType.FILE); 
    File oDest = new File(ImagesPath + ".jpg"); 

    // System.out.println(ImagesPath); 

    try { 
     FileUtils.copyFile(oScnShot, oDest); 
    } catch (IOException e) { 
     System.out.println(e.getMessage()); 
    } 
    return ImagesPath + ".jpg"; 
} 

У меня есть 2 несвязанных идеи о том, как исправить это. Но мне нужна помощь, чтобы начать с любого из них. Я открыт для других предложений.

  1. Внесите изображения непосредственно в HTML-отчет или как-то отправляйте папку, содержащую скриншоты с отчетом HTML. Тем не менее, HTML по-прежнему будет ссылаться на мое первоначальное местоположение, и изображения будут сломаны.

  2. Предоставьте общий доступ к папке, содержащей изображения, всем пользователям, посетителям и анонимным пользователям, чтобы пользователи вне домена могли открывать HTML-адрес, который ссылается на это местоположение. Я не знаю, как установить эти разрешения, и я даже не уверен, что это позволит внешнему пользователю просматривать HTML-ссылку на местоположение.

ответ

1

Пожалуйста, попробуйте с кодировкой base64, это определенно сработает. Также проверьте свою поддержку браузера.

Попробуйте это:

<img src="data:image/jpeg;base64,/9j/4AAQxxxxxxxx...." /> 
+1

Спасибо, сейчас работает. Это имеет значение, или я могу изменить тип файла при кодировании на base64? Я не вижу метода определения того, какой тип файла кодируется. – dsidler

+0

@dsidler Добро пожаловать. Не могли бы вы уточнить, что вы хотите сделать больше? –

0

В зависимости от того, какие браузеры вам нужны support, вы можете вставлять свои изображения в base64. как это:

<img src="data:image/jpeg;base64, LzlqLzRBQ...<!-- base64 data -->" /> 

Here is a tool to encode your images

0

Вы можете вставлять base64 закодирован изображения непосредственно в HTML-документ.

<img src="data:image/jpeg;base64,/9j/4AAQxxxxxxxx...." /> 
0

Вы можете создать сообщение многочастному/отчет с изображения включены в качестве дополнительных частей тела в сообщении.JavaMail FAQ включает этот пример кода:

Multipart multipart = new MimeMultipart("related"); 

    MimeBodyPart htmlPart = new MimeBodyPart(); 
    // messageBody contains html that references image 
    // using something like <img src="cid:XXX"> where 
    // "XXX" is an identifier that you make up to refer 
    // to the image 
    htmlPart.setText(messageBody, "utf-8", "html"); 
    multipart.addBodyPart(htmlPart); 

    MimeBodyPart imgPart = new MimeBodyPart(); 
    // imageFile is the file containing the image 
    imgPart.attachFile(imageFile); 
    // or, if the image is in a byte array in memory, use 
    // imgPart.setDataHandler(new DataHandler(
    //  new ByteArrayDataSource(bytes, "image/whatever"))); 

    // "XXX" below matches "XXX" above in html code 
    imgPart.setContentID("<XXX>"); 
    multipart.addBodyPart(imgPart); 

    message.setContent(multipart); 
+0

Я использую multipart javamail для отправки отчета, но это готовый html-отчет, который не очень хорошо вписывается в сообщение электронной почты. Спасибо хоть. – dsidler

+0

Так или иначе, вам придется изменить все теги img, чтобы они не ссылались на локальные файлы. –

0

Мы должны иметь класс файл, как показано ниже

общественного класса GetScreenShort {

захвата общественного статической строки (WebDriver драйвер, String screenShotName) бросает IOException { TakesScreenshot ts = (TakesScreenshot) водитель;

String dest = ts.getScreenshotAs(OutputType.BASE64); 

    return "data:image/jpg;base64, " + dest ; 
} 

}

Тот же класс должен быть назван как ниже

Строка screenShotPath = GetScreenShort.capture (WebDriver, "screenShotName");

Смежные вопросы