From 030fb8951d1481c85b2826fade12b987d5c2e3fd Mon Sep 17 00:00:00 2001 From: Matt Zeunert Date: Thu, 15 Nov 2018 14:49:17 +0000 Subject: [PATCH] Add getNodeSelector page function --- lighthouse-core/lib/page-functions.js | 33 +++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/lighthouse-core/lib/page-functions.js b/lighthouse-core/lib/page-functions.js index fad43a6e7f70..f166e50d9cca 100644 --- a/lighthouse-core/lib/page-functions.js +++ b/lighthouse-core/lib/page-functions.js @@ -184,6 +184,38 @@ function getNodePath(node) { return path.join(','); } +/** + * @param {Element} node + * @returns {string} + */ +function getNodeSelector(node) { + /** + * @param {Element} node + */ + function getSelectorPart(node) { + let part = node.tagName.toLowerCase(); + if (node.id) { + part += '#' + node.id; + } else if (node.classList.length > 0) { + part += '.' + node.classList[0]; + } + return part; + } + + const parts = []; + while (parts.length < 4) { + parts.unshift(getSelectorPart(node)); + if (!node.parentElement) { + break; + } + node = node.parentElement; + if (node.tagName === 'HTML') { + break; + } + } + return parts.join(' > '); +} + module.exports = { wrapRuntimeEvalErrorInBrowserString: wrapRuntimeEvalErrorInBrowser.toString(), registerPerformanceObserverInPageString: registerPerformanceObserverInPage.toString(), @@ -194,4 +226,5 @@ module.exports = { ultradumbBenchmark: ultradumbBenchmark, ultradumbBenchmarkString: ultradumbBenchmark.toString(), getNodePathString: getNodePath.toString(), + getNodeSelectorString: getNodeSelector.toString(), };