Best JavaScript code snippet using playwright-internal
browserContext.js
Source: browserContext.js
...372 options.recordVideo.size.height &= ~1;373 }374 if (options.proxy) {375 if (!browserOptions.proxy && browserOptions.isChromium && os.platform() === 'win32') throw new Error(`Browser needs to be launched with the global proxy. If all contexts override the proxy, global proxy will be never used and can be any string, for example "launch({ proxy: { server: 'http://per-context' } })"`);376 options.proxy = normalizeProxySettings(options.proxy);377 }378 if ((0, _utils.debugMode)() === 'inspector') options.bypassCSP = true;379 verifyGeolocation(options.geolocation);380}381function verifyGeolocation(geolocation) {382 if (!geolocation) return;383 geolocation.accuracy = geolocation.accuracy || 0;384 const {385 longitude,386 latitude,387 accuracy388 } = geolocation;389 if (longitude < -180 || longitude > 180) throw new Error(`geolocation.longitude: precondition -180 <= LONGITUDE <= 180 failed.`);390 if (latitude < -90 || latitude > 90) throw new Error(`geolocation.latitude: precondition -90 <= LATITUDE <= 90 failed.`);391 if (accuracy < 0) throw new Error(`geolocation.accuracy: precondition 0 <= ACCURACY failed.`);392}393function normalizeProxySettings(proxy) {394 let {395 server,396 bypass397 } = proxy;398 let url;399 try {400 // new URL('127.0.0.1:8080') throws401 // new URL('localhost:8080') fails to parse host or protocol402 // In both of these cases, we need to try re-parse URL with `http://` prefix.403 url = new URL(server);404 if (!url.host || !url.protocol) url = new URL('http://' + server);405 } catch (e) {406 url = new URL('http://' + server);407 }...
browserType.js
Source: browserType.js
1"use strict";2Object.defineProperty(exports, "__esModule", {3 value: true4});5exports.BrowserType = void 0;6var _fs = _interopRequireDefault(require("fs"));7var os = _interopRequireWildcard(require("os"));8var _path = _interopRequireDefault(require("path"));9var _browserContext = require("./browserContext");10var _registry = require("../utils/registry");11var _transport = require("./transport");12var _processLauncher = require("../utils/processLauncher");13var _pipeTransport = require("./pipeTransport");14var _progress = require("./progress");15var _timeoutSettings = require("../utils/timeoutSettings");16var _utils = require("../utils/utils");17var _helper = require("./helper");18var _debugLogger = require("../utils/debugLogger");19var _instrumentation = require("./instrumentation");20function _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); }21function _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; }22function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }23/**24 * Copyright (c) Microsoft Corporation.25 *26 * Licensed under the Apache License, Version 2.0 (the "License");27 * you may not use this file except in compliance with the License.28 * You may obtain a copy of the License at29 *30 * http://www.apache.org/licenses/LICENSE-2.031 *32 * Unless required by applicable law or agreed to in writing, software33 * distributed under the License is distributed on an "AS IS" BASIS,34 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.35 * See the License for the specific language governing permissions and36 * limitations under the License.37 */38class BrowserType extends _instrumentation.SdkObject {39 constructor(browserName, playwrightOptions) {40 super(playwrightOptions.rootSdkObject, 'browser-type');41 this._name = void 0;42 this._playwrightOptions = void 0;43 this.attribution.browserType = this;44 this._playwrightOptions = playwrightOptions;45 this._name = browserName;46 }47 executablePath() {48 return _registry.registry.findExecutable(this._name).executablePath(this._playwrightOptions.sdkLanguage) || '';49 }50 name() {51 return this._name;52 }53 async launch(metadata, options, protocolLogger) {54 options = this._validateLaunchOptions(options);55 const controller = new _progress.ProgressController(metadata, this);56 controller.setLogName('browser');57 const browser = await controller.run(progress => {58 const seleniumHubUrl = options.__testHookSeleniumRemoteURL || process.env.SELENIUM_REMOTE_URL;59 if (seleniumHubUrl) return this._launchWithSeleniumHub(progress, seleniumHubUrl, options);60 return this._innerLaunchWithRetries(progress, options, undefined, _helper.helper.debugProtocolLogger(protocolLogger)).catch(e => {61 throw this._rewriteStartupError(e);62 });63 }, _timeoutSettings.TimeoutSettings.timeout(options));64 return browser;65 }66 async launchPersistentContext(metadata, userDataDir, options) {67 options = this._validateLaunchOptions(options);68 const controller = new _progress.ProgressController(metadata, this);69 const persistent = options;70 controller.setLogName('browser');71 const browser = await controller.run(progress => {72 return this._innerLaunchWithRetries(progress, options, persistent, _helper.helper.debugProtocolLogger(), userDataDir).catch(e => {73 throw this._rewriteStartupError(e);74 });75 }, _timeoutSettings.TimeoutSettings.timeout(options));76 return browser._defaultContext;77 }78 async _innerLaunchWithRetries(progress, options, persistent, protocolLogger, userDataDir) {79 try {80 return this._innerLaunch(progress, options, persistent, protocolLogger, userDataDir);81 } catch (error) {82 // @see https://github.com/microsoft/playwright/issues/521483 const errorMessage = typeof error === 'object' && typeof error.message === 'string' ? error.message : '';84 if (errorMessage.includes('Inconsistency detected by ld.so')) {85 progress.log(`<restarting browser due to hitting race condition in glibc>`);86 return this._innerLaunch(progress, options, persistent, protocolLogger, userDataDir);87 }88 throw error;89 }90 }91 async _innerLaunch(progress, options, persistent, protocolLogger, userDataDir) {92 options.proxy = options.proxy ? (0, _browserContext.normalizeProxySettings)(options.proxy) : undefined;93 const browserLogsCollector = new _debugLogger.RecentLogsCollector();94 const {95 browserProcess,96 artifactsDir,97 transport98 } = await this._launchProcess(progress, options, !!persistent, browserLogsCollector, userDataDir);99 if (options.__testHookBeforeCreateBrowser) await options.__testHookBeforeCreateBrowser();100 const browserOptions = { ...this._playwrightOptions,101 name: this._name,102 isChromium: this._name === 'chromium',103 channel: options.channel,104 slowMo: options.slowMo,105 persistent,106 headful: !options.headless,107 artifactsDir,108 downloadsPath: options.downloadsPath || artifactsDir,109 tracesDir: options.tracesDir || artifactsDir,110 browserProcess,111 customExecutablePath: options.executablePath,112 proxy: options.proxy,113 protocolLogger,114 browserLogsCollector,115 wsEndpoint: options.useWebSocket ? transport.wsEndpoint : undefined116 };117 if (persistent) (0, _browserContext.validateBrowserContextOptions)(persistent, browserOptions);118 copyTestHooks(options, browserOptions);119 const browser = await this._connectToTransport(transport, browserOptions); // We assume no control when using custom arguments, and do not prepare the default context in that case.120 if (persistent && !options.ignoreAllDefaultArgs) await browser._defaultContext._loadDefaultContext(progress);121 return browser;122 }123 async _launchProcess(progress, options, isPersistent, browserLogsCollector, userDataDir) {124 var _options$args;125 const {126 ignoreDefaultArgs,127 ignoreAllDefaultArgs,128 args = [],129 executablePath = null,130 handleSIGINT = true,131 handleSIGTERM = true,132 handleSIGHUP = true133 } = options;134 const env = options.env ? (0, _processLauncher.envArrayToObject)(options.env) : process.env;135 const tempDirectories = [];136 if (options.downloadsPath) await _fs.default.promises.mkdir(options.downloadsPath, {137 recursive: true138 });139 if (options.tracesDir) await _fs.default.promises.mkdir(options.tracesDir, {140 recursive: true141 });142 const artifactsDir = await _fs.default.promises.mkdtemp(_path.default.join(os.tmpdir(), 'playwright-artifacts-'));143 tempDirectories.push(artifactsDir);144 if (userDataDir) {145 // Firefox bails if the profile directory does not exist, Chrome creates it. We ensure consistent behavior here.146 if (!(await (0, _utils.existsAsync)(userDataDir))) await _fs.default.promises.mkdir(userDataDir, {147 recursive: true,148 mode: 0o700149 });150 } else {151 userDataDir = await _fs.default.promises.mkdtemp(_path.default.join(os.tmpdir(), `playwright_${this._name}dev_profile-`));152 tempDirectories.push(userDataDir);153 }154 const browserArguments = [];155 if (ignoreAllDefaultArgs) browserArguments.push(...args);else if (ignoreDefaultArgs) browserArguments.push(...this._defaultArgs(options, isPersistent, userDataDir).filter(arg => ignoreDefaultArgs.indexOf(arg) === -1));else browserArguments.push(...this._defaultArgs(options, isPersistent, userDataDir));156 let executable;157 if (executablePath) {158 if (!(await (0, _utils.existsAsync)(executablePath))) throw new Error(`Failed to launch ${this._name} because executable doesn't exist at ${executablePath}`);159 executable = executablePath;160 } else {161 const registryExecutable = _registry.registry.findExecutable(options.channel || this._name);162 if (!registryExecutable || registryExecutable.browserName !== this._name) throw new Error(`Unsupported ${this._name} channel "${options.channel}"`);163 executable = registryExecutable.executablePathOrDie(this._playwrightOptions.sdkLanguage);164 await registryExecutable.validateHostRequirements(this._playwrightOptions.sdkLanguage);165 }166 let wsEndpointCallback;167 const shouldWaitForWSListening = options.useWebSocket || ((_options$args = options.args) === null || _options$args === void 0 ? void 0 : _options$args.some(a => a.startsWith('--remote-debugging-port')));168 const waitForWSEndpoint = shouldWaitForWSListening ? new Promise(f => wsEndpointCallback = f) : undefined; // Note: it is important to define these variables before launchProcess, so that we don't get169 // "Cannot access 'browserServer' before initialization" if something went wrong.170 let transport = undefined;171 let browserProcess = undefined;172 const {173 launchedProcess,174 gracefullyClose,175 kill176 } = await (0, _processLauncher.launchProcess)({177 command: executable,178 args: browserArguments,179 env: this._amendEnvironment(env, userDataDir, executable, browserArguments),180 handleSIGINT,181 handleSIGTERM,182 handleSIGHUP,183 log: message => {184 if (wsEndpointCallback) {185 const match = message.match(/DevTools listening on (.*)/);186 if (match) wsEndpointCallback(match[1]);187 }188 progress.log(message);189 browserLogsCollector.log(message);190 },191 stdio: 'pipe',192 tempDirectories,193 attemptToGracefullyClose: async () => {194 if (options.__testHookGracefullyClose) await options.__testHookGracefullyClose(); // We try to gracefully close to prevent crash reporting and core dumps.195 // Note that it's fine to reuse the pipe transport, since196 // our connection ignores kBrowserCloseMessageId.197 this._attemptToGracefullyCloseBrowser(transport);198 },199 onExit: (exitCode, signal) => {200 if (browserProcess && browserProcess.onclose) browserProcess.onclose(exitCode, signal);201 }202 });203 async function closeOrKill(timeout) {204 let timer;205 try {206 await Promise.race([gracefullyClose(), new Promise((resolve, reject) => timer = setTimeout(reject, timeout))]);207 } catch (ignored) {208 await kill().catch(ignored => {}); // Make sure to await actual process exit.209 } finally {210 clearTimeout(timer);211 }212 }213 browserProcess = {214 onclose: undefined,215 process: launchedProcess,216 close: () => closeOrKill(options.__testHookBrowserCloseTimeout || _timeoutSettings.DEFAULT_TIMEOUT),217 kill218 };219 progress.cleanupWhenAborted(() => closeOrKill(progress.timeUntilDeadline()));220 let wsEndpoint;221 if (shouldWaitForWSListening) wsEndpoint = await waitForWSEndpoint;222 if (options.useWebSocket) {223 transport = await _transport.WebSocketTransport.connect(progress, wsEndpoint);224 } else {225 const stdio = launchedProcess.stdio;226 transport = new _pipeTransport.PipeTransport(stdio[3], stdio[4]);227 }228 return {229 browserProcess,230 artifactsDir,231 transport232 };233 }234 async connectOverCDP(metadata, endpointURL, options, timeout) {235 throw new Error('CDP connections are only supported by Chromium');236 }237 async _launchWithSeleniumHub(progress, hubUrl, options) {238 throw new Error('Connecting to SELENIUM_REMOTE_URL is only supported by Chromium');239 }240 _validateLaunchOptions(options) {241 const {242 devtools = false243 } = options;244 let {245 headless = !devtools,246 downloadsPath,247 proxy248 } = options;249 if ((0, _utils.debugMode)()) headless = false;250 if (downloadsPath && !_path.default.isAbsolute(downloadsPath)) downloadsPath = _path.default.join(process.cwd(), downloadsPath);251 if (this._playwrightOptions.socksProxyPort) proxy = {252 server: `socks5://127.0.0.1:${this._playwrightOptions.socksProxyPort}`253 };254 return { ...options,255 devtools,256 headless,257 downloadsPath,258 proxy259 };260 }261}262exports.BrowserType = BrowserType;263function copyTestHooks(from, to) {264 for (const [key, value] of Object.entries(from)) {265 if (key.startsWith('__testHook')) to[key] = value;266 }...
Using AI Code Generation
1const { normalizeProxySettings } = require('playwright-core/lib/server/proxy');2const { parseProxySettings } = require('playwright-core/lib/utils/utils');3console.log(normalizeProxySettings(proxySettings));4const { normalizeProxySettings } = require('playwright-core/lib/server/proxy');5const { parseProxySettings } = require('playwright-core/lib/utils/utils');6console.log(normalizeProxySettings(proxySettings));7const { normalizeProxySettings } = require('playwright-core/lib/server/proxy');8const { parseProxySettings } = require('playwright-core/lib/utils/utils');9console.log(normalizeProxySettings(proxySettings));10const { normalizeProxySettings } = require('playwright-core/lib/server/proxy');11const { parseProxySettings } = require('playwright-core/lib/utils/utils');12console.log(normalizeProxySettings(proxySettings));13const { normalizeProxySettings } = require('playwright-core/lib/server/proxy');14const { parseProxySettings } = require('playwright-core/lib/utils/utils');15console.log(normalizeProxySettings(proxySettings));16const { normalizeProxySettings } = require('playwright-core/lib/server/proxy');17const { parseProxySettings } = require('playwright-core/lib/utils/utils');18console.log(normalizeProxySettings(proxySettings));19const { normalizeProxySettings } = require('playwright-core/lib/server/proxy');20const { parseProxySettings } = require('playwright-core/lib/utils/utils');21console.log(normalizeProxySettings(proxySettings));
Using AI Code Generation
1const { normalizeProxySettings } = require('playwright/lib/utils/utils.js');2const { normalizeProxySettings } = require('playwright/lib/utils/utils.js');3const { normalizeProxySettings } = require('playwright/lib/utils/utils.js');4const { normalizeProxySettings } = require('playwright/lib/utils/utils.js');5const { normalizeProxySettings } = require('playwright/lib/utils/utils.js');6const { normalizeProxySettings } = require('playwright/lib/utils/utils.js');7const { normalizeProxySettings } = require('playwright/lib/utils/utils.js');8const { normalizeProxySettings } = require('playwright/lib/utils/utils.js');9const { normalizeProxySettings } = require('playwright/lib/utils/utils.js');10const { normalizeProxySettings } = require('playwright/lib/utils/utils.js');
Using AI Code Generation
1const internal = require('playwright/lib/server/supplements/utils/internal');2const settings = {3};4const normalizedSettings = internal.normalizeProxySettings(settings);5console.log(normalizedSettings);6const internal = require('playwright/lib/server/supplements/utils/internal');7const settings = {8};9const normalizedSettings = internal.normalizeProxySettings(settings);10console.log(normalizedSettings);11const internal = require('playwright/lib/server/supplements/utils/internal');12const settings = {13};14const normalizedSettings = internal.normalizeProxySettings(settings);15console.log(normalizedSettings);16In the above code, we have imported the internal module of Playwright and called the normalizeProxySettings method on
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!!