Best JavaScript code snippet using playwright-internal
index.js
Source: index.js
1// imports2 import path from 'path';3 import fs from 'fs';4 import * as Service from './service.js';5 import * as Common from './lib/common.js';6 import CONFIG from './config.js';7// constants8 const PROBE_SCREEN = true;9 const callId = () => (99999*Math.random()+Date.now()).toString(36);10 const {sleep, DEBUG, DEBUG2} = Common;11 // simple key value store12 const KV = {};13 const HasListeners = new Map();14// main export15 // note that these calls with UI = App.UI16 // will run against the default (the first) UI created.17 // but only when called directly from the service side.18 // when called from UI side, the calls that have a UI parameter19 // are called on the UI that makes the call or, if the UI parameter is a string20 // called on the UI having the name equal to that string.21 // before the App opens a window or22 // if the 'default' UI is closed there will be no default UI23 // and calls made from the service side on functions24 // requiring a UI parameter and without specifying a UI 25 // parameter will fail at that time26 // until a new UI (window) is opened (via API.ui.open())27 const API = {28 go, // start app launch sequence29 stop, // kill app, cleanup, and exit (after async jobs parameter completes)30 say, // say something to console (throws if console closed)31 ui : {32 open, // open UI window33 close, // close UI window34 move, // move UI window (throws if no window open)35 size, // size UI window (throws if no window open)36 minimize, // minimize UI window (throws if no window open)37 maximize, // maximize UI window (throws if no window open)38 restore, // switch between maximize and how it was before39 fullscreen, // UI window to fullscreen40 partscreen, // UI window to part of screen41 getLayout, // get window left, right, width, height and windowState42 openBlank, // open a UI window to about:blank43 writePage, // like document.write if using a custom window control box, writes to the44 // iframe document inside that45 getScreen, // get screen dimensions46 },47 meta: {48 getStartURL, // gets the start URL for the app 49 getFavicon, // gets a (or an optionally named) favicon as a data URL50 getTitle, // gets the app title51 },52 control: {53 send, // send a DevTools command (throws if ui not connected yet)54 on, // start listening for a DevTools event (throws if ui not connected yet)55 off, // stop listening for a DevTools event (throws if ui not connected yet)56 },57 util: {58 sleep,59 kv: save, // save a (key, value) pair60 k: load, // getrieve a key61 d: del,62 hasKey // returns a promise that resolves when a key is set63 },64 _serviceOnly: {65 publishAPI, // publish an API into the UI context (requires apiInUI: true)66 getUI,67 getApp68 }69 };70export default API;71// state variables72 let App;73// basic functions74 async function go({75 uiName:76 uiName = undefined, // name for first window opened (if any) 77 apiInUI: // enable grader API available in UI context78 apiInUI = false,79 addHandlers:80 addHandlers = undefined, // callback to add the route handlers to an express app81 server:82 server = null, // used to replace the default server83 // if you don't want a server or if you need 84 // more control (such as websockets, or TLS)85 // we call listen automatically86 keepConsoleOpen:87 keepConsoleOpen = false, // keeps the console open in case you need it88 doLayout: 89 doLayout = true, // control window layout on screen90 // true for auto centered mode (default) or91 // a function with signature: ({screenWidth, screenHeight}) => 92 // {screenWidth, screenHeight, x, y, width, height}93 // to set the x,y,width,height base on screenWidth and screenHeight94 keepAlive: 95 keepAlive = false, // keeps the service running after all windows closed96 // until it is explicitly killed with stop97 noWindow:98 noWindow = false, // starts the service but doesn't open a window99 } = {}) {100 App = await Service.go({101 uiName, 102 apiInUI, addHandlers, 103 server, keepConsoleOpen, doLayout, keepAlive, noWindow104 });105 return App;106 }107 async function stop() {108 if ( !App ) {109 throw new TypeError(110 `API.stop can only be called if App has started and is not already stopped.`111 );112 }113 await App.killService();114 }115 async function say(msg) {116 try {117 await App.notify(msg);118 } catch(e) {119 DEBUG && console.info("say.App.notify", e);120 throw new TypeError(121 `Cannot API.say a console message because App Console has already closed.`122 );123 }124 }125// window functions126 async function open(settings) {127 if ( ! App ) throw new TypeError(`Need to call API.go first to create App before opening additional windows.`);128 const {uis,ServicePort} = App;129 const {uiName: name, keepService, uriPath} = settings;130 const sessionId = Common.newSessionId();131 // do layout prep if requrested132 let layout;133 if ( settings.doLayout ) {134 let screenWidth, screenHeight;135 if ( PROBE_SCREEN ) {136 ({screenWidth, screenHeight} = await getScreen({137 ServicePort, 138 /*139 sessionId,140 */141 uis142 }));143 } else {144 screenWidth = 800;145 screenHeight = 600;146 }147 layout = {screenWidth, screenHeight};148 if ( typeof settings.doLayout === "function" ) {149 layout = settings.doLayout(layout);150 }151 }152 fs.writeFileSync('grader.open.log', JSON.stringify({ServicePort, sessionId}));153 let browser, UI;154 try {155 ({UI,browser} = await Service.newBrowser({156 uis,157 ServicePort, sessionId, layout, name,158 keepService,159 uriPath160 }));161 // if not UI yet, this is the first so set it as default162 if ( ! App.UI ) {163 App.UI = UI;164 }165 } catch(e) {166 console.log("open.newBrowser", e);167 fs.writeFileSync('grader.error', JSON.stringify({err:e, msg:e+''}));168 }169 // don't expose socket170 UI.socket = null;171 return {UI,browser};172 }173 async function close(UI = App.UI) {174 const call = callId();175 const {browserSessionId,id} = UI;176 DEBUG2 && console.info({browserSessionId,id,call,close:1});177 const errors = [];178 if ( ! UI.disconnected ) {179 try {180 DEBUG2 && console.info({browserSessionId,id,call,close:2});181 await UI.send("Browser.close", {}); 182 DEBUG2 && console.info({browserSessionId,id,call,close:3});183 } catch(e) {184 DEBUG2 && console.info('Error closing browser', e);185 errors.push({msg:'error closing browser', e});186 }187 try {188 DEBUG2 && console.info({browserSessionId,id,call,close:4});189 UI.disconnect();190 DEBUG2 && console.info({browserSessionId,id,call,close:5});191 } catch(e) {192 DEBUG2 && console.info(`Error disconnecting socket`, e);193 errors.push({msg:'error disconnecting socket', e});194 }195 } 196 // does not work197 //await sleep(1000);198 try {199 await UI.browser.kill();200 } catch(e) {201 DEBUG2 && console.info(`Error kill browser`, e);202 errors.push({msg:'error kill browser', e});203 }204 try {205 DEBUG2 && console.info({browserSessionId,id,call,close:6});206 UI.cleanSessionDirs();207 DEBUG2 && console.info({browserSessionId,id,call,close:7});208 } catch(e) {209 DEBUG2 && console.info(`Error shut down browser.`, e);210 errors.push({msg:'error UI.cleanSessionDirs', e});211 }212 DEBUG2 && console.info({browserSessionId,id,call,close:8});213 if ( errors.length ) {214 DEBUG2 && console.log(`API.ui.close`, errors);215 return {status:'fail', errors};216 } else {217 DEBUG2 && console.log(`API.ui.close`, 'success');218 return {status:'success'};219 }220 }221 async function move({x,y}, UI = App.UI) {222 UI.x = x;223 UI.y = y;224 return await UI.send("Browser.setWindowBounds", {225 windowId: UI.windowId,226 bounds: {227 left: x,228 top: y229 }230 });231 }232 async function size({width,height}, UI = App.UI) {233 /*234 await UI.send("Emulation.setDeviceMetricsOverride", {235 mobile: false,236 width,237 height,238 deviceScaleFactor: 1,239 screenOrientation: {240 angle: 0,241 type: 'portraitPrimary'242 },243 });244 */245 await UI.send("Browser.setWindowBounds", {246 windowId: UI.windowId,247 bounds: {248 windowState: 'normal',249 width:0,250 height:0251 }252 });253 const result = await UI.send("Browser.setWindowBounds", {254 windowId: UI.windowId,255 bounds: {256 windowState: 'normal',257 width,258 height259 }260 });261 UI.width = width;262 UI.height = height;263 return result;264 }265 async function minimize(UI = App.UI) {266 const {windowState} = await getLayout();267 if ( windowState == 'minimized' ) return;268 const result = await UI.send("Browser.setWindowBounds", {269 windowId: UI.windowId,270 bounds: {271 windowState: 'minimized'272 }273 });274 return result;275 }276 async function restore(UI = App.UI) {277 const {windowState} = await getLayout();278 let result;279 if ( windowState == 'maximized' ) {280 result = await UI.send("Browser.setWindowBounds", {281 windowId: UI.windowId,282 bounds: {283 windowState: 'normal'284 }285 });286 } else {287 result = await UI.send("Browser.setWindowBounds", {288 windowId: UI.windowId,289 bounds: {290 windowState: 'maximized'291 }292 });293 }294 return result;295 }296 async function maximize(UI = App.UI) {297 const {windowState} = await getLayout();298 if ( windowState == 'minimized' ) {299 await partscreen(UI);300 }301 const result = await UI.send("Browser.setWindowBounds", {302 windowId: UI.windowId,303 bounds: {304 windowState: 'maximized'305 }306 });307 return result;308 }309 async function fullscreen(UI = App.UI) {310 const {windowState} = await getLayout();311 if ( windowState == 'minimized' ) {312 await partscreen(UI);313 }314 const result = await UI.send("Browser.setWindowBounds", {315 windowId: UI.windowId,316 bounds: {317 windowState: 'fullscreen'318 }319 });320 return result;321 }322 async function partscreen(UI = App.UI) {323 const {windowState} = await getLayout();324 if ( windowState == 'normal' ) return;325 const result = await UI.send("Browser.setWindowBounds", {326 windowId: UI.windowId,327 bounds: {328 windowState: 'normal'329 }330 });331 return result;332 }333 async function getLayout(UI = App.UI) {334 const {bounds} = await UI.send("Browser.getWindowBounds", {335 windowId: UI.windowId336 });337 return bounds;338 }339// window functions part ii340 async function openBlank() {341 throw new TypeError(`Not implemented yet.`);342 }343 async function writePage() {344 throw new TypeError(`Not implemented yet.`);345 }346// meta functions347 async function getStartURL(UI = App.UI) {348 return UI.startUrl;349 }350 async function getFavicon() {351 const iconPath = path.resolve(Service.SITE_PATH, '_icons', 'favicon.ico'); 352 const base64Icon = fs.readFileSync(iconPath, {encoding:'base64'});353 const dataURL = `data:image/ico;base64,${base64Icon}`;354 return dataURL;355 }356 async function getTitle() {357 return CONFIG.name;358 }359// window functions part iii360 async function getScreen({ServicePort, sessionId: providedSessionId, uis} = {}) {361 console.log(`Getting screen`);362 let screen = load('screen');363 if ( !screen ) {364 // open a headless browser to a page that sends us the screen details365 let UI;366 try {367 ({UI} = await Service.newBrowser({368 uis,369 silent: true,370 headless: true, 371 uriPath: '/_api/getscreen.html',372 ServicePort, 373 sessionId: providedSessionId || Common.newSessionId(),374 // we will delete directories unless provided with a sessionId375 // which can save time for main UI startup as the headless376 // window prepares all the session directories377 noDelete: providedSessionId ? true : false,378 // we don't want to kill the whole service when we close this UI379 // and we have no other UIs open380 // since often this UI comes before others to provide the screen details381 // for layout382 keepService: true383 }));384 } catch(e) {385 console.log("getScreen.newBrowser", e);386 fs.writeFileSync('grader.error', JSON.stringify({err:e, msg:e+''}));387 }388 389 // wait until the key is set390 await hasKey('screen');391 // kill the browser __ it has served its purpose, honorably and nobly392 await close(UI); 393 394 screen = load('screen');395 }396 console.log({screen});397 return screen;398 }399// control functions400 async function send(command, params, UI = App.UI) {401 return await UI.send(command, params);402 }403 async function on(eventName, handler, UI = App.UI) {404 return await UI.on(eventName, handler);405 }406 function off() {407 throw new TypeError(`off is not implemented yet...`);408 }409// util part i: KV functions (keys are strings)410 function save(key, value) {411 DEBUG && console.log({save:{key,value}});412 key += '';413 if ( typeof value == "object" ) {414 // do a pseudo merge415 let newValue;416 if ( Array.isArray(value) ) {417 const existing = KV[key] || [];418 if ( Array.isArray(existing) ) {419 newValue = [...existing, ...value];420 } else if ( typeof existing == "object" ) {421 value.forEach((v,i) => {422 existing[i] = v;423 });424 newValue = existing;425 } else {426 newValue = value;427 }428 } else {429 const existing = KV[key] || {};430 newValue = Object.assign(existing, value);431 }432 KV[key] = newValue;433 } else {434 KV[key] = value;435 }436 // run any listeners waiting for this key to be set437 let listeners = HasListeners.get(key);438 if ( listeners ) {439 HasListeners.delete(key);440 listeners.forEach(res => {441 // execute each without a stack442 setTimeout(() => res(true), 0);443 });444 }445 }446 function load(key) {447 key += '';448 return KV[key];449 }450 function del(key) {451 key += '';452 delete KV[key];453 }454 // returns a promise that resolves to true when the key is set455 async function hasKey(key) {456 key += '';457 let resolve;458 const pr = new Promise(res => resolve = res);459 let hasKey = false;460 hasKey = Object.prototype.hasOwnProperty.call(KV, key);461 if ( hasKey ) {462 return resolve(true);463 } else {464 let listeners = HasListeners.get(key);465 if ( ! listeners ) {466 listeners = [];467 HasListeners.set(key, listeners);468 }469 // these listeners will be called by save once key is set470 listeners.push(resolve);471 }472 return pr;473 }474// service only functions (not available over the API bridge to UI)475 function publishAPI(apiRoot, slotName) {476 // apiRoot is an object with properties that enumerate all the functions of that API477 // e.g. if your API is "sendEmail", "checkReplies", your apiRoot is478 // {sendEmail, checkReplies}479 // you can overwrite built-in APIs (like uitl, ui, control and window)480 // but we throw if you try to overwrite those APIs you publish481 Object.defineProperty(API, slotName, {482 get: () => apiRoot,483 set() {484 throw new TypeError(`API slot ${slotName} is already present and cannot be overwritten.`);485 }486 });487 }488 function getUI(name) {489 if ( ! App ) {490 throw new TypeError(`Cannot call getUI when App does not exist.`);491 }492 if ( App.uis.has(name) ) {493 return App.uis.get(name);494 } else {495 throw new TypeError(`UI with name ${name} does not exist.`);496 }497 }498 function getApp() {499 if ( ! App ) {500 throw new TypeError(`Cannot call getApp when App does not exist.`);501 }502 return App;503 }...
main.js
Source: main.js
...36 webPreferences: {37 nodeIntegration: true,38 },39 })40 setWindowBounds()41 setWindowBounds()42 let indexPath43 if (isDev && process.argv.indexOf('--noDevServer') === -1) {44 indexPath = url.format({45 protocol: 'http:',46 host: 'localhost:8080',47 pathname: 'index.html',48 slashes: true,49 })50 } else {51 indexPath = url.format({52 protocol: 'file:',53 pathname: path.join(__dirname, 'dist', 'index.html'),54 slashes: true,55 })56 }57 mainWindow.loadURL(indexPath)58 // Don't show until we are ready and loaded59 mainWindow.once('ready-to-show', () => {60 mainWindow.show()61 // Open devtools if dev62 if (isDev) {63 const {64 default: installExtension,65 REACT_DEVELOPER_TOOLS,66 } = require('electron-devtools-installer')67 installExtension(REACT_DEVELOPER_TOOLS).catch((err) =>68 console.log('Error loading React DevTools: ', err)69 )70 mainWindow.webContents.openDevTools()71 }72 })73 mainWindow.on('closed', () => (mainWindow = null))74}75function createTray() {76 // Create Tray77 tray = new Tray(`${__dirname}/assets/icons/windows-icon@2x.png`)78 // set Titel79 tray.setToolTip('SysInfo')80 // Toggle hide81 tray.on('click', (e) => {82 if (mainWindow.isVisible()) {83 mainWindow.hide()84 } else {85 mainWindow.show()86 }87 })88 tray.on('right-click', () => {89 // create close-menu90 const template = [{ role: 'quit' }]91 const menu = Menu.buildFromTemplate(template)92 tray.popUpContextMenu(menu)93 })94}95function setWindowBounds(choosenScreen = storeSettinsgs.settings.screen) {96 // Set mainWindow on top-right97 const { width: windowWidth, height: windowHeight } = mainWindow.getBounds();98 let window = screen.getPrimaryDisplay()99 if (storeSettinsgs && storeSettinsgs.windows === screen.getAllDisplays().length) {100 let tempWd = screen.getAllDisplays();101 window = tempWd[choosenScreen];102 }103 mainWindow.setBounds({104 x: window.workArea.x + (window.workArea.width - windowWidth),105 y: window.workArea.y,106 width: windowWidth,107 height: windowHeight108 })109}110app.on('ready', () => {111 createMainWindow()112 createTray()113})114app.on('window-all-closed', () => {115 if (process.platform !== 'darwin') {116 app.quit()117 }118})119app.on('activate', () => {120 if (mainWindow === null) {121 createMainWindow()122 }123})124// IPC-Calls125ipcMain.on('infos:getStatic', async () => {126 let infos = await getStaticInfos()127 mainWindow.webContents.send('infos:receiveStatic', infos)128})129ipcMain.on('infos:getDynamicDashboard', async () => {130 let infos = await getDynamicDashboard()131 mainWindow.webContents.send('infos:receiveDynamicDashboard', infos)132})133ipcMain.on('settings:get', () => {134 mainWindow.webContents.send('settings:receive', { ...store.get('settings'), 'windows': screen.getAllDisplays().length })135})136ipcMain.on('settings:save', (sender, data) => {137 store.set('settings', data)138 mainWindow.setOpacity(parseFloat(data.settings.opacity))139 mainWindow.isAlwaysOnTop(parseBooleans(data.settings.isAlwaysOnTop))140 setWindowBounds(data.settings.screen)141 setWindowBounds(data.settings.screen)142})143// Stop error...
electronUtil.js
Source: electronUtil.js
1const { INIT_WINDOW_STYLE } = require('../../com-constant')2// const { doubced } = require('../../com-function')3function setWindowBounds(mainWindow, data) {4 mainWindow.setSize(data.width, data.height)5 if (data.x === data.y && data.x === 'center') {6 mainWindow.center()7 } else if (data.x != null && data.y != null) {8 mainWindow.setPosition(data.x, data.y)9 }10}11exports.setWindowBounds = setWindowBounds12exports.setMoyuModeData = function (mainWin, data = {}) {13 setWindowBounds(mainWin, data)14 mainWin.setAlwaysOnTop(data.isTop, 'screen-saver')15 mainWin.setIgnoreMouseEvents(data.isTransparent)16}17function winScreen(win) {18 let isFullScreen = false19 let prevxy = {20 // width:21 ...INIT_WINDOW_STYLE,22 x: 'center',23 y: 'center',24 }25 win.on('enter-full-screen', () => {26 // isFullScreen = true27 setPrevdata()28 })29 /* const doubcedMoved = doubced(setPrevxy, 500)30 win.on('move', () => {31 // isFullScreen = true32 doubcedMoved()33 }) */34 function setPrevxy() {35 const [x, y] = win.getPosition()36 prevxy.x = x37 prevxy.y = y38 console.log('setPrevxy', prevxy)39 }40 function getPosi() {41 var data = win.getBounds()42 const [x, y] = win.getPosition()43 data.x = x44 data.y = y45 return data46 }47 function setPrevdata() {48 prevxy = getPosi()49 console.log('setPrevdata', prevxy)50 return prevxy51 }52 /* win.on('blur', (a, b) => {53 console.log('blur', win.getBounds())54 }) */55 function toggleAddSize(data) {56 let isAdd = false57 return {58 isAdded() {59 return isAdd60 },61 hide() {62 if (!isAdd) {63 return64 }65 isAdd = false66 const dat = getPosi()67 // restore()68 setWindowBounds(win, {69 width: dat.width - (data.width || 0),70 height: dat.height - (data.height || 0),71 })72 },73 show(letd) {74 if (isAdd) {75 return76 }77 isAdd = true78 data = letd || data79 const { width, height } = setPrevdata()80 setWindowBounds(win, {81 width: width + (data.width || 0),82 height: height + (data.height || 0),83 })84 },85 toggle(data) {86 if (isAdd) {87 this.hide()88 } else {89 this.show(data)90 }91 return isAdd92 },93 }94 }95 function toFullScreen() {96 // éæååï¼è¿éè·åçæ¯å
¨å±çä¿¡æ¯97 // console.log(win.getBounds())98 /* prevxy = win.getBounds()99 const [x, y] = win.getPosition()100 prevxy.x = x101 prevxy.y = y */102 win.setFullScreen(true)103 isFullScreen = true104 // console.log('prevxy', prevxy)105 }106 function exitFullScreen() {107 // console.log('éåºå
¨å±', isFullScreen)108 if (isFullScreen) {109 isFullScreen = false110 restore()111 }112 }113 function restore() {114 setWindowBounds(win, prevxy)115 }116 return {117 setPrevdata,118 toggleAddSize,119 setfs(f) {120 isFullScreen = f121 },122 isFullScreen() {123 return isFullScreen124 },125 toFullScreen,126 exitFullScreen,127 restore,128 }...
NavigationLayout.js
Source: NavigationLayout.js
...13// win.setResizable(true);14// win.setMaximizable(true);15// win.setFullScreenable(true);16// win.setMinimumSize(size.width, size.height);17// setWindowBounds(size, { animated: true });18// win.center();19// };20const styles = theme => ({21 content: {22 flexGrow: 1,23 // backgroundColor: theme.palette.background.default,24 backgroundColor: '#fff',25 // padding: theme.spacing.unit * 3,26 marginLeft: 72,27 // marginTop: 64,28 minHeight: '100%'29 },30 dicoDrawer: {31 color: theme.drawer.color,...
AppTray.js
Source: AppTray.js
...31 } else {32 y = y + 30;33 }34 }35 this.setWindowBounds(x, y);36 };37 setWindowBounds = (x, y) => {38 const { height, width } = this.appWindow.getBounds();39 const xCoord = Math.floor(x - width / 2);40 if (y <= 50) {41 this.appWindow.setContentBounds({42 x: xCoord,43 y: y,44 height,45 width,46 });47 } else {48 this.appWindow.setContentBounds({49 x: xCoord,...
browserHandler.js
Source: browserHandler.js
...22 }23};24const setWindowBounds = async (targetId, height, width) => {25 const { windowId } = await _browser.getWindowForTarget({ targetId });26 await _browser.setWindowBounds({27 bounds: { height, width },28 windowId,29 });30};31const clearPermissionOverrides = async () => {32 await _browser.resetPermissions();33};...
txnCheck.js
Source: txnCheck.js
1const puppeteer = require("puppeteer-extra");2const StealthPlugin = require("puppeteer-extra-plugin-stealth");3puppeteer.use(StealthPlugin());4const AdblockerPlugin = require("puppeteer-extra-plugin-adblocker");5puppeteer.use(AdblockerPlugin({ blockTrackers: true }));6async function txnCheck(url) {7 return new Promise(async (resolve, reject) => {8 const browser = await puppeteer.launch({9 headless: false,10 });11 const page = await browser.newPage();12 const session = await page.target().createCDPSession();13 const {windowId} = await session.send('Browser.getWindowForTarget');14 await session.send('Browser.setWindowBounds', {windowId, bounds: {windowState: 'minimized'}});15 await page.goto(url);16 await page.waitForSelector("#ContentPlaceHolder1_maintable");17 18 try {19 let cardText = await page.$eval("#ContentPlaceHolder1_maintable .row:nth-child(4) div:nth-child(2)", (text) => text.textContent);20 await browser.close();21 resolve(cardText);22 } catch (error) {23 await browser.close();24 resolve("Unknown");25 }26 });27}...
util.js
Source: util.js
1async function minimize(page) {2 const session = await page.target().createCDPSession();3 const goods = await session.send("Browser.getWindowForTarget");4 const { windowId } = goods;5 await session.send("Browser.setWindowBounds", {6 windowId,7 bounds: { windowState: "minimized" },8 });9 10 return;11 }12 13async function maximize(page) {14 const session = await page.target().createCDPSession();15 const goods = await session.send("Browser.getWindowForTarget");16 const { windowId } = goods;17 await session.send("Browser.setWindowBounds", {18 windowId,19 bounds: { windowState: "normal" },20 });21 }22module.exports = {23 minimize,24 maximize...
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 const { width, height } = await page.evaluate(() => {7 return {8 }9 });10 console.log(width, height);11 await page.evaluate((width, height) => {12 return window.playwright.setWindowBounds({13 });14 }, width, height);15 const { width: newWidth, height: newHeight } = await page.evaluate(() => {16 return {17 }18 });19 console.log(newWidth, newHeight);20 await browser.close();21})();22const { chromium } = require('playwright');23const path = require('path');24(async () => {25 const browser = await chromium.launch();26 const context = await browser.newContext();27 const page = await context.newPage();28 await page.evaluate(() => {29 return window.playwright.setWindowBounds({30 });31 });32 await browser.close();33})();
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch({ headless: false });4 const context = await browser.newContext();5 const page = await context.newPage();6 const currentWindowBounds = await page._delegate._pageProxy._session.send('Browser.getWindowForTarget');7 console.log(currentWindowBounds);8 const newBounds = {9 bounds: {10 },11 };12 await page._delegate._pageProxy._session.send('Browser.setWindowBounds', newBounds);13 await page.screenshot({ path: 'screenshot.png' });14 await browser.close();15})();16{17 "bounds": {18 },19}
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch({4 });5 const context = await browser.newContext();6 const page = await context.newPage();7 await page.setWindowBounds({ width: 800, height: 600 });8 await browser.close();9})();
Using AI Code Generation
1const { setWindowBounds } = require('playwright/lib/server/chromium/crBrowser');2setWindowBounds.call(browser, { width: 1920, height: 1080, windowState: 'normal' });3const { setWindowBounds } = require('playwright/lib/server/chromium/crBrowser');4setWindowBounds.call(browser, { width: 1920, height: 1080, windowState: 'normal' });5const { setWindowBounds } = require('playwright/lib/server/chromium/crBrowser');6setWindowBounds.call(browser, { width: 1920, height: 1080, windowState: 'normal' });7const { setWindowBounds } = require('playwright/lib/server/chromium/crBrowser');8setWindowBounds.call(browser, { width: 1920, height: 1080, windowState: 'normal' });9const { setWindowBounds } = require('playwright/lib/server/chromium/crBrowser');10setWindowBounds.call(browser, { width: 1920, height: 1080, windowState: 'normal' });11const { setWindowBounds } = require('playwright/lib/server/chromium/crBrowser');12setWindowBounds.call(browser, { width: 1920, height: 1080, windowState: 'normal' });
Using AI Code Generation
1const { chromium } = require('playwright');2const fs = require('fs');3const path = require('path');4const { setWindowBounds } = require('playwright/lib/server/chromium/crBrowser');5(async () => {6 const browser = await chromium.launch({ headless: false });7 const context = await browser.newContext();8 const page = await context.newPage();9 const browserServer = browser._browserServer;10 const browserContext = browser._defaultContext;11 const browserWindow = browserContext._browserWindow;12 await setWindowBounds(browserWindow, {13 position: { x: 0, y: 0 },14 size: { width: 1920, height: 1080 },15 });16 await page.screenshot({ path: 'full-page.png' });17 await browser.close();18})();19at Object.setWindowBounds (/home/kiran/automation/node_modules/playwright/lib/server/chromium/crBrowser.js:36:11)20at processTicksAndRejections (internal/process/task_queues.js:97:5)21at async Object.exports.setWindowBounds (/home/kiran/automation/node_modules/playwright/lib/utils/utils.js:101:26)22at async Object.exports.setWindowBounds (/home/kiran/automation/node_modules/playwright/lib/utils/utils.js:112:16)23const { chromium } = require('playwright');24const fs = require('fs');25const path = require('path');26const { getWindowBounds } = require('playwright/lib/server/chromium/crBrowser');27(async () => {28 const browser = await chromium.launch({ headless: false });29 const context = await browser.newContext();30 const page = await context.newPage();31 const browserServer = browser._browserServer;32 const browserContext = browser._defaultContext;33 const browserWindow = browserContext._browserWindow;
Using AI Code Generation
1const { chromium } = require('playwright');2const { setWindowBounds } = require('playwright/lib/server/chromium/crBrowser');3const { debug } = require('playwright/lib/utils/debug');4(async () => {5 const browser = await chromium.launch({6 });7 const context = await browser.newContext();8 const page = await context.newPage();9 const windowHandle = await page.evaluate(() => window);10 const windowBounds = await page.evaluate(() => {11 return {12 };13 });14 await setWindowBounds.call(windowHandle, windowBounds);15 await page.screenshot({ path: 'google.png' });16 await browser.close();17})();18const { chromium } = require('playwright');19const { setWindowBounds } = require('playwright/lib/server/chromium/crBrowser');20const { debug } = require('playwright/lib/utils/debug');21(async () => {22 const browser = await chromium.launch({23 });24 const context = await browser.newContext();25 const page = await context.newPage();26 const windowHandle = await page.evaluate(() => window);27 const windowBounds = await page.evaluate(() => {28 return {29 };30 });31 await setWindowBounds.call(windowHandle, windowBounds);32 await page.screenshot({ path: 'google.png' });33 await browser.close();34})();
Jest + Playwright - Test callbacks of event-based DOM library
firefox browser does not start in playwright
Is it possible to get the selector from a locator object in playwright?
How to run a list of test suites in a single file concurrently in jest?
Running Playwright in Azure Function
firefox browser does not start in playwright
This question is quite close to a "need more focus" question. But let's try to give it some focus:
Does Playwright has access to the cPicker object on the page? Does it has access to the window object?
Yes, you can access both cPicker and the window object inside an evaluate call.
Should I trigger the events from the HTML file itself, and in the callbacks, print in the DOM the result, in some dummy-element, and then infer from that dummy element text that the callbacks fired?
Exactly, or you can assign values to a javascript variable:
const cPicker = new ColorPicker({
onClickOutside(e){
},
onInput(color){
window['color'] = color;
},
onChange(color){
window['result'] = color;
}
})
And then
it('Should call all callbacks with correct arguments', async() => {
await page.goto(`http://localhost:5000/tests/visual/basic.html`, {waitUntil:'load'})
// Wait until the next frame
await page.evaluate(() => new Promise(requestAnimationFrame))
// Act
// Assert
const result = await page.evaluate(() => window['color']);
// Check the value
})
Check out the latest blogs from LambdaTest on this topic:
Native apps are developed specifically for one platform. Hence they are fast and deliver superior performance. They can be downloaded from various app stores and are not accessible through browsers.
One of the essential parts when performing automated UI testing, whether using Selenium or another framework, is identifying the correct web elements the tests will interact with. However, if the web elements are not located correctly, you might get NoSuchElementException in Selenium. This would cause a false negative result because we won’t get to the actual functionality check. Instead, our test will fail simply because it failed to interact with the correct element.
Smartphones have changed the way humans interact with technology. Be it travel, fitness, lifestyle, video games, or even services, it’s all just a few touches away (quite literally so). We only need to look at the growing throngs of smartphone or tablet users vs. desktop users to grasp this reality.
As part of one of my consulting efforts, I worked with a mid-sized company that was looking to move toward a more agile manner of developing software. As with any shift in work style, there is some bewilderment and, for some, considerable anxiety. People are being challenged to leave their comfort zones and embrace a continuously changing, dynamic working environment. And, dare I say it, testing may be the most ‘disturbed’ of the software roles in agile development.
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!!