From e836d4d8771fc471cde347b61d57ebf3b4feefbd Mon Sep 17 00:00:00 2001 From: Ernestas_Zekas Date: Fri, 15 May 2020 12:56:09 +0300 Subject: [PATCH] - Added console logs support in environment.js file; - Added enableConsoleLogs method in helpers class; - Refactored goToUrlAndLoad method in helpers class to accept timeout parameter; - Changed eslintrc.js file parameter linebreak-style to unix. --- .eslintrc.js | 2 +- example/tests/helpers.test.js | 6 +++--- example/tests/interceptor.test.js | 1 + framework/helpers.js | 30 ++++++++++++++++++++++++++++-- test-environment/environment.js | 21 +++++++++++++++++++++ 5 files changed, 54 insertions(+), 6 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 2ed114b..b256f07 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -22,7 +22,7 @@ module.exports = { ], "linebreak-style": [ "error", - "windows" + "unix" ], "quotes": [ "error", diff --git a/example/tests/helpers.test.js b/example/tests/helpers.test.js index a53b2b5..e99ddc0 100644 --- a/example/tests/helpers.test.js +++ b/example/tests/helpers.test.js @@ -1,4 +1,4 @@ -/*global page:true browser*/ +/*global page:true*/ import { Element, Helpers } from "test-juggler"; const fs = require("fs"); @@ -40,11 +40,11 @@ describe("Helpers", () => { it("should wait for navigation to be finished", async () => { //Arrange - page = await browser.newPage(); const progressLoader = new Element("html.nprogress-busy"); + const loadTimeout = 30000; //Act - await helpers.goToUrlAndLoad("https://www.jqueryscript.net/demo/jQuery-Html5-Based-Preloader-Plugin-html5loader/"); + await helpers.goToUrlAndLoad("https://www.jqueryscript.net/demo/jQuery-Html5-Based-Preloader-Plugin-html5loader/", loadTimeout); //Assert await expect(progressLoader.exists()).resolves.toBeFalsy(); diff --git a/example/tests/interceptor.test.js b/example/tests/interceptor.test.js index 8ea89ff..87d2958 100644 --- a/example/tests/interceptor.test.js +++ b/example/tests/interceptor.test.js @@ -14,6 +14,7 @@ describe("Interceptor", () => { console.log(`Running test: '${jasmine["currentTest"].fullName}'`); //this is workaraound to avoid 'Request is already handled!' error. Shoud be removed when https://github.com/smooth-code/jest-puppeteer/issues/308 defect is fixed. page = await browser.newPage(); + helpers.enableConsoleLogs(); }); it("should block requests by any url fragment while test case running", async () => { diff --git a/framework/helpers.js b/framework/helpers.js index 4bba38b..43e973a 100644 --- a/framework/helpers.js +++ b/framework/helpers.js @@ -1,6 +1,8 @@ /*global page*/ const fs = require("fs"); const retry = require("async-retry"); +const config = require(process.cwd() + "/framework.config"); +const defaultTimeout = config.defaultTimeout; export default class Helpers { async takeScreenshot(filename) { @@ -22,9 +24,9 @@ export default class Helpers { }); } - async goToUrlAndLoad(url) { + async goToUrlAndLoad(url, timeout = defaultTimeout) { await page.goto(url, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", timeout: timeout }); } @@ -33,4 +35,28 @@ export default class Helpers { const elementHandle = await page.$(selector); return await elementHandle.contentFrame(); } + + async enableConsoleLogs() { + const chalk = require("chalk"); + page + .on("console", msg => { + const type = msg.type().substr(0, 3).toUpperCase(); + const colors = { + LOG: text => text, + ERR: chalk.red, + WAR: chalk.yellow, + INF: chalk.cyan + }; + const color = colors[type] || chalk.blue; + console.log(color(`${type} ${msg.text()}`)); + }) + .on("pageerror", ({ message }) => console.log(chalk.red(message))) + .on("response", response => { + if (response.status() > 399) + { + console.log(chalk.red(`${response.status()} ${response.url()}`)); + }}) + .on("requestfailed", request => + console.log(chalk.magenta(`${request.failure().errorText} ${request.url()}`))); + } } \ No newline at end of file diff --git a/test-environment/environment.js b/test-environment/environment.js index dd6dce1..713bd65 100644 --- a/test-environment/environment.js +++ b/test-environment/environment.js @@ -6,6 +6,27 @@ class CustomEnvironment extends PuppeteerEnvironment { async setup() { await super.setup(); this.global.page.setDefaultTimeout(config.defaultTimeout); + const chalk = require("chalk"); + this.global.page + .on("console", msg => { + const type = msg.type().substr(0, 3).toUpperCase(); + const colors = { + LOG: text => text, + ERR: chalk.red, + WAR: chalk.yellow, + INF: chalk.cyan + }; + const color = colors[type] || chalk.blue; + console.log(color(`${type} ${msg.text()}`)); + }) + .on("pageerror", ({ message }) => console.log(chalk.red(message))) + .on("response", response => { + if (response.status() > 399) + { + console.log(chalk.red(`${response.status()} ${response.url()}`)); + }}) + .on("requestfailed", request => + console.log(chalk.magenta(`${request.failure().errorText} ${request.url()}`))); if (config.useTracing) { const targetDir = "./logs/Timelines"; fs.mkdirSync(targetDir, { recursive: true });