@applitools/dom-utils
Advanced tools
Comparing version 1.1.0 to 2.0.1
@@ -11,3 +11,3 @@ 'use strict'; | ||
const { Location, GeneralUtils, PerformanceUtils } = require('@applitools/eyes.sdk.core'); | ||
const { Location, GeneralUtils, PerformanceUtils } = require('@applitools/eyes-sdk-core'); | ||
@@ -27,3 +27,10 @@ class DomCapture { | ||
constructor() { | ||
/** | ||
* @param {Logger} logger | ||
* @param {EyesWebDriver|WebDriver} driver | ||
*/ | ||
constructor(logger, driver) { | ||
this._logger = logger; | ||
this._driver = driver; | ||
this._frameBundledCssPromises = []; | ||
@@ -34,5 +41,5 @@ } | ||
* @param {Logger} logger A Logger instance. | ||
* @param {EyesWebDriver} driver | ||
* @param {EyesWebDriver|WebDriver} driver | ||
* @param {PositionProvider} [positionProvider] | ||
* @return {Promise.<string>} | ||
* @return {Promise<string>} | ||
*/ | ||
@@ -58,3 +65,3 @@ static async getFullWindowDom(logger, driver, positionProvider) { | ||
* @param {EyesWebDriver} driver | ||
* @return {Promise.<string>} | ||
* @return {Promise<string>} | ||
*/ | ||
@@ -90,4 +97,4 @@ static async getWindowDom(logger, driver) { | ||
const domCapture = new DomCapture(); | ||
await domCapture._getFrameDom(logger, driver, { childNodes: [domTree], tagName: 'OUTER_HTML' }); | ||
const domCapture = new DomCapture(logger, driver); | ||
await domCapture._getFrameDom({ childNodes: [domTree], tagName: 'OUTER_HTML' }); | ||
await Promise.all(domCapture._frameBundledCssPromises); | ||
@@ -98,10 +105,8 @@ return domTree; | ||
/** | ||
* @param {Logger} logger | ||
* @param {EyesWebDriver} driver | ||
* @param {object} domTree | ||
* @return {Promise.<object>} | ||
* @return {Promise<object>} | ||
* @private | ||
*/ | ||
async _getFrameDom(logger, driver, domTree) { | ||
const tagName = domTree.tagName; | ||
async _getFrameDom(domTree) { | ||
const { tagName } = domTree; | ||
@@ -114,6 +119,6 @@ if (!tagName) { | ||
await this._loop(logger, driver, domTree, async domSubTree => { | ||
await driver.switchTo().frame(frameIndex); | ||
await this._getFrameDom(logger, driver, domSubTree); | ||
await driver.switchTo().parentFrame(); | ||
await this._loop(domTree, async domSubTree => { | ||
await this._driver.switchTo().frame(frameIndex); | ||
await this._getFrameDom(domSubTree); | ||
await this._driver.switchTo().parentFrame(); | ||
frameIndex += 1; | ||
@@ -123,6 +128,3 @@ }); | ||
/** | ||
* @param {Logger} logger | ||
* @param {EyesWebDriver} driver | ||
* @param {object} domTree | ||
@@ -133,4 +135,4 @@ * @param {function} fn | ||
*/ | ||
async _loop(logger, driver, domTree, fn) { | ||
const childNodes = domTree.childNodes; | ||
async _loop(domTree, fn) { | ||
const { childNodes } = domTree; | ||
if (!childNodes) { | ||
@@ -146,3 +148,3 @@ return; | ||
if (node && node.tagName.toUpperCase() === 'HTML') { | ||
await this._getFrameBundledCss(logger, driver, node); | ||
await this._getFrameBundledCss(node); | ||
} | ||
@@ -161,4 +163,2 @@ | ||
/** | ||
* @param {Logger} logger | ||
* @param {EyesWebDriver} driver | ||
* @param node | ||
@@ -168,14 +168,14 @@ * @return {Promise<void>} | ||
*/ | ||
async _getFrameBundledCss(logger, driver, node) { | ||
const currentUrl = await driver.getCurrentUrl(); | ||
async _getFrameBundledCss(node) { | ||
const currentUrl = await this._driver.getCurrentUrl(); | ||
if (!GeneralUtils.isAbsoluteUrl(currentUrl)) { | ||
logger.verbose('WARNING! Base URL is not an absolute URL!'); | ||
this._logger.verbose('WARNING! Base URL is not an absolute URL!'); | ||
} | ||
const timeStart = PerformanceUtils.start(); | ||
const result = await driver.executeScript(DomCapture.CAPTURE_CSSOM_SCRIPT); | ||
logger.verbose(`executing javascript to capture css took ${timeStart.end().summary}`); | ||
const result = await this._driver.executeScript(DomCapture.CAPTURE_CSSOM_SCRIPT); | ||
this._logger.verbose(`executing javascript to capture css took ${timeStart.end().summary}`); | ||
const promise = this._processFrameBundledCss(logger, driver, currentUrl, node, result); | ||
const promise = this._processFrameBundledCss(currentUrl, node, result); | ||
this._frameBundledCssPromises.push(promise); | ||
@@ -185,4 +185,2 @@ } | ||
/** | ||
* @param {Logger} logger | ||
* @param {EyesWebDriver} driver | ||
* @param {string} currentUrl | ||
@@ -194,3 +192,3 @@ * @param node | ||
*/ | ||
async _processFrameBundledCss(logger, driver, currentUrl, node, result) { | ||
async _processFrameBundledCss(currentUrl, node, result) { | ||
let sb = ''; | ||
@@ -201,13 +199,13 @@ for (const item of result) { | ||
const value = item.substring(5); | ||
logger.verbose(`splitting css result item took ${timeStart.end().summary}`); | ||
this._logger.verbose(`splitting css result item took ${timeStart.end().summary}`); | ||
let css; | ||
if (kind === 'text:') { | ||
css = await this._parseAndSerializeCss(logger, currentUrl, value); | ||
css = await this._parseAndSerializeCss(currentUrl, value); | ||
} else { | ||
css = await this._downloadCss(logger, currentUrl, value); | ||
css = await this._downloadCss(currentUrl, value); | ||
} | ||
css = await this._parseAndSerializeCss(logger, currentUrl, css); | ||
css = await this._parseAndSerializeCss(currentUrl, css); | ||
timeStart = PerformanceUtils.start(); | ||
sb += css; | ||
logger.verbose(`appending CSS to StringBuilder took ${timeStart.end().summary}`); | ||
this._logger.verbose(`appending CSS to StringBuilder took ${timeStart.end().summary}`); | ||
} | ||
@@ -219,3 +217,2 @@ | ||
/** | ||
* @param {Logger} logger | ||
* @param {string} baseUri | ||
@@ -226,3 +223,3 @@ * @param {string} css | ||
*/ | ||
async _parseAndSerializeCss(logger, baseUri, css) { | ||
async _parseAndSerializeCss(baseUri, css) { | ||
const timeStart = PerformanceUtils.start(); | ||
@@ -236,5 +233,5 @@ let stylesheet; | ||
} | ||
logger.verbose(`parsing CSS string took ${timeStart.end().summary}`); | ||
this._logger.verbose(`parsing CSS string took ${timeStart.end().summary}`); | ||
css = await this._serializeCss(logger, baseUri, stylesheet); | ||
css = await this._serializeCss(baseUri, stylesheet); | ||
return css; | ||
@@ -244,3 +241,2 @@ } | ||
/** | ||
* @param {Logger} logger | ||
* @param {string} baseUri | ||
@@ -251,3 +247,3 @@ * @param {object} stylesheet | ||
*/ | ||
async _serializeCss(logger, baseUri, stylesheet) { | ||
async _serializeCss(baseUri, stylesheet) { | ||
const timeStart = PerformanceUtils.start(); | ||
@@ -260,10 +256,10 @@ let sb = ''; | ||
if (ruleSet.name === 'import') { | ||
logger.verbose('encountered @import rule'); | ||
this._logger.verbose('encountered @import rule'); | ||
const href = cssUrlParser(ruleSet.parameters); | ||
css = await this._downloadCss(logger, baseUri, href[0]); | ||
css = await this._downloadCss(baseUri, href[0]); | ||
css = css.trim(); | ||
logger.verbose(`imported CSS (whitespaces trimmed) length: ${css.length}`); | ||
this._logger.verbose(`imported CSS (whitespaces trimmed) length: ${css.length}`); | ||
addAsIs = css.length === 0; | ||
if (!addAsIs) { | ||
css = await this._parseAndSerializeCss(logger, baseUri, css); | ||
css = await this._parseAndSerializeCss(baseUri, css); | ||
sb += css; | ||
@@ -274,5 +270,2 @@ } | ||
if (addAsIs) { | ||
const node = { | ||
rules: [ruleSet], | ||
}; | ||
const stringifier = new shadyCss.Stringifier(); | ||
@@ -283,3 +276,3 @@ sb += stringifier.stringify(ruleSet); | ||
logger.verbose(`serializing CSS to StringBuilder took ${timeStart.end().summary}`); | ||
this._logger.verbose(`serializing CSS to StringBuilder took ${timeStart.end().summary}`); | ||
return sb.toString(); | ||
@@ -289,3 +282,2 @@ } | ||
/** | ||
* @param {Logger} logger | ||
* @param {string} baseUri | ||
@@ -297,5 +289,5 @@ * @param {string} value | ||
*/ | ||
async _downloadCss(logger, baseUri, value, retriesCount = 1) { | ||
async _downloadCss(baseUri, value, retriesCount = 1) { | ||
try { | ||
logger.verbose(`Given URL to download: ${value}`); | ||
this._logger.verbose(`Given URL to download: ${value}`); | ||
// let href = cssParser.parse(value); | ||
@@ -310,9 +302,9 @@ let href = value; | ||
const css = response.data; | ||
logger.verbose(`downloading CSS in length of ${css.length} chars took ${timeStart.end().summary}`); | ||
this._logger.verbose(`downloading CSS in length of ${css.length} chars took ${timeStart.end().summary}`); | ||
return css; | ||
} catch (ex) { | ||
logger.verbose(ex.toString()); | ||
this._logger.verbose(ex.toString()); | ||
if (retriesCount > 0) { | ||
retriesCount -= 1; | ||
return this._downloadCss(logger, baseUri, value, retriesCount); | ||
return this._downloadCss(baseUri, value, retriesCount); | ||
} | ||
@@ -319,0 +311,0 @@ return ''; |
@@ -23,6 +23,5 @@ /* eslint-disable */ | ||
} | ||
} catch (ex) { | ||
} finally { | ||
return obj; | ||
} catch (ignored) { | ||
} | ||
return obj; | ||
} | ||
@@ -46,3 +45,3 @@ | ||
if (el.hasAttributes()) { | ||
var attrs = el.attributes; | ||
const attrs = el.attributes; | ||
for (const p of attrs) { | ||
@@ -52,4 +51,3 @@ attributes[p.name] = p.value; | ||
} | ||
} | ||
else { | ||
} else { | ||
if (attributeProps.all) { | ||
@@ -67,2 +65,3 @@ for (const p of attributeProps.all) { | ||
} | ||
return { | ||
@@ -69,0 +68,0 @@ tagName, |
{ | ||
"name": "@applitools/dom-utils", | ||
"version": "1.1.0", | ||
"version": "2.0.1", | ||
"description": "Applitools DOM Utils is a shared utility package", | ||
@@ -27,3 +27,3 @@ "keywords": [ | ||
"dependencies": { | ||
"@applitools/eyes.sdk.core": "^2.2.2", | ||
"@applitools/eyes-sdk-core": "^4.0.1", | ||
"axios": "^0.18.0", | ||
@@ -34,10 +34,8 @@ "css-url-parser": "^1.1.3", | ||
"devDependencies": { | ||
"chromedriver": "^2.43.1", | ||
"dateformat": "^3.0.3", | ||
"mocha": "^5.2.0", | ||
"selenium-webdriver": "^4.0.0-alpha.1" | ||
"selenium-webdriver": "^4.0.0-alpha.1", | ||
"chromedriver": "^2.43.1" | ||
}, | ||
"scripts": { | ||
"test:unit": "mocha ./test/unit/**/*.spec.js -t 900000", | ||
"test": "npm run test:unit" | ||
"test": "mocha ./test/**/*.spec.js -t 900000" | ||
}, | ||
@@ -44,0 +42,0 @@ "license": "SEE LICENSE IN LICENSE", |
Deprecated
MaintenanceThe maintainer of the package marked it as deprecated. This could indicate that a single version should not be used, or that the package is no longer maintained and any new vulnerabilities will not be fixed.
Found 1 instance in 1 package
3
26954
347
1
+ Added@applitools/eyes-common@1.3.1(transitive)
+ Added@applitools/eyes-sdk-core@4.9.1(transitive)
+ Addedargparse@1.0.10(transitive)
+ Addedcaller-callsite@2.0.0(transitive)
+ Addedcaller-path@2.0.0(transitive)
+ Addedcallsites@2.0.0(transitive)
+ Addedcosmiconfig@5.2.1(transitive)
+ Addeddeepmerge@3.3.0(transitive)
+ Addederror-ex@1.3.2(transitive)
+ Addedesprima@4.0.1(transitive)
+ Addedimport-fresh@2.0.0(transitive)
+ Addedis-arrayish@0.2.1(transitive)
+ Addedis-directory@0.3.1(transitive)
+ Addedjs-yaml@3.14.1(transitive)
+ Addedjson-parse-better-errors@1.0.2(transitive)
+ Addedparse-json@4.0.0(transitive)
+ Addedresolve-from@3.0.0(transitive)
+ Addedsprintf-js@1.0.3(transitive)
- Removed@applitools/eyes.sdk.core@^2.2.2
- Removed@applitools/eyes.sdk.core@2.3.0(transitive)
- Removeddeepmerge@2.2.1(transitive)