我正在创建一个包含ExtentReports的报告,通过电子邮件发送给域外的团队成员。我使用截图方法(如下)来保存测试失败的屏幕截图。它们存储在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";
}
我有两个关于如何解决这个问题的无关的想法。但我需要一些帮助才能开始使用其中任何一个。我愿意接受其他建议。
将图片直接嵌入到HTML报告中,或以某种方式发送包含HTML报告的屏幕截图的文件夹。但是,HTML仍将引用我的原始位置,图像将被破坏。
与Everyone,Guest和匿名用户共享包含图像的文件夹,以便域外的人可以打开引用此位置的HTML。我不知道如何设置这些权限,我甚至不确定这样做是否允许外部用户查看引用该位置的HTML。
答案 0 :(得分:1)
请尝试使用base64编码,它肯定会有效。 另外,请检查您的浏览器支持。
试试这个:
<img src="data:image/jpeg;base64,/9j/4AAQxxxxxxxx...." />
答案 1 :(得分:0)
根据您需要support所需的浏览器,您可以将图片嵌入到base64中。像这样:
<img src="data:image/jpeg;base64, LzlqLzRBQ...<!-- base64 data -->" />
答案 2 :(得分:0)
您可以将base64编码图像直接嵌入到HTML文档中。
<img src="data:image/jpeg;base64,/9j/4AAQxxxxxxxx...." />
答案 3 :(得分: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);
答案 4 :(得分:0)
我们应该有一个类文件,如下所示
公共类GetScreenShort {
public static String capture(WebDriver驱动程序,String screenShotName) 抛出IOException { TakesScreenshot ts =(TakesScreenshot)驱动程序;
<!doctype html> <html> <head> <meta charset="utf-8"> <title></title> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.2/angular.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.4.2/angular-ui-router.min.js"></script> <style media="screen"> h2 { margin: 5px 5px 5px 5px; } body { display: flex; flex-direction: column; } .class1 { align-items: flex-start; } .class2 { align-items: center; } </style> </head> <body ng-app="graceApp" ng-class="$state.current.data.bodyClass"> <div ui-view style="display: flex"></div> <script> angular .module('graceApp', [ 'ui.router' ]) .config(function ($stateProvider, $urlRouterProvider) { $stateProvider .state('page1', { url: '/page1', template: '<h2>This is page1</h2> <h2>Item1</h2> <h2>Item2</h2>', data: { bodyClass: 'class1' } }) .state('page2', { url: '/page2', template: '<h2>This is page2</h2> <h2>Item1</h2> <h2>Item2</h2>', data: { bodyClass: 'class2' } }); $urlRouterProvider.otherwise('/page1'); }); </script> </body> </html>
}
必须在下面调用相同的类
String screenShotPath = GetScreenShort.capture(webdriver, &#34; screenShotName&#34);