Best JavaScript code snippet using playwright-internal
scenario.js
Source:scenario.js
...151/**152 * Starts promise chain, so helpers could enqueue their hooks153 */154module.exports.setup = function (suite) {155 return injectHook(() => {156 recorder.startUnlessRunning();157 event.emit(event.test.before, suite && suite.ctx && suite.ctx.currentTest);158 }, suite);159};160module.exports.teardown = function (suite) {161 return injectHook(() => {162 recorder.startUnlessRunning();163 event.emit(event.test.after, suite && suite.ctx && suite.ctx.currentTest);164 }, suite);165};166module.exports.suiteSetup = function (suite) {167 return injectHook(() => {168 recorder.startUnlessRunning();169 event.emit(event.suite.before, suite);170 }, suite);171};172module.exports.suiteTeardown = function (suite) {173 return injectHook(() => {174 recorder.startUnlessRunning();175 event.emit(event.suite.after, suite);176 }, suite);177};178const getInjectedArguments = (fn, test) => {179 const container = require('./container');180 const testArgs = {};181 const params = parser.getParams(fn) || [];182 const objects = container.support();183 for (const key of params) {184 testArgs[key] = {};185 if (test && test.inject && test.inject[key]) {186 // @FIX: need fix got inject187 testArgs[key] = test.inject[key];...
ast_hook_inject.js
Source:ast_hook_inject.js
...3const babel = require("@babel/core");4const types = require("@babel/types");5const generator = require("@babel/generator");6const hookFunctionName = "cc11";7function injectHook(jsCode) {8 const ast = babel.parse(jsCode);9 babel.traverse(ast, {10 // åé声æ11 VariableDeclaration(path) {12 const node = path.node;13 if (!(node.declarations && node.declarations.length)) {14 return;15 }16 for (let variableDeclarator of node.declarations) {17 if (!variableDeclarator.init) {18 continue;19 }20 if (types.isFunctionExpression(variableDeclarator.init)) {21 continue;22 }23 let varName = "";24 if (types.isIdentifier(variableDeclarator.id) || types.isMemberExpression(variableDeclarator.id)) {25 varName = generator.default(variableDeclarator.id).code;26 }27 try {28 const hookFunctionArguments = [29 types.stringLiteral(varName),30 variableDeclarator.init,31 types.stringLiteral("var-init")32 ];33 variableDeclarator.init = types.callExpression(types.identifier(hookFunctionName), hookFunctionArguments)34 } catch (e) {35 console.error(e);36 }37 }38 },39 AssignmentExpression(path) {40 const node = path.node;41 if (types.isFunctionExpression(node)) {42 return;43 }44 let varName = "";45 if (types.isIdentifier(node.left) || types.isMemberExpression(node.left)) {46 varName = generator.default(node.left).code;47 }48 try {49 const hookFunctionArguments = [50 types.stringLiteral(varName),51 node.right,52 types.stringLiteral("assign")53 ];54 node.right = types.callExpression(types.identifier(hookFunctionName), hookFunctionArguments)55 } catch (e) {56 console.error(e);57 }58 },59 // 对象表达å¼60 ObjectExpression(path) {61 const node = path.node;62 if (!(node.properties && node.properties.length)) {63 return;64 }65 for (let objectProperty of node.properties) {66 const propertyValue = objectProperty.value;67 if (types.isFunctionExpression(propertyValue)) {68 continue;69 }70 if (types.isObjectExpression(propertyValue)) {71 continue;72 }73 if (!propertyValue) {74 return;75 }76 let objectKey = objectProperty.key;77 if (types.isIdentifier(objectKey)) {78 objectKey = types.stringLiteral(objectKey.name);79 }80 try {81 const hookFunctionArguments = [82 objectKey,83 propertyValue,84 types.stringLiteral("object-key-init")85 ];86 objectProperty.value = types.callExpression(types.identifier(hookFunctionName), hookFunctionArguments);87 } catch (e) {88 console.error(e);89 }90 }91 },92 // å½æ°çå½¢å93 FunctionDeclaration(path) {94 const node = path.node;95 if (!(node.params && node.params.length)) {96 return;97 }98 const params = node.params;99 if (types.isBlockStatement(node.body)) {100 // å½æ°ä½æ¯ä¸ªä»£ç åçï¼åå¨ä»£ç åæåé¢æå
¥Hookï¼æ£æ¥åæ°çå¼101 for (let i = params.length - 1; i >= 0; i--) {102 try {103 const paramName = params[i];104 const hookFunctionArguments = [105 types.stringLiteral(generator.default(paramName).code),106 paramName,107 types.stringLiteral("function-parameter")108 ];109 const hookFunction = types.callExpression(types.identifier(hookFunctionName), hookFunctionArguments);110 node.body.body.unshift(types.expressionStatement(hookFunction));111 } catch (e) {112 console.error(e);113 }114 }115 }116 }117 })118 return generator.default(ast).code;119}120// module.exports.injectHook = injectHook;121var hookfunc = `122if (!window.myDB){123 window.myDB = []124};125function `+hookFunctionName+`(a, b, c){126 var DB = window.myDB127 var tp = Object.prototype.toString.call(b)128 if (/String/.test(tp) && tp.length > 10){129 DB.push([b, getCodeLocation()])130 }131 return b132};133function findv(str){134 var DB = window.myDB135 for (var i = 0; i < DB.length; i++) {136 if (DB[i][0].indexOf(str) != -1){137 console.log(DB[i][0], DB[i][1])138 }139 }140};141function getCodeLocation() {142 const c = new Error().stack.split("\\n");143 while (c.length > 0 && c[0].indexOf("`+hookFunctionName+`") === -1) {144 c.shift();145 }146 if (c.length < 2) {147 return null;148 }149 c.shift();150 return c.shift();151};152`153// var jscode = fs.readFileSync("./test_hook.js", { encoding: "utf-8" });154// v = hookfunc + injectHook(jscode)155// console.log(v)156function make_inject_hook(jscode) {157 return hookfunc + injectHook(jscode)...
fetch.js
Source:fetch.js
...25 * @description åAxioså®ä¾ä¸æ³¨å
¥å¯¹åºçæ¦æªå¨å½æ°26 * @param {Axios} instance Axioså®ä¾27 * @param {Object} options 为Axioså®ä¾åç¬é
ç½®çæ¦æªå¨å½æ°éå28 */29function injectHook(instance, options) {30 if(!instance){ return; }31 let _error = options.error || axiosHooks.error;32 // æ·»å 请æ±æ¦æªå¨33 instance.interceptors.request.use(conf => {34 let _before = options.before || axiosHooks.before;35 _before(conf);36 return conf;37 }, err => {38 _error(err);39 return Promise.reject(err);40 });41 // æ·»å ååºæ¦æªå¨42 instance.interceptors.response.use(res => {43 let _success = options.success || axiosHooks.success;44 let _res = _success(res);45 return (_res || res);46 }, err => {47 _error(err);48 return Promise.reject(err);49 });50}51/**52 * @description æå¨é
ç½®éç¨çæ¦æªå¨é©åå½æ°53 * @param {Object} options é
ç½®é项 54 */55function initRequestHooks(options) {56 options = options || {};57 hookFns.forEach(m => {58 if(!options[m]){ return; }59 axiosHooks[m] = options[m];60 });61}62/**63 * @description è·åAxioså®ä¾64 * @param {Object} options axioså®ä¾é项65 * @returns {Axios} Axioså®ä¾66 */67function getFetcher(options){68 let config = {69 cancelToken: new axios.CancelToken(c => reqStack.push(c)),70 };71 options = Object.assign({}, options);72 if(/^get$/i.test(options.method)){73 config.transformRequest = [data => qs.stringify(data)];74 }75 if(options.headers){76 config.headers = options.headers;77 }78 let instance = axios.create(config);79 if(options.useHook !== false){80 //é»è®¤ä½¿ç¨æ³¨åçæ¦æªå¨é©åå½æ°81 injectHook(instance, options);82 }83 ['all', 'spread'].forEach(m => instance[m] = axios[m]);84 return instance;85}86/**87 * fetch对象ï¼ægetãpostãputådeleteå个æ¹æ³ç¨äºå¯¹åºhttp请æ±88 */89let fetch = {};90['get', 'post', 'put', 'delete'].forEach(m => {91 fetch[m] = function(url, pms, options){92 let instance = getFetcher(Object.assign({}, options, { method: m }));93 if(m === 'get' && !pms.params){94 pms = { params: pms };95 }...
index.js
Source:index.js
...48 * @param {String} id49 * @param {Object} options50 */51function makeOptionsHot (id, options) {52 injectHook(options, initHookName, function () {53 map[id].instances.push(this)54 })55 injectHook(options, 'beforeDestroy', function () {56 var instances = map[id].instances57 instances.splice(instances.indexOf(this), 1)58 })59}60/**61 * Inject a hook to a hot reloadable component so that62 * we can keep track of it.63 *64 * @param {Object} options65 * @param {String} name66 * @param {Function} hook67 */68function injectHook (options, name, hook) {69 var existing = options[name]...
lifeCycleHook.js
Source:lifeCycleHook.js
1function injectHook(type, hook, target = currentInstance, prepend = false) {2 if (target) {3 const hooks = target[type] || (target[type] = []);4 // cache the error handling wrapper for injected hooks so the same hook5 // can be properly deduped by the scheduler. "__weh" stands for "with error6 // handling".7 const wrappedHook = hook.__weh ||8 (hook.__weh = (...args) => {9 if (target.isUnmounted) {10 return;11 }12 // disable tracking inside all lifecycle hooks13 // since they can potentially be called inside effects.14 pauseTracking();15 // Set currentInstance during hook invocation.16 // This assumes the hook does not synchronously trigger other hooks, which17 // can only be false when the user does something really funky.18 setCurrentInstance(target);19 const res = callWithAsyncErrorHandling(hook, target, type, args);20 setCurrentInstance(null);21 resetTracking();22 return res;23 });24 if (prepend) {25 hooks.unshift(wrappedHook);26 }27 else {28 hooks.push(wrappedHook);29 }30 return wrappedHook;31 }32 else {33 const apiName = `on${capitalize(ErrorTypeStrings[type].replace(/ hook$/, ''))}`;34 warn(`${apiName} is called when there is no active component instance to be ` +35 `associated with. ` +36 `Lifecycle injection APIs can only be used during execution of setup().` +37 ( ` If you are using async setup(), make sure to register lifecycle ` +38 `hooks before the first await statement.`39 ));40 }41}42const createHook = (lifecycle) => (hook, target = currentInstance) => 43// post-create lifecycle registrations are noops during SSR44!isInSSRComponentSetup && injectHook(lifecycle, hook, target);45const onBeforeMount = createHook("bm" /* BEFORE_MOUNT */);46const onMounted = createHook("m" /* MOUNTED */);47const onBeforeUpdate = createHook("bu" /* BEFORE_UPDATE */);48const onUpdated = createHook("u" /* UPDATED */);49const onBeforeUnmount = createHook("bum" /* BEFORE_UNMOUNT */);50const onUnmounted = createHook("um" /* UNMOUNTED */);51const onRenderTriggered = createHook("rtg" /* RENDER_TRIGGERED */);52const onRenderTracked = createHook("rtc" /* RENDER_TRACKED */);53const onErrorCaptured = (hook, target = currentInstance) => {54 injectHook("ec" /* ERROR_CAPTURED */, hook, target);...
task.js
Source:task.js
1const chalk = require('chalk');2const pkgUtils = require('./utils/pkg-utils');3function injectHook(hook) {4 return (callback) => {5 return {6 hook,7 callback,8 };9 };10}11const HOOKS = {12 beforeAsk: 'beforeAsk',13 afterAsk: 'afterAsk',14 complete: 'complete',15};16const when = {17 beforeAsk: injectHook(HOOKS.beforeAsk),18 afterAsk: injectHook(HOOKS.afterAsk),19 complete: injectHook(HOOKS.complete),20};21/** create tasks from constructor */22async function resolveTasks(ctor, config) {23 if (typeof ctor !== 'function') {24 throw new Error('meta.task must be a function');25 }26 const api = {27 pkg: pkgUtils(config.dest),28 chalk,29 };30 const tasks = await ctor(when, api);31 if (!Array.isArray(tasks)) {32 throw new Error('meta.task must return an array');33 }...
lifecycle.js
Source:lifecycle.js
...6 MOUNTED: "m",7 UPDATED: "u"8};9export function onCreate(fn, app = currentInstance) {10 injectHook(LifecycleHooks.CREATED, fn, app);11}12export function onMount(fn, app = currentInstance) {13 injectHook(LifecycleHooks.MOUNTED, fn, app);14}15export function onUpdate(fn, app = currentInstance) {16 injectHook(LifecycleHooks.UPDATED, fn, app);17}18export function injectHook(type, hook, target) {19 if (target) {20 (target[type] || (target[type] = [])).push((...args) => {21 pauseTracking();22 setCurrentInstance(target);23 const res = hook(...args);24 setCurrentInstance(null);25 resumeTracking();26 return res;27 });28 }29}30export function callHook(target, type, ...args) {31 if (target && isArray(target[type])) {32 target[type].forEach(hook => {...
content.js
Source:content.js
1function injectHook(url, type = '') {2 const hookScript = document.createElement("script");3 if (type !== '') hookScript.type = "module";4 hookScript.src = url;5 hookScript.onload = function () {6 this.remove();7 };8 (document.head || document.body || document.documentElement).appendChild(hookScript);9}10// injectHook(chrome.extension.getURL('/lib/emoji.js'));11// chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {12// if (request.message === 'TabUpdated' && document.location.href.includes('https://www.facebook.com/stories')) {13// // injectHook(chrome.extension.getURL(`/lib/story.js?v=${getRandom(1, 100)}`), 'module');14// // injectHook(chrome.extension.getURL(`/lib/story.js`), 'module');15// // chrome.tabs.executeScript(null, {file: 'lib/story.js'});16// }17// })18function getRandom(min, max) {19 return Math.random() * (max - min) + min;...
Using AI Code Generation
1const { injectHook } = require('playwright/lib/server/chromium/crConnection');2const { chromium } = require('playwright');3(async () => {4 const browser = await chromium.launch({ headless: false });5 const context = await browser.newContext();6 const page = await context.newPage();7 injectHook(page, 'Network.requestWillBeSent', (params) => {8 console.log(params.request.url);9 });10 await browser.close();11})();
Using AI Code Generation
1const { injectHook } = require('playwright/lib/protocol/protocol');2const { chromium } = require('playwright');3(async () => {4 const browser = await chromium.launch();5 const context = await browser.newContext();6 const page = await context.newPage();7 injectHook(page, 'on', (eventName, eventHandler) => {8 console.log(eventName)9 });10 await page.screenshot({ path: 'example.png' });11 await browser.close();12})();
Using AI Code Generation
1const { injectHook } = require('playwright/lib/server/injected/injectedScript');2const { Page } = require('playwright/lib/server/page');3const { BrowserContext } = require('playwright/lib/server/browserContext');4const { Browser } = require('playwright/lib/server/browser');5injectHook(Page, 'on', (delegate, ...args) => {6 console.log('Page.on', ...args);7 return delegate(...args);8});9injectHook(BrowserContext, 'on', (delegate, ...args) => {10 console.log('BrowserContext.on', ...args);11 return delegate(...args);12});13injectHook(Browser, 'on', (delegate, ...args) => {14 console.log('Browser.on', ...args);15 return delegate(...args);16});17const { chromium } = require('playwright');18(async () => {19 const browser = await chromium.launch();20 const context = await browser.newContext();21 const page = await context.newPage();22 await page.screenshot({ path: `example.png` });23 await browser.close();24})();
Using AI Code Generation
1const { injectHook } = require('playwright/lib/utils/injectedScript');2const { contextBridge } = require('electron');3contextBridge.exposeInMainWorld('playwright', {4});5const { contextBridge } = require('electron');6contextBridge.exposeInMainWorld('electron', {7 ipcRenderer: require('electron').ipcRenderer8});9const { app, BrowserWindow } = require('electron');10const path = require('path');11function createWindow() {12 const win = new BrowserWindow({13 webPreferences: {14 preload: path.join(__dirname, 'preload.js'),15 }16 });17 win.loadFile('index.html');18}19app.whenReady().then(() => {20 createWindow();21});22const { app, BrowserWindow, ipcMain } = require('electron');23const path = require('path');24const playwright = require('playwright');25app.whenReady().then(() => {26 ipcMain.on('start', async (event, arg) => {27 const browser = await playwright.chromium.launch({28 });29 const context = await browser.newContext();30 const page = await context.newPage();31 await page.click('text=I agree');32 await page.click('text=Sign in');33 await page.fill('input[name="identifier"]', 'username');34 await page.click('text=Next');35 await page.fill('input[name="password"]', 'password');36 await page.click('text=Next');37 await page.waitForLoadState('networkidle');38 await page.close();39 await browser.close();40 });41});
Using AI Code Generation
1const { injectHook } = require('playwright-core/lib/server/injected/injectedScript');2const test = require('@playwright/test');3const { chromium } = require('playwright-core');4test.beforeAll(async ({browser}) => {5 const page = await browser.newPage();6 await injectHook(page, 'on', 'request', (request) => {7 console.log('request', request.url());8 });9});10test('test', async ({ page }) => {11});12test.beforeAll(async ({page}) => {13 await page.evaluate((injectHook) => {14 injectHook('on', 'request', (request) => {15 console.log('request', request.url());16 });17 }, injectHook);18});19test.beforeAll(async ({page}) => {20 await page.evaluate((injectHook) => {21 injectHook('on', 'request', (request) => {22 console.log('request', request.url());23 });24 }, injectHook);25});
Using AI Code Generation
1import { injectHook } from 'playwright/lib/server/chromium/crBrowser';2import { chromium } from 'playwright';3const browser = await chromium.launch();4await injectHook(browser, 'console.log("Hello World")');5await browser.close();6import { injectHook } from 'playwright/lib/server/chromium/crBrowser';7import { chromium } from 'playwright';8const browser = await chromium.launch();9await injectHook(browser, 'console.log("Hello World")');10await browser.close();11import { injectHook } from 'playwright/lib/server/chromium/crBrowser';12import { chromium } from 'playwright';13const browser = await chromium.launch();14await injectHook(browser, `15const logNetworkEvents = (event) => {16 console.log(event);17}18browserContext.on('request', logNetworkEvents);19browserContext.on('requestfailed', logNetwork
Using AI Code Generation
1const { injectHook } = require('playwright/lib/server/injected/injectedScript');2const { Page } = require('playwright/lib/server/page');3const page = await browser.newPage();4const frame = await page.mainFrame();5const frameId = frame._id;6const hook = (frameId, source) => {7 const { window } = window['playwright-injected-script'];8 const { Page } = window['playwright-injected-script'];9 const page = Page._pageForFrame(frameId);10 const { document } = page._delegate._document;11 const script = document.createElement('script');12 script.textContent = source;13 document.documentElement.appendChild(script);14};15await injectHook(frameId, hook.toString());16await injectHook(frameId, 'console.log("hello world")');17const { injectHook } = require('playwright/lib/server/injected/injectedScript');18const { Page } = require('playwright/lib/server/page');19const hook = (frameId, source) => {20 const { window } = window['playwright-injected-script'];21 const { Page } = window['playwright-injected-script'];22 const page = Page._pageForFrame(frameId);23 const { document } = page._delegate._document;24 const script = document.createElement('script');25 script.textContent = source;26 document.documentElement.appendChild(script);27};28module.exports = {29 use: {30 playwright: {31 launchOptions: {32 },33 contextOptions: {34 },
Using AI Code Generation
1const { injectHook } = require('playwright-core/lib/server/injected/injectedScript');2injectHook((e) => {3 console.log('Event: ', e);4});5const { chromium } = require('playwright');6(async () => {7 const browser = await chromium.launch();8 const page = await browser.newPage();9 console.log(await page.content());10 await browser.close();11})();12const { chromium } = require('playwright');13(async () => {14 const browser = await chromium.launch();15 const page = await browser.newPage();16 await page.evaluate(() => console.log('Hello world'));17 await page.on('console', (msg) => {18 console.log(msg.text());19 });20 await browser.close();21})();22const { chromium } = require('playwright');23(async () => {24 const browser = await chromium.launch();25 const page = await browser.newPage();26 await page.on('request', (
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!!