automation_model 1.0.430-dev → 1.0.430
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +130 -0
- package/lib/api.d.ts +43 -1
- package/lib/api.js +241 -41
- package/lib/api.js.map +1 -1
- package/lib/auto_page.d.ts +5 -2
- package/lib/auto_page.js +177 -46
- package/lib/auto_page.js.map +1 -1
- package/lib/browser_manager.d.ts +7 -3
- package/lib/browser_manager.js +161 -49
- package/lib/browser_manager.js.map +1 -1
- package/lib/bruno.d.ts +1 -0
- package/lib/bruno.js +301 -0
- package/lib/bruno.js.map +1 -0
- package/lib/command_common.d.ts +6 -0
- package/lib/command_common.js +198 -0
- package/lib/command_common.js.map +1 -0
- package/lib/environment.d.ts +3 -0
- package/lib/environment.js +5 -2
- package/lib/environment.js.map +1 -1
- package/lib/error-messages.d.ts +6 -0
- package/lib/error-messages.js +206 -0
- package/lib/error-messages.js.map +1 -0
- package/lib/generation_scripts.d.ts +4 -0
- package/lib/generation_scripts.js +2 -0
- package/lib/generation_scripts.js.map +1 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -1
- package/lib/init_browser.d.ts +5 -2
- package/lib/init_browser.js +124 -7
- package/lib/init_browser.js.map +1 -1
- package/lib/locate_element.d.ts +7 -0
- package/lib/locate_element.js +215 -0
- package/lib/locate_element.js.map +1 -0
- package/lib/locator.d.ts +36 -0
- package/lib/locator.js +165 -0
- package/lib/locator.js.map +1 -1
- package/lib/locator_log.d.ts +26 -0
- package/lib/locator_log.js +69 -0
- package/lib/locator_log.js.map +1 -0
- package/lib/network.d.ts +3 -0
- package/lib/network.js +183 -0
- package/lib/network.js.map +1 -0
- package/lib/scripts/axe.mini.js +12 -0
- package/lib/stable_browser.d.ts +104 -36
- package/lib/stable_browser.js +1802 -1240
- package/lib/stable_browser.js.map +1 -1
- package/lib/table.d.ts +13 -0
- package/lib/table.js +187 -0
- package/lib/table.js.map +1 -0
- package/lib/table_helper.d.ts +19 -0
- package/lib/table_helper.js +116 -0
- package/lib/table_helper.js.map +1 -0
- package/lib/test_context.d.ts +6 -0
- package/lib/test_context.js +14 -10
- package/lib/test_context.js.map +1 -1
- package/lib/utils.d.ts +22 -2
- package/lib/utils.js +664 -11
- package/lib/utils.js.map +1 -1
- package/package.json +14 -8
package/lib/network.js
ADDED
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
function _getNetworkFile(world = null, web = null, context = null) {
|
|
4
|
+
let networkFile = null;
|
|
5
|
+
if (world && world.reportFolder) {
|
|
6
|
+
networkFile = path.join(world.reportFolder, "network.json");
|
|
7
|
+
}
|
|
8
|
+
else if (web.reportFolder) {
|
|
9
|
+
networkFile = path.join(web.reportFolder, "network.json");
|
|
10
|
+
}
|
|
11
|
+
else if (context && context.reportFolder) {
|
|
12
|
+
networkFile = path.join(context.reportFolder, "network.json");
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
networkFile = "network.json";
|
|
16
|
+
}
|
|
17
|
+
return networkFile;
|
|
18
|
+
}
|
|
19
|
+
function registerDownloadEvent(page, world, context) {
|
|
20
|
+
if (page) {
|
|
21
|
+
let downloadPath = "./downloads";
|
|
22
|
+
if (world && world.downloadsPath) {
|
|
23
|
+
downloadPath = world.downloadsPath;
|
|
24
|
+
}
|
|
25
|
+
else if (context && context.downloadsPath) {
|
|
26
|
+
downloadPath = context.downloadsPath;
|
|
27
|
+
}
|
|
28
|
+
if (!fs.existsSync(downloadPath)) {
|
|
29
|
+
try {
|
|
30
|
+
fs.mkdirSync(downloadPath);
|
|
31
|
+
}
|
|
32
|
+
catch (e) {
|
|
33
|
+
// ignore
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
page.on("download", async (download) => {
|
|
37
|
+
const suggestedFilename = download.suggestedFilename(); // Get the original file name
|
|
38
|
+
const filePath = `${downloadPath}/${suggestedFilename}`;
|
|
39
|
+
// Save the download with the original name
|
|
40
|
+
await download.saveAs(filePath);
|
|
41
|
+
console.log(`Downloaded file saved as: ${filePath}`);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function registerNetworkEvents(world, web, context, page) {
|
|
46
|
+
const networkFile = _getNetworkFile(world, web, context);
|
|
47
|
+
function saveNetworkData() {
|
|
48
|
+
if (context && context.networkData) {
|
|
49
|
+
fs.writeFileSync(networkFile, JSON.stringify(context.networkData, null, 2), "utf8");
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (!context) {
|
|
53
|
+
console.error("No context found to register network events");
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
// Map to hold request start times and IDs
|
|
57
|
+
const requestTimes = new Map();
|
|
58
|
+
let requestIdCounter = 0;
|
|
59
|
+
if (page) {
|
|
60
|
+
if (!context.networkData) {
|
|
61
|
+
context.networkData = [];
|
|
62
|
+
const networkData = context.networkData;
|
|
63
|
+
// Event listener for when a request is made
|
|
64
|
+
page.on("request", (request) => {
|
|
65
|
+
const requestId = requestIdCounter++;
|
|
66
|
+
request.requestId = requestId; // Assign a unique ID to the request
|
|
67
|
+
const startTime = Date.now();
|
|
68
|
+
requestTimes.set(requestId, startTime);
|
|
69
|
+
// Initialize data for this request
|
|
70
|
+
networkData.push({
|
|
71
|
+
requestId,
|
|
72
|
+
requestStart: startTime,
|
|
73
|
+
requestUrl: request.url(),
|
|
74
|
+
method: request.method(),
|
|
75
|
+
status: "Pending",
|
|
76
|
+
responseTime: null,
|
|
77
|
+
responseReceived: null,
|
|
78
|
+
responseEnd: null,
|
|
79
|
+
size: null,
|
|
80
|
+
});
|
|
81
|
+
saveNetworkData();
|
|
82
|
+
});
|
|
83
|
+
// Event listener for when a response is received
|
|
84
|
+
page.on("response", async (response) => {
|
|
85
|
+
const request = response.request();
|
|
86
|
+
const requestId = request.requestId;
|
|
87
|
+
const receivedTime = Date.now();
|
|
88
|
+
// Find the corresponding data object
|
|
89
|
+
const data = networkData.find((item) => item.requestId === requestId);
|
|
90
|
+
if (data) {
|
|
91
|
+
data.status = response.status();
|
|
92
|
+
data.responseReceived = receivedTime;
|
|
93
|
+
saveNetworkData();
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
console.error("No data found for request ID", requestId);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
// Event listener for when a request is finished
|
|
100
|
+
page.on("requestfinished", async (request) => {
|
|
101
|
+
const requestId = request.requestId;
|
|
102
|
+
const endTime = Date.now();
|
|
103
|
+
const startTime = requestTimes.get(requestId);
|
|
104
|
+
const response = await request.response();
|
|
105
|
+
const timing = request.timing();
|
|
106
|
+
// Find the corresponding data object
|
|
107
|
+
const data = networkData.find((item) => item.requestId === requestId);
|
|
108
|
+
if (data) {
|
|
109
|
+
data.responseEnd = endTime;
|
|
110
|
+
data.responseTime = endTime - startTime;
|
|
111
|
+
// Get response size
|
|
112
|
+
try {
|
|
113
|
+
const body = await response.body();
|
|
114
|
+
data.size = body.length;
|
|
115
|
+
}
|
|
116
|
+
catch (e) {
|
|
117
|
+
data.size = 0;
|
|
118
|
+
}
|
|
119
|
+
const type = request.resourceType();
|
|
120
|
+
/*
|
|
121
|
+
domainLookupStart: 80.655,
|
|
122
|
+
domainLookupEnd: 80.668,
|
|
123
|
+
connectStart: 80.668,
|
|
124
|
+
secureConnectionStart: 106.688,
|
|
125
|
+
connectEnd: 129.69,
|
|
126
|
+
requestStart: 129.81,
|
|
127
|
+
responseStart: 187.006,
|
|
128
|
+
responseEnd: 188.209
|
|
129
|
+
*/
|
|
130
|
+
data.type = type;
|
|
131
|
+
data.domainLookupStart = timing.domainLookupStart;
|
|
132
|
+
data.domainLookupEnd = timing.domainLookupEnd;
|
|
133
|
+
data.connectStart = timing.connectStart;
|
|
134
|
+
data.secureConnectionStart = timing.secureConnectionStart;
|
|
135
|
+
data.connectEnd = timing.connectEnd;
|
|
136
|
+
data.requestStart = timing.requestStart;
|
|
137
|
+
data.responseStart = timing.responseStart;
|
|
138
|
+
data.responseEnd = timing.responseEnd;
|
|
139
|
+
saveNetworkData();
|
|
140
|
+
if (world && world.attach) {
|
|
141
|
+
world.attach(JSON.stringify(data), { mediaType: "application/json+network" });
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
console.error("No data found for request ID", requestId);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
// Event listener for when a request fails
|
|
149
|
+
page.on("requestfailed", async (request) => {
|
|
150
|
+
const requestId = request.requestId;
|
|
151
|
+
const endTime = Date.now();
|
|
152
|
+
const startTime = requestTimes.get(requestId);
|
|
153
|
+
try {
|
|
154
|
+
const res = await request.response();
|
|
155
|
+
const statusCode = res ? res.status() : request.failure().errorText;
|
|
156
|
+
// Find the corresponding data object
|
|
157
|
+
const data = networkData.find((item) => item.requestId === requestId);
|
|
158
|
+
if (data) {
|
|
159
|
+
data.responseEnd = endTime;
|
|
160
|
+
data.responseTime = endTime - startTime;
|
|
161
|
+
data.status = statusCode;
|
|
162
|
+
data.size = 0;
|
|
163
|
+
saveNetworkData();
|
|
164
|
+
if (world && world.attach) {
|
|
165
|
+
world.attach(JSON.stringify(data), { mediaType: "application/json+network" });
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
console.error("No data found for request ID", requestId);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
// ignore
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
console.error("No page found to register network events");
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
export { registerNetworkEvents, registerDownloadEvent };
|
|
183
|
+
//# sourceMappingURL=network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/network.ts"],"names":[],"mappings":"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"}
|