Best JavaScript code snippet using playwright-internal
positioner.js
Source: positioner.js
1const electron = require('electron')2/**3 * Get the display nearest the current cursor position4 *5 * @return {Display} - the display closest to the current cursor position6 */7function getDisplay () {8 const screen = electron.screen9 return screen.getDisplayNearestPoint(screen.getCursorScreenPoint())10}11/**12 * Get cursor position13 *14 * @return {Point} - the position of the cursor15 */16function getCursorPosition () {17 return electron.screen.getCursorScreenPoint()18}19/**20 * Calculates the x position of the tray window21 *22 * @param {Rectangle} windowBounds - electron BrowserWindow bounds of tray window to position23 * @param {Rectangle} trayBounds - tray bounds from electron Tray.getBounds()24 * @param {string} [align] - align left|center|right, default: center25 *26 * @return {integer} - calculated x position27 */28function calculateXAlign (windowBounds, trayBounds, align) {29 const display = getDisplay()30 let x31 switch (align) {32 case 'right':33 x = trayBounds.x34 break35 case 'left':36 x = trayBounds.x + trayBounds.width - windowBounds.width37 break38 case 'center':39 default:40 x = Math.round(trayBounds.x + (trayBounds.width / 2) - (windowBounds.width / 2))41 }42 if (x + windowBounds.width > display.bounds.width && align !== 'left') {43 // if window would overlap on right side align it to the end of the screen44 x = display.bounds.width - windowBounds.width45 } else if (x < 0 && align !== 'right') {46 // if window would overlap on the left side align it to the beginning47 x = 048 }49 return x50}51/**52 * Calculates the y position of the tray window53 *54 * @param {Rectangle} windowBounds - electron BrowserWindow bounds55 * @param {Rectangle} trayBounds - tray bounds from electron Tray.getBounds()56 * @param {string} [align] - align up|middle|down, default: down57 *58 * @return {integer} - calculated y position59 */60function calculateYAlign (windowBounds, trayBounds, align) {61 const display = getDisplay()62 let y63 switch (align) {64 case 'up':65 y = trayBounds.y + trayBounds.height - windowBounds.height66 break67 case 'down':68 y = trayBounds.y69 break70 case 'center':71 default:72 y = Math.round((trayBounds.y + (trayBounds.height / 2)) - (windowBounds.height / 2))73 break74 }75 if (y + windowBounds.height > display.bounds.height && align !== 'up') {76 y = trayBounds.y + trayBounds.height - windowBounds.height77 } else if (y < 0 && align !== 'down') {78 y = 079 }80 return y81}82/**83 * Calculates the position of the tray window based on current cursor position84 * This method is used on linux where trayBounds are not available85 *86 * @param {Rectangle} windowBounds - electron BrowserWindow bounds of tray window to position87 * @param {Eelectron.Display} display - display on which the cursor is currently88 * @param {Point} cursor - current cursor position89 *90 * @return {Point} - Calculated point {x, y} where the window should be positioned91 */92function calculateByCursorPosition (windowBounds, display, cursor) {93 let x = cursor.x94 let y = cursor.y95 if (x + windowBounds.width > display.bounds.width) {96 // if window would overlap on right side of screen, align it to the left of the cursor97 x -= windowBounds.width98 }99 if (y + windowBounds.height > display.bounds.height) {100 // if window would overlap at bottom of screen, align it up from cursor position101 y -= windowBounds.height102 }103 return {104 x: x,105 y: y106 }107}108class Positioner {109 /**110 * Calculates the position of the tray window111 *112 * @param {Rectangle} windowBounds - electron BrowserWindow bounds of tray window to position113 * @param {Rectangle} trayBounds - tray bounds from electron Tray114 * @param {Object} [alignment] - alignment of window to tray115 * @param {string} [alignment.x] - x align if tray bar is on top or bottom (left|center|right),116 default: center117 * @param {string} [alignment.y] - y align if tray bar is left or right (up|middle|down),118 default: down119 * @return {Point} - Calculated point {x, y} where the window should be positioned120 */121 static calculate (windowBounds, trayBounds, alignment) {122 if (process.platform === 'linux') {123 const cursor = getCursorPosition()124 return calculateByCursorPosition(windowBounds, getDisplay(), cursor)125 }126 const _alignment = alignment || {}127 const taskbarPosition = this.getTaskbarPosition()128 const display = getDisplay()129 let x130 let y131 switch (taskbarPosition) {132 case 'left':133 x = display.workArea.x134 y = calculateYAlign(windowBounds, trayBounds, _alignment.y)135 break136 case 'right':137 x = display.workArea.width - windowBounds.width138 y = calculateYAlign(windowBounds, trayBounds, _alignment.y)139 break140 case 'bottom':141 x = calculateXAlign(windowBounds, trayBounds, _alignment.x)142 y = display.workArea.height - windowBounds.height143 break144 case 'top':145 default:146 x = calculateXAlign(windowBounds, trayBounds, _alignment.x)147 y = display.workArea.y148 }149 return {150 x,151 y152 }153 }154 /**155 * Calculates the position of the tray window156 *157 * @param {BrowserWindow} window - window to position158 * @param {Rectangle} trayBounds - tray bounds from electron Tray159 * @param {Object} [alignment] - alignment of window to tray160 * @param {string} [alignment.x] - x align if tray bar is on top or bottom (left|center|right),161 default: center162 * @param {string} [alignment.y] - y align if tray bar is left or right (up|middle|down),163 default: down164 *165 * @return {Void}166 */167 static position (window, trayBounds, alignment) {168 const position = this.calculate(window.getBounds(), trayBounds, alignment)169 window.setPosition(position.x, position.y, false)170 }171 /**172 * Calculates the position of the tray window173 *174 * @return {string} - the position of the taskbar (top|right|bottom|left)175 */176 static getTaskbarPosition () {177 const { bounds, workArea } = getDisplay()178 if (workArea.y > bounds.y) {179 return 'top'180 } else if (workArea.x > bounds.x) {181 return 'left'182 } else if (workArea.width === bounds.width) {183 return 'bottom'184 }185 return 'right'186 }187}...
chrome-app.js
Source: chrome-app.js
1const path = require('path');2const os = require('os');3const {electron, remote} = require('./electron-remote.js')4const {BrowserWindow, app, protocol, nativeImage} = electron;5const {throttleTimeout} = require('./util.js');6const {screen} = require('electron');7const {8 makeEvent,9 safeRegister,10 preventBrowserWindow,11 setGlobal,12 createWindowGlobals,13 deleteWindowGlobals,14} = require('../main/global.js');15const window = exports.window = {};16const runtime = exports.runtime = {};17const manifest = JSON.parse(JSON.stringify(remote.getGlobal('chromeManifest')));18const appDir = remote.getGlobal('chromeAppDir');19const appIcon = (function() {20 if (appDir && manifest && Object.keys(manifest.icons).length) {21 var key = Object.keys(manifest.icons).sort((a,b) => parseInt(a) < parseInt(b))[0].toString();22 var icon = path.join(appDir, manifest.icons[key]);23 console.log(`app icon: ${icon}`)24 return nativeImage.createFromPath(icon);25 }26})();27exports.runtime.onLaunched = makeEvent();28function loadWindowSettings(id) {29 return JSON.parse(localStorage.getItem('window-settings-' + id)) || {};30}31const windowMappings = {32 chromeToElectron: {},33 electronToChrome: {},34};35function updateWindowMappings() {36 setGlobal('windowMappings', windowMappings);37}38var hadWindows;39var windowMonitor = setInterval(function() {40 var hasWindows = Object.keys(windowMappings.chromeToElectron).filter(key => key != '__background').length;41 if (!hasWindows && !hadWindows) {42 if (os.platform() !== 'darwin') {43 chrome.runtime.shutdown();44 }45 }46 hadWindows = hasWindows;47}, 10000);48const windows = {};49const preloadPath = path.join(__dirname, '..', 'preload', 'chrome-preload.js');50exports.window.canSetVisibleOnAllWorkspaces = function() {51 return false;52}53// will be overwritten by preload script, as rpc can't do return values54exports.window.get = function(id) {55 return windows[id];56}57exports.window.create = function(options, cb) {58 var id = options.id;59 if (id == null)60 console.error('no id?')61 var w = windows[id];62 if (w) {63 cb(w, true);64 return;65 }66 var windowSettings = loadWindowSettings(id);67 var windowBounds = {};68 if (windowSettings.size && windowSettings.position) {69 windowBounds.width = windowSettings.size[0];70 windowBounds.height = windowSettings.size[1];71 windowBounds.x = windowSettings.position[0];72 windowBounds.y = windowSettings.position[1];73 // santize74 var display = screen.getDisplayMatching(windowBounds);75 var {workArea} = display;76 if (windowBounds.x < workArea.x77 || windowBounds.y < workArea.y78 || windowBounds.x + windowBounds.width > workArea.x + workArea.width79 || windowBounds.y + windowBounds.height > workArea.y + workArea.height) {80 windowBounds = {};81 }82 }83 var frameless = options.frame && options.frame.type == 'none';84 var options = options.innerBounds || {};85 var opts = {86 useContentSize: true,87 show: false,88 frame: !frameless,89 icon: appIcon,90 };91 var copyProps = ['x', 'y', 'width', 'height', 'minWidth', 'minHeight'];92 for (var i in copyProps) {93 i = copyProps[i];94 opts[i] = windowBounds[i];95 if (opts[i] === null || opts[i] === undefined)96 opts[i] = options[i];97 }98 console.log('creating window', id);99 opts.webPreferences = {100 plugins: true,101 preload: preloadPath,102 }103 w = new BrowserWindow(opts);104 w.setMenu(null);105 preventBrowserWindow(w);106 // need this cached because it becomes unaccessible after close107 var nativeId = w.id;108 windows[id] = w;109 windowMappings.electronToChrome[w.id] = id;110 windowMappings.chromeToElectron[id] = nativeId;111 updateWindowMappings();112 createWindowGlobals(nativeId);113 safeRegister(selfWindow, w, function() {114 console.log('window closed', id);115 if (windows[id] == w) {116 delete windowMappings.electronToChrome[nativeId];117 delete windowMappings.chromeToElectron[id];118 delete windows[id];119 deleteWindowGlobals(nativeId);120 updateWindowMappings();121 }122 }, 'close')123 var saveThrottle;124 function save() {125 saveThrottle = throttleTimeout(saveThrottle, null, 1000, function() {126 var data = {127 position: w.getPosition(),128 size: w.getContentSize(),129 isDevToolsOpened: w.webContents.isDevToolsOpened()130 }131 localStorage.setItem('window-settings-' + id, JSON.stringify(data));132 })133 };134 safeRegister(selfWindow, w, save, 'resize');135 safeRegister(selfWindow, w, save, 'move');136 safeRegister(selfWindow, w.webContents, save, 'devtools-opened');137 safeRegister(selfWindow, w.webContents, save, 'devtools-closed');138 cb(w, false, windowSettings);139}140const selfWindow = remote.getCurrentWindow();141safeRegister(selfWindow, app, function() {142 runtime.onLaunched.invokeListeners(null, [{143 isKioskSession: false,144 isPublicSession: false,145 source: "command_line"146 }]);...
electron.js
Source: electron.js
1const { app, BrowserWindow, Menu, screen } = require("electron");2const path = require("path");3const process = require("process");4const isDev = require("electron-is-dev");5const WebSocket = require("ws");6const devToolExtDir = require("./devToolExtDir");7const Hm = require("./handleMessages");8let win;9process.env["ELECTRON_DISABLE_SECURITY_WARNINGS"] = "true";10const url = isDev11 ? "http://localhost:3000"12 : `file://${path.join(__dirname, "../build/index.html")}`;13const isMac = process.platform === "darwin";14const template = [15 // { role: 'appMenu' }16 ...(isMac17 ? [18 {19 label: app.name,20 submenu: [{ role: "about" }, { role: "quit" }]21 }22 ]23 : []),24 {25 label: "File",26 submenu: [isMac ? { role: "close" } : { role: "quit" }]27 },28 {29 role: "help",30 submenu: [31 {32 label: "Learn More",33 click: async () => {34 const { shell } = require("electron");35 await shell.openExternal("https://github.com/carltonj2000/cj-utils");36 }37 }38 ]39 }40];41const menu = Menu.buildFromTemplate(template);42Menu.setApplicationMenu(menu);43let wss = null;44function createWindow() {45 const devToolExtPath = devToolExtDir();46 if (isDev && devToolExtPath)47 BrowserWindow.addDevToolsExtension(devToolExtPath);48 let winOpts = {};49 if (isDev) {50 let x;51 screen.getAllDisplays().find(d => {52 if (!x) return (x = d.bounds.x);53 if (x > d.bounds.x) return (x = d.bounds.x);54 });55 winOpts.x = x;56 winOpts.y = 0;57 }58 win = new BrowserWindow({59 ...winOpts,60 width: 800,61 height: 600,62 webPreferences: {63 nodeIntegration: true64 }65 });66 if (isDev && devToolExtPath) setupDevTools(win);67 win.loadURL(url);68 win.on("closed", () => (win = null));69 wss = new WebSocket.Server({ port: 1040 });70 wss.on("connection", function(w) {71 w.on("message", Hm.handleMessage(win, w));72 w.on("close", () => console.log("Closed"));73 w.send(JSON.stringify({ cmd: "ping", id: "1", value: "Server Up." }));74 });75}76app.on("ready", createWindow);77app.on("window-all-closed", () => {78 if (process.platform !== "darwin") {79 app.quit();80 }81});82app.on("activate", () => {83 if (win === null) {84 createWindow();85 }86});87function setupDevTools(mainWindow) {88 devtools = new BrowserWindow();89 mainWindow.webContents.setDevToolsWebContents(devtools.webContents);90 mainWindow.webContents.openDevTools({ mode: "detach" });91 mainWindow.webContents.once("did-finish-load", function() {92 var windowBounds = mainWindow.getBounds();93 devtools.setPosition(windowBounds.x, windowBounds.y + windowBounds.height);94 devtools.setSize(windowBounds.width, windowBounds.height);95 });96 mainWindow.on("move", function() {97 var windowBounds = mainWindow.getBounds();98 devtools.setPosition(windowBounds.x + windowBounds.width, windowBounds.y);99 });...
utils.js
Source: utils.js
1const { BrowserWindow, BrowserView, app } = require('electron');2const path = require('path');3const log = require('electron-log');4const settings = require('electron-settings');5const localshorts = require('electron-localshortcut');6const { readFile } = require('fs');7const { config } = require('./config');8function newWindow(url = null, windowBounds = null) {9 let win = new BrowserWindow({10 title: app.name,11 tabbingIdentifier: app.name,12 webPreferences: {13 nodeIntegration: true,14 webviewTag: true,15 preload: path.join(__dirname, 'preload.js')16 }17 })18 if (windowBounds) {19 win.setBounds(windowBounds)20 }21 log.debug('New window with URL:', url)22 win.loadURL(url)23 win.webContents.on('did-finish-load', function () {24 injectCSS(win)25 });26 win.webContents.on('new-window', function (event, url) {27 event.preventDefault()28 const { shell } = require('electron')29 shell.openExternal(url)30 });31 win.on('will-resize', (event, bounds) => {32 windowBounds = bounds33 })34 win.on('resize', () => {35 log.debug('Window resized, save window bounds:', windowBounds)36 settings.set('windowBounds', windowBounds)37 })38 win.on('will-move', (event, bounds) => {39 windowBounds = bounds40 })41 win.on('move', () => {42 log.debug('Window moved, save window bounds:', windowBounds)43 settings.set('windowBounds', windowBounds)44 })45 localshorts.register(win, 'Command+T', () => {46 newTab(config.baseURL)47 })48 return win49}50function newTab(url) {51 if (!url) {52 url = config.baseURL53 }54 tw = newWindow(url)55 let windows = BrowserWindow.getAllWindows()56 let win = windows[windows.length - 1]57 win.addTabbedWindow(tw)58}59function injectCSS(win) {60 css_file = path.join(__dirname, 'style.css')61 readFile(css_file, "utf-8", (err, data) => {62 win.webContents.insertCSS(data)63 })64}65function loadWindowBounds() {66 return settings.get('windowBounds')67}68exports.newTab = newTab;69exports.injectCSS = injectCSS;70exports.newWindow = newWindow;...
getWindowPosition.js
Source: getWindowPosition.js
1import { screen } from 'electron'2import config from './config'3import {4 WINDOW_WIDTH,5 INPUT_HEIGHT,6 RESULT_HEIGHT,7 MIN_VISIBLE_RESULTS,8} from '../main/constants/ui'9/**10 * Returns true if a window is at least partially visible on the display11 */12const isVisible = (windowBounds, displayBounds) =>13 !(windowBounds.x > displayBounds.x + displayBounds.width ||14 windowBounds.x + windowBounds.width < displayBounds.x ||15 windowBounds.y > displayBounds.y + displayBounds.height ||16 windowBounds.y + windowBounds.height < displayBounds.y)17/**18 * Computes window position19 */20export default ({ width, heightWithResults }) => {21 const winWidth = typeof width !== 'undefined' ? width : WINDOW_WIDTH22 const winHeight = typeof heightWithResults !== 'undefined'23 ? heightWithResults24 : MIN_VISIBLE_RESULTS * RESULT_HEIGHT + INPUT_HEIGHT25 const display = screen.getPrimaryDisplay()26 const positions = config.get('positions') || {}27 if (display.id in positions) {28 const [x, y] = positions[display.id]29 const windowBounds = { x, y, winWidth, winHeight }30 const isWindowVisible = disp => isVisible(windowBounds, disp.bounds)31 if (isWindowVisible(display)) {32 return [x, y]33 }34 // The window was moved from the primary screen to a different one.35 // We have to check that the window will be visible somewhere among the attached displays.36 const displays = screen.getAllDisplays()37 const isVisibleSomewhere = displays.some(isWindowVisible)38 if (isVisibleSomewhere) {39 return [x, y]40 }41 }42 const x = parseInt(display.bounds.x + (display.workAreaSize.width - winWidth) / 2, 10)43 const y = parseInt(display.bounds.y + (display.workAreaSize.height - winHeight) / 2, 10)44 return [x, y]...
main.js
Source: main.js
1const { app, BrowserWindow, Menu, ipcMain } = require('electron')2const path = require('path')3const fs = require('fs')4const { WRITE_NEW_FILE_NEEDED, NEW_FILE_WRITTEN, SAVE_NEEDED } = require('./actions/types')5const menu = require('./components/Menu')6let window = null7let devtools = null 8app.on('ready', function(){9 10 window = new BrowserWindow({ x: 0, y: 0, width:800, height:600, titleBarStyle: 'hidden' })11 window.setTitle('Texty')12 window.loadURL(path.join('file://', __dirname, 'static/index.html'))13 Menu.setApplicationMenu(menu(window))14 // devtools = new BrowserWindow()15 // window.webContents.setDevToolsWebContents(devtools.webContents)16 // window.webContents.openDevTools({mode: 'detach'})17 // window.webContents.once('did-finish-load', function () { 18 // let windowBounds = window.getBounds(); 19 // devtools.setPosition(windowBounds.x + windowBounds.width, windowBounds.y);20 // });21 ipcMain.on(WRITE_NEW_FILE_NEEDED, (event, {dir}) => {22 fs.writeFile(dir, `Start editing ${dir}`, function(err){23 if(err){24 return console.log('error is writing new file')25 }26 window.webContents.send(NEW_FILE_WRITTEN, `Start editing ${dir}`)27 });28 })29 // Set the devtools position when the parent window is moved.30 window.on('move', function () { 31 let windowBounds = window.getBounds();32 //devtools.setPosition(windowBounds.x + windowBounds.width, windowBounds.y);33 });34 35})36app.on('close', function() {37 window = null...
util.js
Source: util.js
1/*2 * Wire3 * Copyright (C) 2018 Wire Swiss GmbH4 *5 * This program is free software: you can redistribute it and/or modify6 * it under the terms of the GNU General Public License as published by7 * the Free Software Foundation, either version 3 of the License, or8 * (at your option) any later version.9 *10 * This program is distributed in the hope that it will be useful,11 * but WITHOUT ANY WARRANTY; without even the implied warranty of12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the13 * GNU General Public License for more details.14 *15 * You should have received a copy of the GNU General Public License16 * along with this program. If not, see http://www.gnu.org/licenses/.17 *18 */19const electron = require('electron');20const url = require('url');21const pointInRectangle = require('./lib/pointInRect');22module.exports = {23 capitalize: input => input.charAt(0).toUpperCase() + input.substr(1),24 isInView: win => {25 const windowBounds = win.getBounds();26 const nearestWorkArea = electron.screen.getDisplayMatching(windowBounds).workArea;27 const upperLeftVisible = pointInRectangle([windowBounds.x, windowBounds.y], nearestWorkArea);28 const lowerRightVisible = pointInRectangle(29 [windowBounds.x + windowBounds.width, windowBounds.y + windowBounds.height],30 nearestWorkArea31 );32 return upperLeftVisible || lowerRightVisible;33 },34 isMatchingHost: (_url, _baseUrl) => url.parse(_url).host === url.parse(_baseUrl).host,...
windowBound.js
Source: windowBound.js
1module.exports = class WindowBounds {2 constructor() {3 var windowBounds = global.app.settings.get("windowBounds")4 this.width = windowBounds.width5 this.height = windowBounds.height6 }7 set(width,height) {8 this.width = width9 this.height = height10 global.app.settings.get("windowBounds", { width:this.width,height:this.height})11 }...
Using AI Code Generation
1const { chromium, webkit, firefox } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const context = await browser.newContext();5 const page = await context.newPage();6 const windowBounds = await page.evaluate(() => {7 return window.playwright._impl._browserContext._browser._options.windowBounds;8 });9 console.log(windowBounds);10 await browser.close();11})();12const { chromium, webkit, firefox } = require('playwright');13(async () => {14 const browser = await chromium.launch({15 });16 const context = await browser.newContext();17 const page = await context.newPage();18 const windowBounds = await page.evaluate(() => {19 return window.playwright._impl._browserContext._browser._options.windowBounds;20 });21 console.log(windowBounds);22 await browser.close();23})();24const { chromium, webkit, firefox } = require('playwright');25(async () => {26 const browser = await chromium.launch({27 windowSize: {28 },29 });30 const context = await browser.newContext();31 const page = await context.newPage();32 const windowBounds = await page.evaluate(() => {33 return window.playwright._impl._browserContext._browser._options.windowBounds;34 });35 console.log(windowBounds);36 await browser.close();37})();38const { chromium, webkit, firefox } = require('playwright');39(async () => {40 const browser = await chromium.launch({41 windowSize: {42 },43 });44 const context = await browser.newContext({45 viewport: {46 },47 });48 const page = await context.newPage();
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 window = await page.evaluateHandle(() => window);7 const windowBounds = await window.evaluateHandle((window) => window.playwright._internal.windowBounds());8 console.log("windowBounds: ", windowBounds);9 await browser.close();10})();11windowBounds: JSHandle {12 _channel: ChannelOwner {13 },14}15windowBounds: JSHandle {16 _channel: ChannelOwner {17 },18}19windowBounds: JSHandle {20 _channel: ChannelOwner {21 },22}23windowBounds: JSHandle {24 _channel: ChannelOwner {25 },26}27windowBounds: JSHandle {28 _channel: ChannelOwner {29 },30}31windowBounds: JSHandle {32 _channel: ChannelOwner {
Using AI Code Generation
1const playwright = require('playwright');2(async () => {3 const browser = await playwright.chromium.launch({headless: false});4 const context = await browser.newContext();5 const page = await context.newPage();6 await page.waitForTimeout(5000);7 const window = await page.evaluateHandle(() => window);8 const windowBounds = await window.evaluateHandle((window) => window.playwright._api.windowBounds());9 console.log(await windowBounds.jsonValue());10 await browser.close();11})();12{13}
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const page = await browser.newPage();5 const bounds = await page.evaluate(() => windowBounds());6 console.log(bounds);7 await browser.close();8})();9module.exports = {10 use: {11 }12};13import { PlaywrightTestConfig } from '@playwright/test';14const config: PlaywrightTestConfig = {15 use: {16 }17};18export default config;19module.exports = {20 use: {21 }22};23export default {24 use: {25 }26};27import { PlaywrightTestConfig } from '@playwright/test';28const config: PlaywrightTestConfig = {29 {30 use: { browserName: 'chromium' }31 },32 {33 use: { browserName: 'firefox' }34 },35 {36 use: { browserName: 'webkit' }37 }38};39export default config;40import { PlaywrightTestConfig } from '@playwright/test';
Using AI Code Generation
1const playwright = require('playwright');2(async () => {3for (const browserType of ['chromium', 'firefox', 'webkit']) {4 const browser = await playwright[browserType].launch();5 const context = await browser.newContext();6 const page = await context.newPage();7 const windowBounds = await page.evaluate(() => window.windowBounds);8 console.log(windowBounds);9 await browser.close();10 }11})();12const playwright = require('playwright');13(async () => {14for (const browserType of ['chromium', 'firefox', 'webkit']) {15 const browser = await playwright[browserType].launch();16 const context = await browser.newContext();17 const page = await context.newPage();18 const windowBounds = await page.evaluate(() => window.windowBounds);19 console.log(windowBounds);20 await browser.close();21 }22})();23const playwright = require('playwright');24(async () => {25for (const browserType of ['chromium', 'firefox', 'webkit']) {26 const browser = await playwright[browserType].launch();27 const context = await browser.newContext();28 const page = await context.newPage();29 const windowBounds = await page.evaluate(() => window.windowBounds);30 console.log(windowBounds);31 await browser.close();32 }33})();
Using AI Code Generation
1const playwright = require('playwright');2(async () => {3 const browser = await playwright.chromium.launch({4 });5 const page = await browser.newPage();6 const { x, y, width, height } = await page._delegate._browserWindow.bounds();7 console.log(x, y, width, height);8 await browser.close();9})();
Using AI Code Generation
1const { webkit } = require('playwright');2const { windowBounds } = require('playwright/lib/server/chromium/crBrowser');3(async () => {4 const browser = await webkit.launch();5 const page = await browser.newPage();6 const { width, height } = await windowBounds(page);7 console.log(width, height);8 await browser.close();9})();10const { webkit } = require('playwright');11const { windowBounds } = require('playwright/lib/server/chromium/crBrowser');12(async () => {13 const browser = await webkit.launch();14 const page = await browser.newPage();15 const { width, height } = await windowBounds(page);16 console.log(width, height);17 await browser.close();18})();19const { webkit } = require('playwright');20const { windowBounds } = require('playwright/lib/server/chromium/crBrowser');21(async () => {22 const browser = await webkit.launch();23 const page = await browser.newPage();24 const { width, height } = await windowBounds(page);25 console.log(width, height);26 await browser.close();27})();28const { webkit } = require('playwright');29const { windowBounds } = require('playwright/lib/server/chromium/crBrowser');30(async () => {31 const browser = await webkit.launch();32 const page = await browser.newPage();33 const { width, height } = await windowBounds(page);34 console.log(width, height);35 await browser.close();36})();37const { webkit } = require('playwright');38const { windowBounds } = require('playwright/lib/server/chromium/crBrowser');39(async () => {40 const browser = await webkit.launch();41 const page = await browser.newPage();42 const { width, height }
Using AI Code Generation
1const { windowBounds } = require('playwright-core/lib/server/chromium/crBrowser');2const { chromium } = require('playwright-core');3const path = require('path');4(async () => {5 const browser = await chromium.launch({6 executablePath: path.join(__dirname, 'chrome-win/chrome.exe')7 });8 const page = await browser.newPage();9 const bounds = await windowBounds(page);10 console.log(bounds);11 await browser.close();12})();13{ x: 0, y: 0, width: 800, height: 600 }14await page.setViewportSize({ width: 800, height: 600 });15await page.setViewportSize({ width: 800, height: 600 });16await page.evaluate(() => {17 window.resizeTo(800, 600);18});19await page.setViewportSize({ width: 800, height: 600 });20await page.evaluate(() => {21 window.resizeTo(800, 600);22});23await page.evaluate(() => {24 window.moveTo(0, 0);25});26await page.setViewportSize({ width: 800, height: 600 });27await page.evaluate(() => {28 window.resizeTo(800, 600);29});30await page.evaluate(() => {31 window.moveTo(0, 0);32});33await page.evaluate(() => {34 window.resizeBy(0, 0);35});36await page.setViewportSize({ width: 800, height: 600 });37await page.evaluate(() => {38 window.resizeTo(800, 600);39});40await page.evaluate(() => {41 window.moveTo(0, 0);42});43await page.evaluate(() => {44 window.resizeBy(0, 0);45});46await page.evaluate(() => {47 window.moveBy(0, 0);48});49await page.setViewportSize({ width: 800, height: 600 });50await page.evaluate(() => {51 window.resizeTo(800, 600);52});53await page.evaluate(() => {54 window.moveTo(0, 0);55});56await page.evaluate(()
Using AI Code Generation
1const { windowBounds } = require('playwright-core/lib/server/supplements/recorder/recorderSupplement');2const { chromium } = require('playwright-core');3const fs = require('fs');4(async () => {5 const browser = await chromium.launch();6 const context = await browser.newContext();7 const page = await context.newPage();8 await page.setViewportSize({ width: 1366, height: 768 });9 const element = await page.$('input[name="q"]');10 await element.click({ position: { x: 0, y: 0 } });11 await page.keyboard.type('Hello World!');12 const element2 = await page.$('input[name="btnK"]');13 await element2.click({ position: { x: 0, y: 0 } });14 await page.waitForTimeout(1000);15 await page.screenshot({ path: 'screenshot.png' });16 await browser.close();17})();18const { windowBounds } = require('playwright-core/lib/server/supplements/recorder/recorderSupplement');19const fs = require('fs');20const path = require('path');21const testCode = fs.readFileSync(path.join(__dirname, 'test.js'), 'utf-8');22const {23} = await windowBounds();24const testCodeWithBrowserContext = testCode.replace(25 'const browser = await chromium.launch();',26 `const browser = await chromium.launch({27 \`--window-size=${viewportSize.width},${viewportSize.height}\`,28 \`--user-agent=${userAgent}\`,29 });`,30);31fs.writeFileSync(path.join(__dirname, 'test.js'), testCodeWithBrowserContext);32const { windowBounds } = require('playwright-core/lib/server/supplements/recorder/recorderSupplement');33const fs = require('fs');34const path = require('path');35const testCode = fs.readFileSync(path.join(__dirname, 'test.js'), 'utf-8');36const {
Using AI Code Generation
1const { windowBounds } = require('playwright/lib/server/chromium/crBrowser');2const { chromium } = require('playwright');3const { assert } = require('chai');4(async () => {5 const browser = await chromium.launch({headless: false});6 const context = await browser.newContext();7 const page = await context.newPage();8 const bounds = await windowBounds(page);9 assert(bounds.x === 0 && bounds.y === 0 && bounds.width > 0 && bounds.height > 0);10 await page.close();11 await browser.close();12})();
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!!