Skip to content

Commit 1aaf965

Browse files
authored
Merge pull request #485 from angrykoala/dev
Wendigo 3.0.1
2 parents bdc107a + 634df11 commit 1aaf965

File tree

15 files changed

+69
-51
lines changed

15 files changed

+69
-51
lines changed

.eslintrc-ts.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ module.exports = {
7171
"@typescript-eslint/no-unsafe-call": "off",
7272
"@typescript-eslint/no-unsafe-member-access": "off",
7373
"@typescript-eslint/no-unsafe-return": "off",
74+
"@typescript-eslint/no-unsafe-argument": "off",
7475
"@typescript-eslint/no-unused-expressions": "error",
7576
"@typescript-eslint/no-unused-vars": "off",
7677
"@typescript-eslint/no-use-before-define": "off",

.gitlab-ci.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,4 @@ test:
1212
stage: test
1313
retry: 1
1414
script:
15-
- npm run lint
1615
- npm test

.travis.yml

Lines changed: 0 additions & 12 deletions
This file was deleted.

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
3.0.1 / 2021-11-22
2+
==================
3+
4+
* Error serializing improved
5+
* Puppeteer updated to 11.0
6+
* Dependencies updated
7+
* Querystring deprecated in favor URLSearchParams
8+
* Travis removed from CI suite
9+
110
3.0.0 / 2021-03-04
211
==================
312

README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
_by @angrykoala_
66
[![npm](https://img.shields.io/npm/v/wendigo.svg)](https://www.npmjs.com/package/wendigo)
7-
[![Travis (.org)](https://img.shields.io/travis/angrykoala/wendigo/master.svg?label=travis)](https://travis-ci.org/angrykoala/wendigo)
87
[![Gitlab pipeline status](https://img.shields.io/gitlab/pipeline/angrykoala/wendigo/master.svg?label=gitlab-ci)](https://gitlab.com/angrykoala/wendigo/pipelines)
98
[![GitHub Workflow Status](https://img.shields.io/github/workflow/status/angrykoala/wendigo/test?label=github-actions)](https://github.com/angrykoala/wendigo/actions)
109

lib/browser/assertions/assertions_core.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,8 @@ export default class AssertionsCore {
128128
let url;
129129
try {
130130
url = await this._browser.url();
131-
} catch (err) {
132-
throw new FatalError("assert.url", `Can't obtain page url.${err.extraMessage || err.message}`);
131+
} catch (err: any) {
132+
throw new FatalError("assert.url", `Can't obtain page url.${err ?.extraMessage || err ?.message}`);
133133
}
134134
if (!matchText(url, expected)) {
135135
if (!msg) msg = `Expected url to be "${stringify(expected)}", "${url}" found`;

lib/browser/browser_core.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import path from 'path';
2-
import querystring from 'querystring';
32

43
import { stringifyLogText } from '../puppeteer_wrapper/puppeteer_utils';
54
import DomElement from '../models/dom_element';
@@ -104,7 +103,7 @@ export default abstract class BrowserCore {
104103
const response = await this._page.goto(url);
105104
this.initialResponse = response;
106105
return this._afterPageLoad();
107-
} catch (err) {
106+
} catch (err: any) {
108107
if (err instanceof FatalError) return Promise.reject(err);
109108
return Promise.reject(new FatalError("open", `Failed to open "${url}". ${err.message}`));
110109
}
@@ -128,7 +127,7 @@ export default abstract class BrowserCore {
128127
await this._beforeOpen({});
129128
await this.page.setContent(html);
130129
return this._afterPageLoad();
131-
} catch (err) {
130+
} catch (err: any) {
132131
if (err instanceof FatalError) return Promise.reject(err);
133132
return Promise.reject(new FatalError("setContent", `Failed to set content. ${err.message}`));
134133
}
@@ -161,7 +160,7 @@ export default abstract class BrowserCore {
161160
try {
162161
await p;
163162
await this.coreBrowser.close();
164-
} catch (err) {
163+
} catch (err: any) {
165164
return Promise.reject(new FatalError("close", `Failed to close browser. ${err.message}`));
166165
}
167166
}
@@ -250,7 +249,7 @@ export default abstract class BrowserCore {
250249
await this._page.addScriptTag({
251250
path: scriptPath
252251
});
253-
} catch (err) {
252+
} catch (err: any) {
254253
if (err.message === "Evaluation failed: Event") {
255254
const cspWarning = "This may be caused by the page Content Security Policy. Make sure the option bypassCSP is set to true in Wendigo.";
256255
throw new InjectScriptError("addScript", `Error injecting scripts. ${cspWarning}`); // CSP error
@@ -319,7 +318,8 @@ export default abstract class BrowserCore {
319318
if (qs[0] !== "?") qs = `?${qs}`;
320319
return qs;
321320
} else {
322-
return `?${querystring.stringify(qs)}`;
321+
const searchParams = new URLSearchParams(qs);
322+
return `?${searchParams.toString()}`;
323323
}
324324
}
325325

lib/browser/mixins/browser_wait.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,14 @@ export default abstract class BrowserWait extends BrowserNavigation {
2222

2323
try {
2424
if (typeof selector === 'string') {
25-
if(isXPathQuery(selector)){
25+
if (isXPathQuery(selector)) {
2626
await this._page.waitForXPath(selector, {
27-
timeout:timeout,
27+
timeout: timeout,
2828
visible: true
2929
})
3030
} else {
3131
await this._page.waitForSelector(selector, {
32-
timeout:timeout,
32+
timeout: timeout,
3333
visible: true
3434
})
3535
}
@@ -42,7 +42,7 @@ export default abstract class BrowserWait extends BrowserNavigation {
4242
timeout: timeout,
4343
}, ...serializedArgs);
4444
}
45-
} catch (error) {
45+
} catch (error: any) {
4646
let errMsg;
4747
if (typeof selector === 'function') errMsg = `Waiting for function to return true`;
4848
else errMsg = `Waiting for element "${selector}"`;
@@ -63,7 +63,7 @@ export default abstract class BrowserWait extends BrowserNavigation {
6363
const element = WendigoUtils.queryElement(q);
6464
return !WendigoUtils.isVisible(element);
6565
}, timeout, selector);
66-
} catch (err) {
66+
} catch (err: any) {
6767
throw this._overrideWaitError(err, {
6868
timeoutMessage: `Waiting for element "${selector}" to not be visible`,
6969
selector: `${selector}`,
@@ -95,7 +95,7 @@ export default abstract class BrowserWait extends BrowserNavigation {
9595
return currentUrl === expectedUrl;
9696
}
9797
}, timeout, parsedUrl);
98-
} catch (err) {
98+
} catch (err: any) {
9999
throw this._overrideWaitError(err, {
100100
timeoutMessage: `Waiting for url "${url}"`,
101101
timeout
@@ -120,7 +120,7 @@ export default abstract class BrowserWait extends BrowserNavigation {
120120
const w = window as any;
121121
return Boolean(w.WendigoUtils);
122122
}, timeout2);
123-
} catch (err) {
123+
} catch (err: any) {
124124
throw this._overrideWaitError(err, {
125125
timeoutMessage: "",
126126
timeout
@@ -148,7 +148,7 @@ export default abstract class BrowserWait extends BrowserNavigation {
148148
await this.waitFor((xp: string) => {
149149
return Boolean(WendigoUtils.xPathQuery(xp).length > 0);
150150
}, timeout, xPath);
151-
} catch (err) {
151+
} catch (err: any) {
152152
throw this._overrideWaitError(err, {
153153
timeoutMessage: `Waiting for text "${text}"`,
154154
timeout
@@ -163,7 +163,7 @@ export default abstract class BrowserWait extends BrowserNavigation {
163163
try {
164164
await this.waitFor(selector, timeout);
165165
return await this.click(selector);
166-
} catch (err) {
166+
} catch (err: any) {
167167
throw this._overrideWaitError(err, {
168168
timeoutMessage: "",
169169
timeout
@@ -197,7 +197,7 @@ export default abstract class BrowserWait extends BrowserNavigation {
197197
const value = element.getAttribute("disabled");
198198
return value === null;
199199
}, timeout, selector);
200-
} catch (err) {
200+
} catch (err: any) {
201201
throw this._overrideWaitError(err, {
202202
timeoutMessage: `Waiting for element "${selector}" to be enabled`,
203203
timeout

lib/decorators/override_error.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export default function OverrideError(errorPrefix?: string): DecoratorFunction {
88
const originalThis = this as any;
99
try {
1010
return await originalMethod.bind(originalThis)(...args);
11-
} catch (err) {
11+
} catch (err: any) {
1212
const fullMethodName = `${errorPrefix ? errorPrefix + "." : ""}${propertyKey}`;
1313
throw WendigoError.overrideFnName(err, fullMethodName);
1414
}

lib/puppeteer_wrapper/puppeteer_page.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,11 @@ export default class PuppeteerPage {
5050
}
5151

5252
public on(eventName: string, cb: (msg: any) => void): void {
53-
this.page.on(eventName, cb);
53+
this.page.on(eventName as any, cb);
5454
}
5555

5656
public off(eventName: string, cb: (msg: any) => void): void {
57-
this.page.off(eventName, cb);
57+
this.page.off(eventName as any, cb);
5858
}
5959

6060
public evaluateHandle(cb: string | ((...args: any[]) => any), ...args: Array<SerializableOrJSHandle>): Promise<JSHandle> {

lib/puppeteer_wrapper/puppeteer_utils.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { ConsoleMessage, JSHandle } from './puppeteer_types';
22

33
export async function stringifyLogText(log: ConsoleMessage): Promise<string> {
44
const text = log.text();
5-
if (text.includes('JSHandle@object')) {
5+
if (text.includes('JSHandle@object') || text.includes('JSHandle@error')) {
66
const args = await Promise.all(log.args().map(stringifyLogArg));
77
return args.join(' ');
88
}
@@ -11,9 +11,11 @@ export async function stringifyLogText(log: ConsoleMessage): Promise<string> {
1111

1212
function stringifyLogArg(arg: JSHandle): Promise<string> {
1313
return arg.executionContext().evaluate((element: any) => {
14-
if (typeof element === 'object' && !(element instanceof RegExp)) { // Executed inside context, lodash not available
14+
if ((typeof element === 'object') && !(element instanceof RegExp)) { // Executed inside context, lodash not available
1515
try {
16-
element = JSON.stringify(element);
16+
element = element instanceof Error ?
17+
JSON.stringify(element, Object.getOwnPropertyNames(element)) :
18+
JSON.stringify(element);
1719
} catch (err) {
1820
if (err instanceof TypeError) { // Converting circular structure
1921
} else throw err;

package.json

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "wendigo",
3-
"version": "3.0.0",
3+
"version": "3.0.1",
44
"description": "A proper monster for front-end automated testing",
55
"engines": {
66
"node": ">=8.0.0"
@@ -44,21 +44,21 @@
4444
"compositer": "^1.3.6",
4545
"is-class": "0.0.9",
4646
"lodash.isregexp": "^4.0.1",
47-
"puppeteer": "~8.0.0"
47+
"puppeteer": "~11.0.0"
4848
},
4949
"devDependencies": {
5050
"@types/lodash.isregexp": "^4.0.6",
51-
"@types/mocha": "^8.2.2",
52-
"@types/node": "^14.14.37",
53-
"@typescript-eslint/eslint-plugin": "^4.20.0",
54-
"@typescript-eslint/parser": "^4.20.0",
51+
"@types/mocha": "^9.0.0",
52+
"@types/node": "^16.11.9",
53+
"@typescript-eslint/eslint-plugin": "^5.4.0",
54+
"@typescript-eslint/parser": "^5.4.0",
5555
"basic-auth": "^2.0.1",
56-
"eslint": "^7.23.0",
56+
"eslint": "^8.3.0",
5757
"eslint-plugin-prefer-arrow": "^1.2.3",
5858
"express": "^4.17.1",
59-
"markdownlint-cli": "^0.27.1",
60-
"mocha": "^8.3.2",
61-
"sinon": "^10.0.0",
62-
"typescript": "4.2.3"
59+
"markdownlint-cli": "^0.30.0",
60+
"mocha": "^9.1.3",
61+
"sinon": "^12.0.1",
62+
"typescript": "4.5.2"
6363
}
6464
}

tests/browser/wait_for_request.test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ describe("Wait For Request", function() {
111111
browser.clickText("click me");
112112
}, 100);
113113
await browser.assert.requests.url(/api/).exactly(0);
114-
await browser.requests.waitForNextRequest("http://localhost:3456/api");
114+
await browser.requests.waitForNextRequest("http://localhost:3456/api", 1000);
115115
await browser.assert.requests.url(/api/);
116116
});
117117

@@ -129,7 +129,7 @@ describe("Wait For Request", function() {
129129
browser.clickText("click me");
130130
}, 100);
131131
await browser.assert.requests.url(/api/).exactly(0);
132-
await browser.requests.waitForNextRequest(/api/);
132+
await browser.requests.waitForNextRequest(/api/, 1000);
133133
await browser.assert.requests.url(/api/);
134134
});
135135

tests/browser_modules/browser_console.test.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,4 +132,15 @@ describe("Console", function() {
132132
assert.strictEqual(logList.length, 2);
133133
assert.strictEqual(logList[1].text, "JSHandle@node");
134134
});
135+
136+
it("Log Thrown Error", async() => {
137+
await browser.click(".thrownError");
138+
await browser.wait(10);
139+
const logList = browser.console.all();
140+
assert.strictEqual(logList.length, 2);
141+
const errMessage = `{"stack":"Error: Thrown Error\\n` +
142+
` at thrownError (http://localhost:3456/console.html:34:23)\\n` +
143+
` at HTMLButtonElement.onclick (http://localhost:3456/console.html:13:61)","message":"Thrown Error"}`;
144+
assert.strictEqual(logList[1].text, `Error: ${errMessage}`);
145+
});
135146
});

tests/dummy_server/static/console.html

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
<button class="btn log" onclick="info()">click me</button>
1111
<button class="btn error" onclick="error()">error</button>
1212
<button class="btn circular" onclick="circularLog()">circular</button>
13+
<button class="btn thrownError" onclick="thrownError()">thrownError</button>
1314

1415
<script>
1516
console.log("Normal Log", { msg: "Object Log" })
@@ -27,6 +28,14 @@
2728
obj.test=obj;
2829
console.log(obj);
2930
}
31+
32+
function thrownError() {
33+
try {
34+
throw new Error("Thrown Error");
35+
} catch (error) {
36+
console.error("Error:", error);
37+
}
38+
}
3039
</script>
3140
</body>
3241

0 commit comments

Comments
 (0)