Best JavaScript code snippet using playwright-internal
snapshotterInjected.js
Source:snapshotterInjected.js
...30 const kEndOfList = Symbol('__playwright_end_of_list_');31 function resetCachedData(obj) {32 delete obj[kCachedData];33 }34 function ensureCachedData(obj) {35 if (!obj[kCachedData]) obj[kCachedData] = {};36 return obj[kCachedData];37 }38 function removeHash(url) {39 try {40 const u = new URL(url);41 u.hash = '';42 return u.toString();43 } catch (e) {44 return url;45 }46 }47 class Streamer {48 // To avoid invalidating due to our own reads.49 constructor() {50 this._removeNoScript = true;51 this._lastSnapshotNumber = 0;52 this._staleStyleSheets = new Set();53 this._readingStyleSheet = false;54 this._fakeBase = void 0;55 this._observer = void 0;56 this._interceptNativeMethod(window.CSSStyleSheet.prototype, 'insertRule', sheet => this._invalidateStyleSheet(sheet));57 this._interceptNativeMethod(window.CSSStyleSheet.prototype, 'deleteRule', sheet => this._invalidateStyleSheet(sheet));58 this._interceptNativeMethod(window.CSSStyleSheet.prototype, 'addRule', sheet => this._invalidateStyleSheet(sheet));59 this._interceptNativeMethod(window.CSSStyleSheet.prototype, 'removeRule', sheet => this._invalidateStyleSheet(sheet));60 this._interceptNativeGetter(window.CSSStyleSheet.prototype, 'rules', sheet => this._invalidateStyleSheet(sheet));61 this._interceptNativeGetter(window.CSSStyleSheet.prototype, 'cssRules', sheet => this._invalidateStyleSheet(sheet));62 this._fakeBase = document.createElement('base');63 this._observer = new MutationObserver(list => this._handleMutations(list));64 const observerConfig = {65 attributes: true,66 subtree: true67 };68 this._observer.observe(document, observerConfig);69 }70 _interceptNativeMethod(obj, method, cb) {71 const native = obj[method];72 if (!native) return;73 obj[method] = function (...args) {74 const result = native.call(this, ...args);75 cb(this, result);76 return result;77 };78 }79 _interceptNativeGetter(obj, prop, cb) {80 const descriptor = Object.getOwnPropertyDescriptor(obj, prop);81 Object.defineProperty(obj, prop, { ...descriptor,82 get: function () {83 const result = descriptor.get.call(this);84 cb(this, result);85 return result;86 }87 });88 }89 _handleMutations(list) {90 for (const mutation of list) ensureCachedData(mutation.target).attributesCached = undefined;91 }92 _invalidateStyleSheet(sheet) {93 if (this._readingStyleSheet) return;94 this._staleStyleSheets.add(sheet);95 }96 _updateStyleElementStyleSheetTextIfNeeded(sheet) {97 const data = ensureCachedData(sheet);98 if (this._staleStyleSheets.has(sheet)) {99 this._staleStyleSheets.delete(sheet);100 try {101 data.cssText = this._getSheetText(sheet);102 } catch (e) {// Sometimes we cannot access cross-origin stylesheets.103 }104 }105 return data.cssText;106 } // Returns either content, ref, or no override.107 _updateLinkStyleSheetTextIfNeeded(sheet, snapshotNumber) {108 const data = ensureCachedData(sheet);109 if (this._staleStyleSheets.has(sheet)) {110 this._staleStyleSheets.delete(sheet);111 try {112 data.cssText = this._getSheetText(sheet);113 data.cssRef = snapshotNumber;114 return data.cssText;115 } catch (e) {// Sometimes we cannot access cross-origin stylesheets.116 }117 }118 return data.cssRef === undefined ? undefined : snapshotNumber - data.cssRef;119 }120 markIframe(iframeElement, frameId) {121 iframeElement[kSnapshotFrameId] = frameId;122 }123 reset() {124 this._staleStyleSheets.clear();125 const visitNode = node => {126 resetCachedData(node);127 if (node.nodeType === Node.ELEMENT_NODE) {128 const element = node;129 if (element.shadowRoot) visitNode(element.shadowRoot);130 }131 for (let child = node.firstChild; child; child = child.nextSibling) visitNode(child);132 };133 visitNode(document.documentElement);134 visitNode(this._fakeBase);135 }136 _sanitizeUrl(url) {137 if (url.startsWith('javascript:')) return '';138 return url;139 }140 _sanitizeSrcSet(srcset) {141 return srcset.split(',').map(src => {142 src = src.trim();143 const spaceIndex = src.lastIndexOf(' ');144 if (spaceIndex === -1) return this._sanitizeUrl(src);145 return this._sanitizeUrl(src.substring(0, spaceIndex).trim()) + src.substring(spaceIndex);146 }).join(', ');147 }148 _resolveUrl(base, url) {149 if (url === '') return '';150 try {151 return new URL(url, base).href;152 } catch (e) {153 return url;154 }155 }156 _getSheetBase(sheet) {157 let rootSheet = sheet;158 while (rootSheet.parentStyleSheet) rootSheet = rootSheet.parentStyleSheet;159 if (rootSheet.ownerNode) return rootSheet.ownerNode.baseURI;160 return document.baseURI;161 }162 _getSheetText(sheet) {163 this._readingStyleSheet = true;164 try {165 const rules = [];166 for (const rule of sheet.cssRules) rules.push(rule.cssText);167 return rules.join('\n');168 } finally {169 this._readingStyleSheet = false;170 }171 }172 captureSnapshot() {173 const timestamp = performance.now();174 const snapshotNumber = ++this._lastSnapshotNumber;175 let nodeCounter = 0;176 let shadowDomNesting = 0; // Ensure we are up to date.177 this._handleMutations(this._observer.takeRecords());178 const visitNode = node => {179 const nodeType = node.nodeType;180 const nodeName = nodeType === Node.DOCUMENT_FRAGMENT_NODE ? 'template' : node.nodeName;181 if (nodeType !== Node.ELEMENT_NODE && nodeType !== Node.DOCUMENT_FRAGMENT_NODE && nodeType !== Node.TEXT_NODE) return;182 if (nodeName === 'SCRIPT') return;183 if (this._removeNoScript && nodeName === 'NOSCRIPT') return;184 const data = ensureCachedData(node);185 const values = [];186 let equals = !!data.cached;187 let extraNodes = 0;188 const expectValue = value => {189 equals = equals && data.cached[values.length] === value;190 values.push(value);191 };192 const checkAndReturn = n => {193 data.attributesCached = true;194 if (equals) return {195 equals: true,196 n: [[snapshotNumber - data.ref[0], data.ref[1]]]197 };198 nodeCounter += extraNodes;199 data.ref = [snapshotNumber, nodeCounter++];200 data.cached = values;201 return {202 equals: false,203 n204 };205 };206 if (nodeType === Node.TEXT_NODE) {207 const value = node.nodeValue || '';208 expectValue(value);209 return checkAndReturn(value);210 }211 if (nodeName === 'STYLE') {212 const sheet = node.sheet;213 let cssText;214 if (sheet) cssText = this._updateStyleElementStyleSheetTextIfNeeded(sheet);215 cssText = cssText || node.textContent || '';216 expectValue(cssText); // Compensate for the extra 'cssText' text node.217 extraNodes++;218 return checkAndReturn(['style', {}, cssText]);219 }220 const attrs = {};221 const result = [nodeName, attrs];222 const visitChild = child => {223 const snapshot = visitNode(child);224 if (snapshot) {225 result.push(snapshot.n);226 expectValue(child);227 equals = equals && snapshot.equals;228 }229 };230 const visitChildStyleSheet = child => {231 const snapshot = visitStyleSheet(child);232 if (snapshot) {233 result.push(snapshot.n);234 expectValue(child);235 equals = equals && snapshot.equals;236 }237 };238 if (nodeType === Node.DOCUMENT_FRAGMENT_NODE) attrs[kShadowAttribute] = 'open';239 if (nodeType === Node.ELEMENT_NODE) {240 const element = node;241 if (nodeName === 'INPUT') {242 const value = element.value;243 expectValue('value');244 expectValue(value);245 attrs['value'] = value;246 if (element.checked) {247 expectValue('checked');248 attrs['checked'] = '';249 }250 }251 if (element.scrollTop) {252 expectValue(kScrollTopAttribute);253 expectValue(element.scrollTop);254 attrs[kScrollTopAttribute] = '' + element.scrollTop;255 }256 if (element.scrollLeft) {257 expectValue(kScrollLeftAttribute);258 expectValue(element.scrollLeft);259 attrs[kScrollLeftAttribute] = '' + element.scrollLeft;260 }261 if (element.shadowRoot) {262 ++shadowDomNesting;263 visitChild(element.shadowRoot);264 --shadowDomNesting;265 }266 }267 if (nodeName === 'TEXTAREA') {268 const value = node.value;269 expectValue(value);270 extraNodes++; // Compensate for the extra text node.271 result.push(value);272 } else {273 if (nodeName === 'HEAD') {274 // Insert fake <base> first, to ensure all <link> elements use the proper base uri.275 this._fakeBase.setAttribute('href', document.baseURI);276 visitChild(this._fakeBase);277 }278 for (let child = node.firstChild; child; child = child.nextSibling) visitChild(child);279 expectValue(kEndOfList);280 let documentOrShadowRoot = null;281 if (node.ownerDocument.documentElement === node) documentOrShadowRoot = node.ownerDocument;else if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) documentOrShadowRoot = node;282 if (documentOrShadowRoot) {283 for (const sheet of documentOrShadowRoot.adoptedStyleSheets || []) visitChildStyleSheet(sheet);284 expectValue(kEndOfList);285 }286 } // Process iframe src attribute before bailing out since it depends on a symbol, not the DOM.287 if (nodeName === 'IFRAME' || nodeName === 'FRAME') {288 const element = node;289 const frameId = element[kSnapshotFrameId];290 const name = 'src';291 const value = frameId ? `/snapshot/${frameId}` : '';292 expectValue(name);293 expectValue(value);294 attrs[name] = value;295 } // We can skip attributes comparison because nothing else has changed,296 // and mutation observer didn't tell us about the attributes.297 if (equals && data.attributesCached && !shadowDomNesting) return checkAndReturn(result);298 if (nodeType === Node.ELEMENT_NODE) {299 const element = node;300 for (let i = 0; i < element.attributes.length; i++) {301 const name = element.attributes[i].name;302 if (name === 'value' && (nodeName === 'INPUT' || nodeName === 'TEXTAREA')) continue;303 if (nodeName === 'LINK' && name === 'integrity') continue;304 if (nodeName === 'IFRAME' && name === 'src') continue;305 let value = element.attributes[i].value;306 if (name === 'src' && nodeName === 'IMG') value = this._sanitizeUrl(value);else if (name === 'srcset' && nodeName === 'IMG') value = this._sanitizeSrcSet(value);else if (name === 'srcset' && nodeName === 'SOURCE') value = this._sanitizeSrcSet(value);else if (name === 'href' && nodeName === 'LINK') value = this._sanitizeUrl(value);else if (name.startsWith('on')) value = '';307 expectValue(name);308 expectValue(value);309 attrs[name] = value;310 }311 expectValue(kEndOfList);312 }313 if (result.length === 2 && !Object.keys(attrs).length) result.pop(); // Remove empty attrs when there are no children.314 return checkAndReturn(result);315 };316 const visitStyleSheet = sheet => {317 const data = ensureCachedData(sheet);318 const oldCSSText = data.cssText;319 const cssText = this._updateStyleElementStyleSheetTextIfNeeded(sheet) || '';320 if (cssText === oldCSSText) return {321 equals: true,322 n: [[snapshotNumber - data.ref[0], data.ref[1]]]323 };324 data.ref = [snapshotNumber, nodeCounter++];325 return {326 equals: false,327 n: ['template', {328 [kStyleSheetAttribute]: cssText329 }]330 };331 };...
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const context = await browser.newContext();5 const page = await context.newPage();6 await browser.close();7})();8const { chromium } = require('playwright');9const { ensureCachedData } = require('playwright/lib/server/cjs/playwright.js');10(async () => {11 const browser = await chromium.launch();12 const context = await browser.newContext();13 const page = await context.newPage();14 await browser.close();15})();16const { chromium } = require('playwright');17const { ensureCachedData } = require('playwright/lib/server/cjs/playwright.js');18(async () => {19 const browser = await chromium.launch();20 const context = await browser.newContext();21 const page = await context.newPage();22 await browser.close();23})();24const { chromium } = require('playwright');25const { ensureCachedData } = require('playwright/lib/server/cjs/playwright.js');
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const page = await browser.newPage();5 await browser.close();6})();7const { chromium } = require('playwright');
Using AI Code Generation
1const playwright = require('playwright');2const fs = require('fs');3const path = require('path');4(async () => {5 const browser = await playwright.chromium.launch();6 const context = await browser.newContext();7 const page = await context.newPage();8 const browserPath = browser._browserContext._browser._process._executablePath;9 const browserName = path.basename(browserPath);10 const browserRevision = browser._browserContext._browser._options._revision;11 const browserCachePath = path.join(__dirname, browserName + '-' + browserRevision + '-cache');12 await browser._browserContext._browser._ensureCachedData(browserCachePath);13 await browser.close();14 await fs.copyFileSync(browserCachePath, path.join(__dirname, 'cache'));15})();16const playwright = require('playwright');17const fs = require('fs');18const path = require('path');19(async () => {20 const browser = await playwright.chromium.launch();21 const context = await browser.newContext();22 const page = await context.newPage();23 const browserPath = browser._browserContext._browser._process._executablePath;24 const browserName = path.basename(browserPath);25 const browserRevision = browser._browserContext._browser._options._revision;26 const browserCachePath = path.join(__dirname, browserName + '-' + browserRevision + '-cache');27 await browser._browserContext._browser._ensureCachedData(browserCa
Using AI Code Generation
1const playwright = require('playwright');2(async () => {3 const browser = await playwright['chromium'].launch({ headless: false });4 const page = await browser.newPage();5 await page.screenshot({ path: 'google.png' });6 await browser.close();7})();8module.exports = {9 webServer: {10 },11};12module.exports = {13 webServer: {14 },15};16const playwright = require('playwright');17(async () => {18 const browser = await playwright['chromium'].launch({ headless: false });19 const page = await browser.newPage();20 await page.screenshot({ path: 'google.png' });21 await browser.close();22})();23module.exports = {24 webServer: {25 },26};27module.exports = {28 webServer: {29 },30};31const playwright = require('playwright');32(async () => {33 const browser = await playwright['chromium'].launch({ headless: false });34 const page = await browser.newPage();35 await page.screenshot({ path: 'google.png' });36 await browser.close();37})();38module.exports = {39 webServer: {40 },41};42module.exports = {43 webServer: {44 },45};46const playwright = require('playwright');47(async () => {48 const browser = await playwright['chromium'].launch({ headless: false });
Using AI Code Generation
1const playwright = require('playwright');2(async () => {3 const browser = await playwright.chromium.launch({4 });5 const context = await browser.newContext();6 const page = await context.newPage();7 await page.waitForSelector('text=Chromium');8 await browser.close();9})();10const playwright = require('playwright');11(async () => {12 const browser = await playwright.chromium.launch({13 });14 const context = await browser.newContext();15 const page = await context.newPage();16 await page.waitForSelector('text=Chromium');17 await browser.close();18})();19const playwright = require('playwright');20(async () => {21 const browser = await playwright.chromium.launch({22 });23 const context = await browser.newContext();24 const page = await context.newPage();25 await page.waitForSelector('text=Chromium');26 await browser.close();27})();28const playwright = require('playwright');29(async () => {30 const browser = await playwright.chromium.launch({31 });32 const context = await browser.newContext();33 const page = await context.newPage();
Using AI Code Generation
1const { chromium } = require('playwright');2const browser = await chromium.launch();3const browserContext = await browser.newContext();4const page = await browserContext.newPage();5await page.screenshot({ path: 'google.png' });6await browser.close();7const { chromium } = require('playwright');8const browser = await chromium.launch({9});10const browserContext = await browser.newContext();11const page = await browserContext.newPage();12await page.screenshot({ path: 'google.png' });13await browser.close();
Using AI Code Generation
1const playwright = require('playwright');2(async () => {3 const browser = await playwright.chromium.launch();4 const context = await browser.newContext();5 await context.close();6 await browser.close();7})();8 at Chromium._launch (/home/username/.cache/ms-playwright/chromium-818858/playwright/lib/server/browserType.js:114:13)9 at async Chromium.launch (/home/username/.cache/ms-playwright/chromium-818858/playwright/lib/server/browserType.js:60:9)10 at async Object.<anonymous> (/home/username/Desktop/test.js:4:17)
Using AI Code Generation
1const { chromium } = require('playwright');2const fs = require('fs');3const path = require('path');4const ensureCachedData = chromium._impl._browserFetcher._ensureCachedData.bind(chromium._impl._browserFetcher);5const browserFetcher = chromium._impl._browserFetcher;6const revisionInfo = browserFetcher.revisionInfo('869685');7async function run() {8 const revision = revisionInfo.revision;9 const browserDirectory = browserFetcher.revisionDirectory(revision);10 const browserExecutable = path.join(browserDirectory, revisionInfo.executablePath);11 const browserArgs = revisionInfo.args.slice();12 const browser = await chromium.launch({13 });14 const page = await browser.newPage();15 await page.screenshot({ path: 'google.png' });16 await browser.close();17}18async function main() {19 await chromium._impl._browserFetcher.download('869685');20 const { cachePath } = await ensureCachedData('869685');21 console.log(cachePath);22 await run();23}24main();
Using AI Code Generation
1const { ensureCachedData } = require('playwright-core/lib/server/cachedResources');2const { chromium } = require('playwright-core');3const browser = await chromium.launch({ headless: false });4const context = await browser.newContext();5const page = await context.newPage();6await browser.close();7const { ensureCachedData } = require('playwright-core/lib/server/cachedResources');8const { chromium } = require('playwright-core');9const browser = await chromium.launch({ headless: false });10const context = await browser.newContext();11const page = await context.newPage();12await browser.close();13const { ensureCachedData } = require('playwright-core/lib/server/cachedResources');14const { chromium } = require('playwright-core');15const browser = await chromium.launch({ headless: false });16const context = await browser.newContext();17const page = await context.newPage();18await browser.close();19const { ensureCachedData } = require('playwright-core/lib/server/cachedResources');20const { chromium } = require('playwright-core');21const browser = await chromium.launch({ headless: false });22const context = await browser.newContext();23const page = await context.newPage();24await browser.close();25const { ensureCachedData } = require('playwright-core/lib/server/cachedResources');26const { chromium } = require('playwright-core');27const browser = await chromium.launch({ headless: false });28const context = await browser.newContext();29const page = await context.newPage();30await browser.close();31const { ensureCached
LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!