Skip to content

Commit 23293d1

Browse files
committed
Update lesson 33 - Extent Report
1 parent 9909886 commit 23293d1

File tree

4 files changed

+384
-1
lines changed

4 files changed

+384
-1
lines changed

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ buildNumber.properties
1111
.mvn/wrapper/maven-wrapper.jar
1212
.idea/
1313
*.iml
14-
reports/
1514
screenshots/
1615
null/
1716
*.png
Lines changed: 314 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,314 @@
1+
2+
3+
<!DOCTYPE html>
4+
<html>
5+
<head>
6+
<meta charset="UTF-8">
7+
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
8+
<title></title>
9+
<link rel="apple-touch-icon" href="https://cdn.jsdelivr.net/gh/extent-framework/extent-github-cdn@b00a2d0486596e73dd7326beacf352c639623a0e/commons/img/logo.png">
10+
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/extent-framework/extent-github-cdn@b00a2d0486596e73dd7326beacf352c639623a0e/commons/img/logo.png">
11+
<link href="https://cdn.jsdelivr.net/gh/extent-framework/extent-github-cdn@d6562a79075e061305ccfdb82f01e5e195e2d307/spark/css/spark-style.css" rel="stylesheet" />
12+
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
13+
<script src="https://cdn.jsdelivr.net/gh/extent-framework/extent-github-cdn@7cc78ce/spark/js/jsontree.js"></script>
14+
<style type="text/css"></style></head><body class="spa -report standard">
15+
<div class="app">
16+
<div class="layout">
17+
<div class="header navbar">
18+
<div class="vheader">
19+
<div class="nav-logo">
20+
<a href="#">
21+
<div class="logo" style="background-image: url('https://cdn.jsdelivr.net/gh/extent-framework/extent-github-cdn@b00a2d0486596e73dd7326beacf352c639623a0e/commons/img/logo.png')"></div>
22+
</a>
23+
</div>
24+
<ul class="nav-left">
25+
<li class="search-box">
26+
<a class="search-toggle" href="#">
27+
<i class="search-icon fa fa-search"></i>
28+
<i class="search-icon-close fa fa-close"></i>
29+
</a>
30+
</li>
31+
<li class="search-input"><input id="search-tests" class="form-control" type="text" placeholder="Search..."></li>
32+
</ul>
33+
<ul class="nav-right">
34+
<li class="m-r-10">
35+
<a href="#"><span class="badge badge-primary">Extent Report | Anh Tester</span></a>
36+
</li>
37+
<li class="m-r-10">
38+
<a href="#"><span class="badge badge-primary">Mar 31, 2023 12:09:47 PM</span></a>
39+
</li>
40+
</ul>
41+
</div>
42+
</div><div class="side-nav">
43+
<div class="side-nav-inner">
44+
<ul class="side-nav-menu">
45+
<li class="nav-item dropdown" onclick="toggleView('test-view')">
46+
<a id="nav-test" class="dropdown-toggle" href="#">
47+
<span class="ico"><i class="fa fa-list"></i></span>
48+
</a>
49+
</li>
50+
<li class="nav-item dropdown" onclick="toggleView('dashboard-view')">
51+
<a id="nav-dashboard" class="dropdown-toggle" href="#">
52+
<span class="ico"><i class="fa fa-bar-chart"></i></span>
53+
</a>
54+
</li>
55+
</ul>
56+
</div>
57+
</div> <div class="vcontainer">
58+
<div class="main-content">
59+
<div class="test-wrapper row view test-view">
60+
<div class="test-list">
61+
<div class="test-list-tools">
62+
<ul class="tools pull-left">
63+
<li><a href="#"><span class="font-size-14">Tests</span></a></li>
64+
</ul>
65+
<ul class="tools text-right">
66+
<li class="dropdown">
67+
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-exclamation-circle"></i></a>
68+
<ul id="status-toggle" class="dropdown-menu dropdown-md p-v-0">
69+
<a class="dropdown-item" status="pass" href="#"><span>Pass</span><span class="status success"></span></a>
70+
<div class="dropdown-divider"></div>
71+
<a status="clear" class="dropdown-item" href="#"><span>Clear</span><span class="pull-right"><i class="fa fa-close"></i></span></a>
72+
</ul>
73+
</li>
74+
</ul>
75+
</div> <div class="test-list-wrapper scrollable">
76+
<ul class="test-list-item">
77+
<li class="test-item" status="pass" test-id="1"
78+
author=""
79+
tag=""
80+
device="">
81+
<div class="test-detail">
82+
<p class="name">testSetDataToExcel</p>
83+
<p class="text-sm">
84+
<span>12:09:47 PM</span> / <span>00:00:21:597</span>
85+
<span class="badge pass-bg log float-right">Pass</span>
86+
</p>
87+
</div>
88+
<div class="test-contents d-none">
89+
<div class="detail-head">
90+
<div class="p-v-10">
91+
<div class="info">
92+
<h5 class="test-status text-pass">testSetDataToExcel</h5>
93+
<span class='badge badge-success'>03.31.2023 12:09:47 PM</span>
94+
<span class='badge badge-danger'>03.31.2023 12:10:09 PM</span>
95+
<span class='badge badge-default'>00:00:21:597</span>
96+
&middot; <span class='uri-anchor badge badge-default'>#test-id=1</span>
97+
<span class='badge badge-default pointer float-right ml-1 et'><i class="fa fa-chevron-down"></i></span>
98+
<span class='badge badge-default pointer float-right ct'><i class="fa fa-chevron-up"></i></span>
99+
</div>
100+
<div class="m-t-10 m-l-5"></div>
101+
</div>
102+
</div><div class="detail-body mt-4">
103+
<table class="table table-sm">
104+
<thead><tr><th class="status-col">Status</th><th class="timestamp-col">Timestamp</th><th class="details-col">Details</th></tr></thead>
105+
<tbody>
106+
<tr class="event-row">
107+
<td><span class="badge log pass-bg">Pass</span></td>
108+
<td>12:09:48 PM</td>
109+
<td>
110+
Open URL: https://crm.anhtester.com/admin/authentication
111+
</td>
112+
</tr>
113+
<tr class="event-row">
114+
<td><span class="badge log pass-bg">Pass</span></td>
115+
<td>12:09:48 PM</td>
116+
<td>
117+
Get text of element By.xpath: //h1
118+
</td>
119+
</tr>
120+
<tr class="event-row">
121+
<td><span class="badge log info-bg">Info</span></td>
122+
<td>12:09:48 PM</td>
123+
<td>
124+
==> Text: Login
125+
</td>
126+
</tr>
127+
<tr class="event-row">
128+
<td><span class="badge log pass-bg">Pass</span></td>
129+
<td>12:09:48 PM</td>
130+
<td>
131+
Set text [email protected] on element By.xpath: //input[@id='email']
132+
</td>
133+
</tr>
134+
<tr class="event-row">
135+
<td><span class="badge log pass-bg">Pass</span></td>
136+
<td>12:09:48 PM</td>
137+
<td>
138+
Set text 123456 on element By.xpath: //input[@id='password']
139+
</td>
140+
</tr>
141+
<tr class="event-row">
142+
<td><span class="badge log pass-bg">Pass</span></td>
143+
<td>12:10:03 PM</td>
144+
<td>
145+
Click on element By.xpath: //button[normalize-space()='Login']
146+
</td>
147+
</tr>
148+
<tr class="event-row">
149+
<td><span class="badge log pass-bg">Pass</span></td>
150+
<td>12:10:09 PM</td>
151+
<td>
152+
testSetDataToExcel is passed.
153+
</td>
154+
</tr>
155+
</tbody>
156+
</table>
157+
</div>
158+
</div>
159+
</li>
160+
</ul>
161+
</div>
162+
</div>
163+
<div class="test-content scrollable">
164+
<div class="test-content-tools">
165+
<ul><li><a class="back-to-test" href="#"><i class="fa fa-arrow-left"></i></a></li></ul>
166+
</div>
167+
<div class="test-content-detail"><div class="detail-body"></div></div>
168+
</div></div>
169+
<div class="container-fluid p-4 view dashboard-view">
170+
<div class="row">
171+
<div class="col-md-3">
172+
<div class="card"><div class="card-body">
173+
<p class="m-b-0">Started</p>
174+
<h3>Mar 31, 2023 12:09:47 PM</h3>
175+
</div></div>
176+
</div>
177+
<div class="col-md-3">
178+
<div class="card"><div class="card-body">
179+
<p class="m-b-0">Ended</p>
180+
<h3>Mar 31, 2023 12:10:09 PM</h3>
181+
</div></div>
182+
</div>
183+
<div class="col-md-3">
184+
<div class="card"><div class="card-body">
185+
<p class="m-b-0 text-pass">Tests Passed</p>
186+
<h3>1</h3>
187+
</div></div>
188+
</div>
189+
<div class="col-md-3">
190+
<div class="card"><div class="card-body">
191+
<p class="m-b-0 text-fail">Tests Failed</p>
192+
<h3>0</h3>
193+
</div></div>
194+
</div>
195+
</div>
196+
<div class="row">
197+
<div class="col-md-6">
198+
<div class="card">
199+
<div class="card-header">
200+
<h6 class="card-title">Tests</h6>
201+
</div>
202+
<div class="card-body">
203+
<div class="">
204+
<canvas id='parent-analysis' width='115' height='90'></canvas>
205+
</div>
206+
</div>
207+
<div class="card-footer">
208+
<div><small data-tooltip='100%'>
209+
<b>1</b> tests passed
210+
</small>
211+
</div>
212+
<div>
213+
<small data-tooltip='0%'><b>0</b> tests failed,
214+
<b>0</b> skipped, <b data-tooltip='0%'>0</b> others
215+
</small>
216+
</div>
217+
</div>
218+
</div>
219+
</div>
220+
<div class="col-md-6">
221+
<div class="card">
222+
<div class="card-header">
223+
<h6 class="card-title">Log events</h6>
224+
</div>
225+
<div class="card-body">
226+
<div class="">
227+
<canvas id='events-analysis' width='115' height='90'></canvas>
228+
</div>
229+
</div>
230+
<div class="card-footer">
231+
<div><small data-tooltip='85%'><b>6</b> events passed</small></div>
232+
<div>
233+
<small data-tooltip='0%'><b>0</b> events failed,
234+
<b data-tooltip='%'>1</b> others
235+
</small>
236+
</div>
237+
</div>
238+
</div>
239+
</div>
240+
</div>
241+
<div class="row"><div class="col-md-12">
242+
<div class="card"><div class="card-header"><p>Timeline</p></div>
243+
<div class="card-body pt-0"><div>
244+
<canvas id="timeline" height="120"></canvas>
245+
</div></div>
246+
</div>
247+
</div></div>
248+
<script>
249+
var timeline = {
250+
"testSetDataToExcel":21.597
251+
};
252+
</script>
253+
<div class="row">
254+
<div class="col-lg-6 col-md-12 sysenv-container">
255+
<div class="card">
256+
<div class="card-header"><p>System/Environment</p></div>
257+
<div class="card-body pb-0 pt-0"><table class="table table-sm table-bordered">
258+
<thead><tr class="bg-gray"><th>Name</th><th>Value</th></tr></thead>
259+
<tbody>
260+
<tr>
261+
<td>Framework Name</td>
262+
<td>Selenium Java | Anh Tester</td>
263+
</tr>
264+
<tr>
265+
<td>Author</td>
266+
<td>Anh Tester</td>
267+
</tr>
268+
<tr>
269+
<td>Framework Name</td>
270+
<td>Selenium Java | Anh Tester</td>
271+
</tr>
272+
<tr>
273+
<td>Author</td>
274+
<td>Anh Tester</td>
275+
</tr>
276+
</tbody>
277+
</table></div>
278+
</div>
279+
</div>
280+
</div>
281+
</div>
282+
<script>
283+
var statusGroup = {
284+
parentCount: 5,
285+
passParent: 1,
286+
failParent: 0,
287+
warningParent: 0,
288+
skipParent: 0,
289+
childCount: 5,
290+
passChild: 0,
291+
failChild: 0,
292+
warningChild: 0,
293+
skipChild: 0,
294+
infoChild: 0,
295+
grandChildCount: 5,
296+
passGrandChild: 0,
297+
failGrandChild: 0,
298+
warningGrandChild: 0,
299+
skipGrandChild: 0,
300+
infoGrandChild: 0,
301+
eventsCount: 5,
302+
passEvents: 6,
303+
failEvents: 0,
304+
warningEvents: 0,
305+
skipEvents: 0,
306+
infoEvents: 1
307+
};
308+
</script> </div>
309+
</div>
310+
</div>
311+
</div>
312+
<script src="https://cdn.jsdelivr.net/gh/extent-framework/extent-github-cdn@d6562a79075e061305ccfdb82f01e5e195e2d307/spark/js/spark-script.js"></script>
313+
<script type="text/javascript"></script></body>
314+
</html>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package anhtester.com.reports;
2+
3+
import com.aventstack.extentreports.ExtentReports;
4+
import com.aventstack.extentreports.reporter.ExtentSparkReporter;
5+
6+
public class ExtentReportManager {
7+
8+
private static final ExtentReports extentReports = new ExtentReports();
9+
10+
public synchronized static ExtentReports getExtentReports() {
11+
ExtentSparkReporter reporter = new ExtentSparkReporter("reports/extentreport/extentreport.html");
12+
reporter.config().setReportName("Extent Report | Anh Tester");
13+
extentReports.attachReporter(reporter);
14+
extentReports.setSystemInfo("Framework Name", "Selenium Java | Anh Tester");
15+
extentReports.setSystemInfo("Author", "Anh Tester");
16+
return extentReports;
17+
}
18+
19+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package anhtester.com.reports;
2+
3+
import anhtester.com.drivers.DriverManager;
4+
import com.aventstack.extentreports.ExtentReports;
5+
import com.aventstack.extentreports.ExtentTest;
6+
import com.aventstack.extentreports.MediaEntityBuilder;
7+
import com.aventstack.extentreports.Status;
8+
import org.openqa.selenium.OutputType;
9+
import org.openqa.selenium.TakesScreenshot;
10+
11+
import java.util.HashMap;
12+
import java.util.Map;
13+
14+
public class ExtentTestManager {
15+
static Map<Integer, ExtentTest> extentTestMap = new HashMap<>();
16+
static ExtentReports extent = ExtentReportManager.getExtentReports();
17+
18+
public static ExtentTest getTest() {
19+
return extentTestMap.get((int) Thread.currentThread().getId());
20+
}
21+
22+
public static synchronized ExtentTest saveToReport(String testName, String desc) {
23+
ExtentTest test = extent.createTest(testName, desc);
24+
extentTestMap.put((int) Thread.currentThread().getId(), test);
25+
return test;
26+
}
27+
28+
public static void addScreenShot(String message) {
29+
String base64Image = "data:image/png;base64,"
30+
+ ((TakesScreenshot) DriverManager.getDriver()).getScreenshotAs(OutputType.BASE64);
31+
32+
getTest().log(Status.INFO, message,
33+
MediaEntityBuilder.createScreenCaptureFromBase64String(base64Image).build());
34+
}
35+
36+
public static void addScreenShot(Status status, String message) {
37+
String base64Image = "data:image/png;base64,"
38+
+ ((TakesScreenshot) DriverManager.getDriver()).getScreenshotAs(OutputType.BASE64);
39+
40+
getTest().log(status, message,
41+
MediaEntityBuilder.createScreenCaptureFromBase64String(base64Image).build());
42+
}
43+
44+
public static void logMessage(String message) {
45+
getTest().log(Status.INFO, message);
46+
}
47+
48+
public static void logMessage(Status status, String message) {
49+
getTest().log(status, message);
50+
}
51+
}

0 commit comments

Comments
 (0)