Best JavaScript code snippet using playwright-internal
tracing.js
Source:tracing.js
...192 }193 async _captureSnapshot(name, sdkObject, metadata, element) {194 if (!sdkObject.attribution.page) return;195 if (!this._snapshotter.started()) return;196 if (!shouldCaptureSnapshot(metadata)) return;197 const snapshotName = `${name}@${metadata.id}`;198 metadata.snapshots.push({199 title: name,200 snapshotName201 }); // We have |element| for input actions (page.click and handle.click)202 // and |sdkObject| element for accessors like handle.textContent.203 if (!element && sdkObject instanceof _dom.ElementHandle) element = sdkObject;204 await this._snapshotter.captureSnapshot(sdkObject.attribution.page, snapshotName, element).catch(() => {});205 }206 async onBeforeCall(sdkObject, metadata) {207 // Set afterSnapshot name for all the actions that operate selectors.208 // Elements resolved from selectors will be marked on the snapshot.209 metadata.afterSnapshot = `after@${metadata.id}`;210 const beforeSnapshot = this._captureSnapshot('before', sdkObject, metadata);211 this._pendingCalls.set(metadata.id, {212 sdkObject,213 metadata,214 beforeSnapshot215 });216 await beforeSnapshot;217 }218 async onBeforeInputAction(sdkObject, metadata, element) {219 const actionSnapshot = this._captureSnapshot('action', sdkObject, metadata, element);220 this._pendingCalls.get(metadata.id).actionSnapshot = actionSnapshot;221 await actionSnapshot;222 }223 async onAfterCall(sdkObject, metadata) {224 const pendingCall = this._pendingCalls.get(metadata.id);225 if (!pendingCall || pendingCall.afterSnapshot) return;226 if (!sdkObject.attribution.context) {227 this._pendingCalls.delete(metadata.id);228 return;229 }230 pendingCall.afterSnapshot = this._captureSnapshot('after', sdkObject, metadata);231 await pendingCall.afterSnapshot;232 const event = {233 type: 'action',234 metadata235 };236 this._appendTraceEvent(event);237 this._pendingCalls.delete(metadata.id);238 }239 onEvent(sdkObject, metadata) {240 if (!sdkObject.attribution.context) return;241 const event = {242 type: 'event',243 metadata244 };245 this._appendTraceEvent(event);246 }247 onEntryStarted(entry) {}248 onEntryFinished(entry) {249 const event = {250 type: 'resource-snapshot',251 snapshot: entry252 };253 this._appendTraceOperation(async () => {254 visitSha1s(event, this._state.sha1s);255 await _fs.default.promises.appendFile(this._state.networkFile, JSON.stringify(event) + '\n');256 });257 }258 onContentBlob(sha1, buffer) {259 this._appendResource(sha1, buffer);260 }261 onSnapshotterBlob(blob) {262 this._appendResource(blob.sha1, blob.buffer);263 }264 onFrameSnapshot(snapshot) {265 this._appendTraceEvent({266 type: 'frame-snapshot',267 snapshot268 });269 }270 _startScreencastInPage(page) {271 page.setScreencastOptions(kScreencastOptions);272 const prefix = page.guid;273 let frameSeq = 0;274 this._screencastListeners.push(_eventsHelper.eventsHelper.addEventListener(page, _page.Page.Events.ScreencastFrame, params => {275 const suffix = String(++frameSeq).padStart(10, '0');276 const sha1 = `${prefix}-${suffix}.jpeg`;277 const event = {278 type: 'screencast-frame',279 pageId: page.guid,280 sha1,281 width: params.width,282 height: params.height,283 timestamp: (0, _utils.monotonicTime)()284 }; // Make sure to write the screencast frame before adding a reference to it.285 this._appendResource(sha1, params.buffer);286 this._appendTraceEvent(event);287 }));288 }289 _appendTraceEvent(event) {290 this._appendTraceOperation(async () => {291 visitSha1s(event, this._state.sha1s);292 await _fs.default.promises.appendFile(this._state.traceFile, JSON.stringify(event) + '\n');293 });294 }295 _appendResource(sha1, buffer) {296 if (this._allResources.has(sha1)) return;297 this._allResources.add(sha1);298 this._appendTraceOperation(async () => {299 const resourcePath = _path.default.join(this._resourcesDir, sha1);300 try {301 // Perhaps we've already written this resource?302 await _fs.default.promises.access(resourcePath);303 } catch (e) {304 // If not, let's write! Note that async access is safe because we305 // never remove resources until the very end.306 await _fs.default.promises.writeFile(resourcePath, buffer).catch(() => {});307 }308 });309 }310 async _appendTraceOperation(cb) {311 // This method serializes all writes to the trace.312 let error;313 let result;314 this._writeChain = this._writeChain.then(async () => {315 try {316 result = await cb();317 } catch (e) {318 error = e;319 }320 });321 await this._writeChain;322 if (error) throw error;323 return result;324 }325}326exports.Tracing = Tracing;327function visitSha1s(object, sha1s) {328 if (Array.isArray(object)) {329 object.forEach(o => visitSha1s(o, sha1s));330 return;331 }332 if (typeof object === 'object') {333 for (const key in object) {334 if (key === 'sha1' || key === '_sha1' || key.endsWith('Sha1')) {335 const sha1 = object[key];336 if (sha1) sha1s.add(sha1);337 }338 visitSha1s(object[key], sha1s);339 }340 return;341 }342}343function shouldCaptureSnapshot(metadata) {344 return _channels.commandsWithTracingSnapshots.has(metadata.type + '.' + metadata.method);...
traceModel.js
Source:traceModel.js
1"use strict";2Object.defineProperty(exports, "__esModule", {3 value: true4});5exports.trace = exports.PersistentSnapshotStorage = exports.TraceModel = void 0;6var _fs = _interopRequireDefault(require("fs"));7var _path = _interopRequireDefault(require("path"));8var _snapshotStorage = require("../../snapshot/snapshotStorage");9var _tracing = require("../recorder/tracing");10var _trace = _interopRequireWildcard(require("../common/traceEvents"));11exports.trace = _trace;12function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }13function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }14function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }15/**16 * Copyright (c) Microsoft Corporation.17 *18 * Licensed under the Apache License, Version 2.0 (the "License");19 * you may not use this file except in compliance with the License.20 * You may obtain a copy of the License at21 *22 * http://www.apache.org/licenses/LICENSE-2.023 *24 * Unless required by applicable law or agreed to in writing, software25 * distributed under the License is distributed on an "AS IS" BASIS,26 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.27 * See the License for the specific language governing permissions and28 * limitations under the License.29 */30class TraceModel {31 constructor(snapshotStorage) {32 this.contextEntry = void 0;33 this.pageEntries = new Map();34 this._snapshotStorage = void 0;35 this._version = void 0;36 this._snapshotStorage = snapshotStorage;37 this.contextEntry = {38 startTime: Number.MAX_VALUE,39 endTime: Number.MIN_VALUE,40 browserName: '',41 options: {42 sdkLanguage: ''43 },44 pages: [],45 resources: []46 };47 }48 build() {49 for (const page of this.contextEntry.pages) page.actions.sort((a1, a2) => a1.metadata.startTime - a2.metadata.startTime);50 this.contextEntry.resources = this._snapshotStorage.resources();51 }52 _pageEntry(pageId) {53 let pageEntry = this.pageEntries.get(pageId);54 if (!pageEntry) {55 pageEntry = {56 actions: [],57 events: [],58 objects: {},59 screencastFrames: []60 };61 this.pageEntries.set(pageId, pageEntry);62 this.contextEntry.pages.push(pageEntry);63 }64 return pageEntry;65 }66 appendEvent(line) {67 const event = this._modernize(JSON.parse(line));68 switch (event.type) {69 case 'context-options':70 {71 this._version = event.version || 0;72 this.contextEntry.browserName = event.browserName;73 this.contextEntry.options = event.options;74 break;75 }76 case 'screencast-frame':77 {78 this._pageEntry(event.pageId).screencastFrames.push(event);79 break;80 }81 case 'action':82 {83 const metadata = event.metadata;84 const include = event.hasSnapshot;85 if (include && metadata.pageId) this._pageEntry(metadata.pageId).actions.push(event);86 break;87 }88 case 'event':89 {90 const metadata = event.metadata;91 if (metadata.pageId) {92 if (metadata.method === '__create__') this._pageEntry(metadata.pageId).objects[metadata.params.guid] = metadata.params.initializer;else this._pageEntry(metadata.pageId).events.push(event);93 }94 break;95 }96 case 'resource-snapshot':97 this._snapshotStorage.addResource(event.snapshot);98 break;99 case 'frame-snapshot':100 this._snapshotStorage.addFrameSnapshot(event.snapshot);101 break;102 }103 if (event.type === 'action' || event.type === 'event') {104 this.contextEntry.startTime = Math.min(this.contextEntry.startTime, event.metadata.startTime);105 this.contextEntry.endTime = Math.max(this.contextEntry.endTime, event.metadata.endTime);106 }107 }108 _modernize(event) {109 if (this._version === undefined) return event;110 for (let version = this._version; version < _tracing.VERSION; ++version) event = this[`_modernize_${version}_to_${version + 1}`].call(this, event);111 return event;112 }113 _modernize_0_to_1(event) {114 if (event.type === 'action') {115 if (typeof event.metadata.error === 'string') event.metadata.error = {116 error: {117 name: 'Error',118 message: event.metadata.error119 }120 };121 if (event.metadata && typeof event.hasSnapshot !== 'boolean') event.hasSnapshot = (0, _tracing.shouldCaptureSnapshot)(event.metadata);122 }123 return event;124 }125 _modernize_1_to_2(event) {126 if (event.type === 'frame-snapshot' && event.snapshot.isMainFrame) {127 // Old versions had completely wrong viewport.128 event.snapshot.viewport = this.contextEntry.options.viewport || {129 width: 1280,130 height: 720131 };132 }133 return event;134 }135}136exports.TraceModel = TraceModel;137class PersistentSnapshotStorage extends _snapshotStorage.BaseSnapshotStorage {138 constructor(resourcesDir) {139 super();140 this._resourcesDir = void 0;141 this._resourcesDir = resourcesDir;142 }143 resourceContent(sha1) {144 return _fs.default.readFileSync(_path.default.join(this._resourcesDir, sha1));145 }146}...
Using AI Code Generation
1const { shouldCaptureSnapshot } = require('playwright/lib/server/snapshotter/snapshotter');2const { captureSnapshot } = require('playwright/lib/server/snapshotter/snapshotter');3const { createSnapshotter } = require('playwright/lib/server/snapshotter/snapshotter');4const { createSnapshotter } = require('playwright/lib/server/snapshotter/snapshotter');5const { createSnapshotter } = require('playwright/lib/server/snapshotter/snapshotter');6const { createSnapshotter } = require('playwright/lib/server/snapshotter/snapshotter');7const { createSnapshotter } = require('playwright/lib/server/snapshotter/snapshotter');8const { createSnapshotter } = require('playwright/lib/server/snapshotter/snapshotter');9const { createSnapshotter } = require('playwright/lib/server/snapshotter/snapshotter');10const { createSnapshotter } = require('playwright/lib/server/snapshotter/snapshotter');11const { createSnapshotter } = require('playwright/lib/server/snapshotter/snapshotter');12const { createSnapshotter } = require('playwright/lib/server/snapshotter/snapshotter');13const { createSnapshotter } = require('playwright/lib/server/snapshotter/snapshotter');14const { createSnapshotter } = require('playwright/lib/server/snapshotter/snapshotter');15const { createSnapshotter } = require('playwright/lib/server/snapshotter/snapshotter');
Using AI Code Generation
1const { shouldCaptureSnapshot } = require('playwright/lib/server/snapshotter/snapshotter');2const { captureSnapshot } = require('playwright/lib/server/snapshotter/snapshotter');3const { toSnapshot } = require('playwright/lib/server/snapshotter/snapshotter');4const { createSnapshotter } = require('playwright/lib/server/snapshotter/snapshotter');5const { Snapshotter } = require('playwright/lib/server/snapshotter/snapshotter');6const { toImpl } = require('playwright/lib/server/snapshotter/snapshotter');7const { toChannel } = require('playwright/lib/server/snapshotter/snapshotter');8const { toPage } = require('playwright/lib/server/snapshotter/snapshotter');9const { toJSHandle } = require('playwright/lib/server/snapshotter/snapshotter');10const { toElementHandle } = require('playwright/lib/server/snapshotter/snapshotter');11const { toBindingCall } = require('playwright/lib/server/snapshotter/snapshotter');12const { toFrame } = require('playwright/lib/server/snapshotter/snapshotter');13const { toRequest } = require('playwright/lib/server/snapshotter/snapshotter');14const { toResponse } = require('playwright/lib/server/snapshotter/snapshotter');15const { toConsoleMessage } = require('playwright/lib/server/snapshotter/snapshotter');16const { toWorker } =
Using AI Code Generation
1const playwright = require("playwright");2const { shouldCaptureSnapshot } = require("playwright/lib/server/snapshotter/snapshotter");3const { chromium } = playwright;4(async () => {5 const browser = await chromium.launch();6 const context = await browser.newContext();7 const page = await context.newPage();8 console.log(shouldCapture);9})();
Using AI Code Generation
1const { shouldCaptureSnapshot } = require('playwright-core/lib/server/snapshotter/snapshotter');2const { shouldCaptureSnapshot } = require('playwright-core/lib/server/snapshotter/snapshotter');3module.exports = {4};5module.exports = {6};7const { shouldCaptureSnapshot } = require('playwright-core/lib/server/snapshotter/snapshotter');8const { shouldCaptureSnapshot } = require('playwright-core/lib/server/snapshotter/snapshotter');9const { shouldCaptureSnapshot } = require('playwright-core/lib/server/snapshotter/snapshotter');10test('should capture snapshot', async ({ page }) => {11 await page.setContent(`12 `);13 const snapshot = await page.accessibility.snapshot({ root: await page.$('#container') });14 expect(shouldCaptureSnapshot(snapshot)).toBe(true);15 const childSnapshot = await page.accessibility.snapshot({ root: await page.$('#child') });16 expect(shouldCaptureSnapshot(childSnapshot)).toBe(false);17 const grandchildSnapshot = await page.accessibility.snapshot({ root: await page.$('#grandchild') });18 expect(shouldCaptureSnapshot(grandchildSnapshot)).toBe(false);19});20const { shouldCaptureSnapshot } = require('playwright
Using AI Code Generation
1const { shouldCaptureSnapshot } = require('playwright/lib/utils/snapshotter');2global.shouldCaptureSnapshot = shouldCaptureSnapshot;3const { test, expect } = require('@playwright/test');4test('should capture snapshot', async ({ page }) => {5 await page.setContent('<button>Click me</button>');6 const button = await page.$('button');7 expect(await button.innerText()).toBe('Click me');8});9test('should not capture snapshot', async ({ page }) => {10 await page.setContent('<button>Click me</button>');11 const button = await page.$('button');12 expect(await button.innerText()).not.toBe('Click me');13});
Using AI Code Generation
1const { shouldCaptureSnapshot } = require('@playwright/test/lib/utils/recorderUtils');2const fs = require('fs');3const path = require('path');4const testFile = fs.readFileSync(path.join(__dirname, 'test.spec.ts'), 'utf-8');5const testFileLines = testFile.split('6');7const testFileLinesLength = testFileLines.length;8for (let i = 0; i < testFileLinesLength; i++) {9 const line = testFileLines[i];10 if (line.includes('await page.goto')) {11 const shouldCapture = shouldCaptureSnapshot(line);12 console.log(`line ${i + 1} should capture snapshot: ${shouldCapture}`);13 }14}
Using AI Code Generation
1import { shouldCaptureSnapshot } from 'playwright/lib/server/snapshotter/snapshotter';2const page = await context.newPage();3const snapshot = await page.snapshot({ root: document.body });4const fs = require('fs');5fs.writeFile('snapshot.json', JSON.stringify(snapshot), (err) => {6 if (err) throw err;7 console.log('The file has been saved!');8});9const { shouldCaptureSnapshot } = require('./test.js');10const { test, expect } = require('@playwright/test');11const snapshot = require('./snapshot.json');12const fs = require('fs');13const snapshotter = require('playwright/lib/server/snapshotter/snapshotter');14test('snapshot', async ({ page }) => {15 const snapshot = await page.snapshot({ root: document.body });16 const shouldCapture = shouldCaptureSnapshot(snapshot);17 if (shouldCapture) {18 fs.writeFile('snapshot.json', JSON.stringify(snapshot), (err) => {19 if (err) throw err;20 console.log('The file has been saved!');21 });22 }23 expect(snapshot).toMatchSnapshot();24});
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!!