froth-webdriverio-framework 4.0.35 → 4.0.37
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.
|
@@ -18,9 +18,8 @@ async function assertText(elementSelector, expectedText) {
|
|
|
18
18
|
let annotationMessage = `Assertion failed. Expected text: ${expectedText}.`;
|
|
19
19
|
await amendToBrowserstack(annotationMessage, "error");
|
|
20
20
|
if (!browser.testErrors) browser.testErrors = [];
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
// assert.fail(`Text assertion failed: ${error.message}`);
|
|
21
|
+
// browser.testErrors.push(`Assertion failed.: ${error.message}`);
|
|
22
|
+
assert.fail(`Text assertion failed: ${error.message}`);
|
|
24
23
|
}
|
|
25
24
|
|
|
26
25
|
|
|
@@ -29,8 +28,8 @@ async function assertText(elementSelector, expectedText) {
|
|
|
29
28
|
let annotationMessage = `Error occurred while verifying text: ${error.message}.`;
|
|
30
29
|
await amendToBrowserstack(annotationMessage, "error");
|
|
31
30
|
if (!browser.testErrors) browser.testErrors = [];
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
// browser.testErrors.push(`Assertion failed.: ${error.message}`);
|
|
32
|
+
assert.fail(`Text assertion failed: ${error.message}`);
|
|
34
33
|
// throw error;
|
|
35
34
|
}
|
|
36
35
|
|
|
@@ -56,16 +55,16 @@ async function assertAttributeValue(elementSelector, attributeName, expectedText
|
|
|
56
55
|
await amendToBrowserstack(annotationMessage, "error");
|
|
57
56
|
console.log("Assertion failed. Expected text: ", expectedText);
|
|
58
57
|
if (!browser.testErrors) browser.testErrors = [];
|
|
59
|
-
|
|
60
|
-
|
|
58
|
+
// browser.testErrors.push(`Assertion failed.: ${error.message}`);
|
|
59
|
+
assert.fail(`Text assertion failed: ${error.message}`);
|
|
61
60
|
}
|
|
62
61
|
} catch (error) {
|
|
63
62
|
console.error('Error occurred while verifying text:', error);
|
|
64
63
|
let annotationMessage = `Error occurred while asserting Attribute: ${error.message}.`;
|
|
65
64
|
await amendToBrowserstack(annotationMessage, "error");
|
|
66
65
|
if (!browser.testErrors) browser.testErrors = [];
|
|
67
|
-
|
|
68
|
-
|
|
66
|
+
// browser.testErrors.push(`Assertion failed.: ${error.message}`);
|
|
67
|
+
assert.fail(`Text assertion failed: ${error.message}`);
|
|
69
68
|
}
|
|
70
69
|
|
|
71
70
|
|
|
@@ -3,7 +3,6 @@ const url = require('url');
|
|
|
3
3
|
const fs = require('fs');
|
|
4
4
|
const { LocalStorage } = require('node-localstorage');
|
|
5
5
|
global.BUFFER = new LocalStorage('./storage');
|
|
6
|
-
global.suite_info = null;
|
|
7
6
|
const setAllDetails = require("./setallDatailinBuffer")
|
|
8
7
|
const exeDetails = require("../froth_api_calls/getexecutionDetails")
|
|
9
8
|
const getBSSessionDetails = require("../froth_api_calls/browsersatckSessionInfo").getBSSessionDetails;
|
|
@@ -48,6 +47,7 @@ const commonconfig = {
|
|
|
48
47
|
// Perform any setup or pre-test actions here
|
|
49
48
|
console.log("specdat:", specs);
|
|
50
49
|
console.log("length:", specs.length);
|
|
50
|
+
//checking the syntax error in the test files
|
|
51
51
|
for (const fileUrl of specs) {
|
|
52
52
|
const filePath = url.fileURLToPath(fileUrl); // convert file:// URL to file path
|
|
53
53
|
try {
|
|
@@ -74,7 +74,7 @@ const commonconfig = {
|
|
|
74
74
|
);
|
|
75
75
|
process.exit(1);
|
|
76
76
|
}
|
|
77
|
-
|
|
77
|
+
// set the capability like media and app and bs local
|
|
78
78
|
if (process.env.PLATFORM === 'browserstack') {
|
|
79
79
|
/// console.log("capabilities:", capabilities);
|
|
80
80
|
capabilities.browserstackLocal = process.env.BROWSERSTACK_LOCAL;
|
|
@@ -142,9 +142,7 @@ const commonconfig = {
|
|
|
142
142
|
|
|
143
143
|
console.log('==== BEFORE TEST HOOK ====');
|
|
144
144
|
console.log(`====> Test Started '${test.title}'`);
|
|
145
|
-
|
|
146
|
-
// console.log("File Name:", test.file);
|
|
147
|
-
|
|
145
|
+
|
|
148
146
|
},
|
|
149
147
|
|
|
150
148
|
|
|
@@ -171,30 +169,16 @@ const commonconfig = {
|
|
|
171
169
|
let scriptresult = "NOT RUN";
|
|
172
170
|
// Default assumption: test passed (unless soft assertion failed)
|
|
173
171
|
let finalPassed = passed;
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
// Check soft assertion failures
|
|
177
|
-
const softErrors = browser.testErrors || [];
|
|
178
|
-
if (softErrors.length > 0) {
|
|
179
|
-
finalPassed = false; // Override status
|
|
180
|
-
const softErrorMessage = `Soft assertion errors: ${softErrors.join('<br>')}`;
|
|
181
|
-
console.log('====> Soft Assertion Failures Detected:\n' + softErrorMessage);
|
|
182
|
-
|
|
183
|
-
// Log in resultdetails
|
|
184
|
-
resultdetails.comments.push(`${test.title} - failed: ${softErrorMessage}`);
|
|
185
|
-
global.__SOFT_FAIL__ = true;
|
|
186
|
-
// Overwrite the error param so your logic can pick it up
|
|
187
|
-
combinedError = new Error(softErrorMessage);
|
|
188
|
-
}
|
|
189
|
-
if (finalPassed) {
|
|
172
|
+
|
|
173
|
+
if (passed) {
|
|
190
174
|
scriptresult = "PASSED"
|
|
191
175
|
resultdetails.comments.push(`${test.title} - passed`);
|
|
192
176
|
}
|
|
193
|
-
else if (!finalPassed ||
|
|
177
|
+
else if (!finalPassed || error) {
|
|
194
178
|
scriptresult = "FAILED"
|
|
195
|
-
console.log(`====> Failed or error while executing the test: ${
|
|
179
|
+
console.log(`====> Failed or error while executing the test: ${error ? error.message : "Test failed"}`);
|
|
196
180
|
if (!resultdetails.comments.some(comment => typeof comment === 'string' && comment.includes(test.title)))
|
|
197
|
-
resultdetails.comments.push(`${test.title} - failed: ${
|
|
181
|
+
resultdetails.comments.push(`${test.title} - failed: ${error ? error.message : "Test failed"}`);
|
|
198
182
|
|
|
199
183
|
}
|
|
200
184
|
|
|
@@ -211,10 +195,7 @@ const commonconfig = {
|
|
|
211
195
|
jwtScript.scriptId,
|
|
212
196
|
jwtScript.platform.toLowerCase(),
|
|
213
197
|
scriptresult)
|
|
214
|
-
|
|
215
|
-
if (softErrors.length > 0) {
|
|
216
|
-
throw combinedError; // 👈 this is what forces the test to fail in WDIO
|
|
217
|
-
}
|
|
198
|
+
|
|
218
199
|
|
|
219
200
|
},
|
|
220
201
|
/**
|
|
@@ -235,7 +216,7 @@ const commonconfig = {
|
|
|
235
216
|
after: async function (result, config, capabilities, specs) {
|
|
236
217
|
console.log('==== AFTER HOOK ====');
|
|
237
218
|
console.log('====> All tests are completed.' + result);
|
|
238
|
-
BUFFER.setItem("RESULT_DATA",
|
|
219
|
+
BUFFER.setItem("RESULT_DATA", result);
|
|
239
220
|
console.log("====> Result data :" + BUFFER.getItem("RESULT_DATA"))
|
|
240
221
|
/// const resultdetails = {}
|
|
241
222
|
resultdetails.excution_status = BUFFER.getItem("RESULT_DATA") == 0 ? 'PASSED' : 'FAILED'
|
|
@@ -303,10 +284,7 @@ const commonconfig = {
|
|
|
303
284
|
console.log('Execution Time:', results.duration);
|
|
304
285
|
console.log('Exit Code:', exitCode);
|
|
305
286
|
console.log('==== ALL TESTS ARE COMPLETED ====');
|
|
306
|
-
|
|
307
|
-
console.log('❌ One or more tests failed due to soft assertion.');
|
|
308
|
-
process.exit(1); // ✅ Force failure
|
|
309
|
-
}
|
|
287
|
+
|
|
310
288
|
|
|
311
289
|
return exitCode;
|
|
312
290
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "froth-webdriverio-framework",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.37",
|
|
4
4
|
"readme": "WebdriverIO Integration",
|
|
5
5
|
"description": "WebdriverIO and BrowserStack App Automate",
|
|
6
6
|
"license": "MIT",
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
"chai": "^5.1.1",
|
|
40
40
|
"crypto-js": "^4.2.0",
|
|
41
41
|
"deepmerge": "^4.3.1",
|
|
42
|
+
"express": "^5.1.0",
|
|
42
43
|
"form-data": "^4.0.0",
|
|
43
44
|
"fs": "^0.0.1-security",
|
|
44
45
|
"js-yaml": "^4.1.0",
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
const express = require('express');
|
|
2
|
+
const app = express();
|
|
3
|
+
|
|
4
|
+
// Middleware to parse JSON payloads
|
|
5
|
+
app.use(express.json());
|
|
6
|
+
|
|
7
|
+
// Define the webhook path (match the path used in smee or GitHub webhook)
|
|
8
|
+
app.post('/webhook', (request, response) => {
|
|
9
|
+
// Respond early so GitHub doesn't time out
|
|
10
|
+
response.status(202).send('Accepted');
|
|
11
|
+
|
|
12
|
+
// Get event type from header
|
|
13
|
+
const githubEvent = request.headers['x-github-event'];
|
|
14
|
+
console.log(`Received event: ${githubEvent}`);
|
|
15
|
+
|
|
16
|
+
const data = request.body;
|
|
17
|
+
|
|
18
|
+
// Handle specific GitHub events
|
|
19
|
+
if (githubEvent === 'issues') {
|
|
20
|
+
const action = data.action;
|
|
21
|
+
console.log(`Received action: ${action}`);
|
|
22
|
+
|
|
23
|
+
if (action === 'opened') {
|
|
24
|
+
console.log(`An issue was opened with this title: ${data.issue.title}`);
|
|
25
|
+
} else if (action === 'closed') {
|
|
26
|
+
console.log(`An issue was closed by ${data.issue.user.login}`);
|
|
27
|
+
} else {
|
|
28
|
+
console.log(`Unhandled action for the issue event: ${action}`);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
} else if (githubEvent === 'ping') {
|
|
32
|
+
console.log('GitHub sent the ping event');
|
|
33
|
+
|
|
34
|
+
} else {
|
|
35
|
+
// For all other events
|
|
36
|
+
console.log(`Unhandled event: ${githubEvent}`);
|
|
37
|
+
console.log(`Payload: ${JSON.stringify(data, null, 2)}`);
|
|
38
|
+
|
|
39
|
+
if (data.action) {
|
|
40
|
+
console.log(`Received action: ${data.action}`);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (data.workflow_run) {
|
|
44
|
+
console.log(`Workflow run ID: ${data.workflow_run.id}`);
|
|
45
|
+
console.log(`Workflow name: ${data.workflow_run.name}`);
|
|
46
|
+
console.log(`Status: ${data.workflow_run.status}`);
|
|
47
|
+
console.log(`Conclusion: ${data.workflow_run.conclusion}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
// Start server on port 3000
|
|
53
|
+
const port = 3000;
|
|
54
|
+
app.listen(port, () => {
|
|
55
|
+
console.log(`Server is running on port ${port}`);
|
|
56
|
+
});
|