Best JavaScript code snippet using playwright-internal
frames.js
Source:frames.js
...799 async dragAndDrop(metadata, source, target, options = {}) {800 const controller = new _progress.ProgressController(metadata, this);801 await controller.run(async progress => {802 await dom.assertDone(await this._retryWithProgressIfNotConnected(progress, source, options.strict, async handle => {803 return handle._retryPointerAction(progress, 'move and down', false, async point => {804 await this._page.mouse.move(point.x, point.y);805 await this._page.mouse.down();806 }, { ...options,807 position: options.sourcePosition,808 timeout: progress.timeUntilDeadline()809 });810 }));811 await dom.assertDone(await this._retryWithProgressIfNotConnected(progress, target, options.strict, async handle => {812 return handle._retryPointerAction(progress, 'move and up', false, async point => {813 await this._page.mouse.move(point.x, point.y);814 await this._page.mouse.up();815 }, { ...options,816 position: options.targetPosition,817 timeout: progress.timeUntilDeadline()818 });819 }));820 }, this._page._timeoutSettings.timeout(options));821 }822 async tap(metadata, selector, options) {823 const controller = new _progress.ProgressController(metadata, this);824 return controller.run(async progress => {825 return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, handle => handle._tap(progress, options)));826 }, this._page._timeoutSettings.timeout(options));...
dom.js
Source:dom.js
...456 x: box.x + border.left + offset.x,457 y: box.y + border.top + offset.y458 }459 }460 async _retryPointerAction(461 progress,462 actionName,463 waitForEnabled,464 action,465 options466 ) {467 let retry = 0 // We progressively wait longer between retries, up to 500ms.468 const waitTime = [0, 20, 100, 100, 500] // By default, we scroll with protocol method to reveal the action point.469 // However, that might not work to scroll from under position:sticky elements470 // that overlay the target element. To fight this, we cycle through different471 // scroll alignments. This works in most scenarios.472 const scrollOptions = [473 undefined,474 {475 block: 'end',476 inline: 'end'477 },478 {479 block: 'center',480 inline: 'center'481 },482 {483 block: 'start',484 inline: 'start'485 }486 ]487 while (progress.isRunning()) {488 if (retry) {489 progress.log(490 `retrying ${actionName} action${491 options.trial ? ' (trial run)' : ''492 }, attempt #${retry}`493 )494 const timeout = waitTime[Math.min(retry - 1, waitTime.length - 1)]495 if (timeout) {496 progress.log(` waiting ${timeout}ms`)497 const result = await this.evaluateInUtility(498 ([injected, node, timeout]) =>499 new Promise((f) => setTimeout(f, timeout)),500 timeout501 )502 if (result === 'error:notconnected') return result503 }504 } else {505 progress.log(506 `attempting ${actionName} action${507 options.trial ? ' (trial run)' : ''508 }`509 )510 }511 const forceScrollOptions = scrollOptions[retry % scrollOptions.length]512 const result = await this._performPointerAction(513 progress,514 actionName,515 waitForEnabled,516 action,517 forceScrollOptions,518 options519 )520 ++retry521 if (result === 'error:notvisible') {522 if (options.force) throw new Error('Element is not visible')523 progress.log(' element is not visible')524 continue525 }526 if (result === 'error:notinviewport') {527 if (options.force) throw new Error('Element is outside of the viewport')528 progress.log(' element is outside of the viewport')529 continue530 }531 if (typeof result === 'object' && 'hitTargetDescription' in result) {532 if (options.force)533 throw new Error(534 `Element does not receive pointer events, ${result.hitTargetDescription} intercepts them`535 )536 progress.log(537 ` ${result.hitTargetDescription} intercepts pointer events`538 )539 continue540 }541 return result542 }543 return 'done'544 }545 async _performPointerAction(546 progress,547 actionName,548 waitForEnabled,549 action,550 forceScrollOptions,551 options552 ) {553 const { force = false, position } = options554 if (options.__testHookBeforeStable) await options.__testHookBeforeStable()555 const result = await this._waitForDisplayedAtStablePosition(556 progress,557 force,558 waitForEnabled559 )560 if (result !== 'done') return result561 if (options.__testHookAfterStable) await options.__testHookAfterStable()562 progress.log(' scrolling into view if needed')563 progress.throwIfAborted() // Avoid action that has side-effects.564 if (forceScrollOptions) {565 const scrolled = await this.evaluateInUtility(566 ([injected, node, options]) => {567 if (568 node.nodeType === 1569 /* Node.ELEMENT_NODE */570 )571 node.scrollIntoView(options)572 },573 forceScrollOptions574 )575 if (scrolled === 'error:notconnected') return scrolled576 } else {577 const scrolled = await this._scrollRectIntoViewIfNeeded(578 position579 ? {580 x: position.x,581 y: position.y,582 width: 0,583 height: 0584 }585 : undefined586 )587 if (scrolled !== 'done') return scrolled588 }589 progress.log(' done scrolling')590 const maybePoint = position591 ? await this._offsetPoint(position)592 : await this._clickablePoint()593 if (typeof maybePoint === 'string') return maybePoint594 const point = roundPoint(maybePoint)595 if (!force) {596 if (options.__testHookBeforeHitTarget)597 await options.__testHookBeforeHitTarget()598 progress.log(599 ` checking that element receives pointer events at (${point.x},${point.y})`600 )601 const hitTargetResult = await this._checkHitTargetAt(point)602 if (hitTargetResult !== 'done') return hitTargetResult603 progress.log(` element does receive pointer events`)604 }605 progress.metadata.point = point606 if (options.trial) {607 progress.log(` trial ${actionName} has finished`)608 return 'done'609 }610 await progress.beforeInputAction(this)611 await this._page._frameManager.waitForSignalsCreatedBy(612 progress,613 options.noWaitAfter,614 async () => {615 if (options.__testHookBeforePointerAction)616 await options.__testHookBeforePointerAction()617 progress.throwIfAborted() // Avoid action that has side-effects.618 let restoreModifiers619 if (options && options.modifiers)620 restoreModifiers = await this._page.keyboard._ensureModifiers(621 options.modifiers622 )623 progress.log(` performing ${actionName} action`)624 await action(point)625 progress.log(` ${actionName} action done`)626 progress.log(' waiting for scheduled navigations to finish')627 if (options.__testHookAfterPointerAction)628 await options.__testHookAfterPointerAction()629 if (restoreModifiers)630 await this._page.keyboard._ensureModifiers(restoreModifiers)631 },632 'input'633 )634 progress.log(' navigations have finished')635 return 'done'636 }637 async hover(metadata, options) {638 const controller = new _progress.ProgressController(metadata, this)639 return controller.run(async (progress) => {640 const result = await this._hover(progress, options)641 return assertDone(throwRetargetableDOMError(result))642 }, this._page._timeoutSettings.timeout(options))643 }644 _hover(progress, options) {645 return this._retryPointerAction(646 progress,647 'hover',648 false,649 /* waitForEnabled */650 (point) => this._page.mouse.move(point.x, point.y),651 options652 )653 }654 async click(metadata, options = {}) {655 const controller = new _progress.ProgressController(metadata, this)656 return controller.run(async (progress) => {657 const result = await this._click(progress, options)658 return assertDone(throwRetargetableDOMError(result))659 }, this._page._timeoutSettings.timeout(options))660 }661 _click(progress, options) {662 return this._retryPointerAction(663 progress,664 'click',665 true,666 /* waitForEnabled */667 (point) => this._page.mouse.click(point.x, point.y, options),668 options669 )670 }671 async dblclick(metadata, options) {672 const controller = new _progress.ProgressController(metadata, this)673 return controller.run(async (progress) => {674 const result = await this._dblclick(progress, options)675 return assertDone(throwRetargetableDOMError(result))676 }, this._page._timeoutSettings.timeout(options))677 }678 _dblclick(progress, options) {679 return this._retryPointerAction(680 progress,681 'dblclick',682 true,683 /* waitForEnabled */684 (point) => this._page.mouse.dblclick(point.x, point.y, options),685 options686 )687 }688 async tap(metadata, options = {}) {689 const controller = new _progress.ProgressController(metadata, this)690 return controller.run(async (progress) => {691 const result = await this._tap(progress, options)692 return assertDone(throwRetargetableDOMError(result))693 }, this._page._timeoutSettings.timeout(options))694 }695 _tap(progress, options) {696 return this._retryPointerAction(697 progress,698 'tap',699 true,700 /* waitForEnabled */701 (point) => this._page.touchscreen.tap(point.x, point.y),702 options703 )704 }705 async selectOption(metadata, elements, values, options) {706 const controller = new _progress.ProgressController(metadata, this)707 return controller.run(async (progress) => {708 const result = await this._selectOption(709 progress,710 elements,...
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 await page.type('input[aria-label="Search"]', 'Playwright');7 await page.keyboard.press('Enter');8 await page.waitForSelector('text=Playwright - Google Search');9 await page.click('text=Playwright - Google Search');10 await page.waitForNavigation();11 await page.waitForSelector('#searchform');12 await page.click('#searchform');13 await page.waitForSelector('text=Playwright | Test automation for modern web apps');14 await page.click('text=Playwright | Test automation for modern web apps');15 await page.waitForNavigation();16 await page.waitForSelector('text=Playwright is a Node library to automate Chromium, Firefox and WebKit with a single API.');17 await page.click('text=Playwright is a Node library to automate Chromium, Firefox and WebKit with a single API.');18 await page.waitForNavigation();19 await page.waitForSelector('text=Playwright is a Node library to automate Chromium, Firefox and WebKit with a single API.');20 await page.click('text=Playwright is a Node library to automate Chromium, Firefox and WebKit with a single API.');21 await page.waitForNavigation();22 await page.waitForSelector('text=Playwright is a Node library to automate Chromium, Firefox and WebKit with a single API.');23 await page.click('text=Playwright is a Node library to automate Chromium, Firefox and WebKit with a single API.');24 await page.waitForNavigation();25 await page.waitForSelector('text=Playwright is a Node library to automate Chromium, Firefox and WebKit with a single API.');26 await page.click('text=Playwright is a Node library to automate Chromium, Firefox and WebKit with a single API.');27 await page.waitForNavigation();28 await page.waitForSelector('text=Playwright is a Node library to automate Chromium, Firefox and WebKit with a single API.');29 await page.click('text=Playwright is a Node library to automate Chromium, Firefox and WebKit with a single API.');30 await page.waitForNavigation();31 await page.waitForSelector('text=Playwright is a Node library to automate Chromium, Firefox and WebKit with a single API.');
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 await page.waitForSelector('input[name="q"]');7 await page.click('input[name="q"]', { delay: 1000 });8 await page.type('input[name="q"]', 'Hello World', { delay: 1000 });9 await browser.close();10})();
Using AI Code Generation
1const { _retryPointerAction } = require('playwright/lib/server/chromium/crInput');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 await _retryPointerAction(page, async () => {8 await page.click('text=Get Started');9 });10 await _retryPointerAction(page, async () => {11 await page.click('text=Docs');12 });13 await browser.close();14})();
Using AI Code Generation
1const { _retryPointerAction } = require('@playwright/test/lib/server/chromium/crInput');2const { chromium } = require('playwright');3(async () => {4 const browser = await chromium.launch();5 const context = await browser.newContext();6 const page = await context.newPage();
Using AI Code Generation
1const { _retryPointerAction } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');2const { _retryPointerAction } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');3const { _retryPointerAction } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');4const { _retryPointerAction } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');5const { _retryPointerAction } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');6const { _retryPointerAction } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');7const { _retryPointerAction } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');8const { _retryPointerAction } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');9const { _retryPointerAction } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');10const { _retryPointerAction } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');11const { _retryPointerAction } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');12const { _retryPointerAction } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');13const { _retryPointerAction } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');14const { _retryPointerAction } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');15const { _retryPointerAction } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');16const { _retryPointerAction } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');17const { _retryPointerAction } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');18const { _retryPointerAction } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');19const { _retryPointerAction } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');20const { _retryPointerAction } = require('playwright/lib/server/supplements/recorder/recorderSup
Using AI Code Generation
1const { _retryPointerAction } = require('playwright/lib/server/chromium/crInput');2const { Page } = require('playwright/lib/server/page');3const { PointerAction } = require('playwright/lib/server/input');4const { PointerActionSequence } = require('playwright/lib/server/input');5const { PointerActionItem } = require('playwright/lib/server/input');6const { MouseButton } = require('playwright/lib/server/input');7const { PointerType } = require('playwright/lib/server/input');8const { KeyboardModifier } = require('playwright/lib/server/input');9const { Modifiers } = require('playwright/lib/server/input');10const page = await browser.newPage();11const element = await page.$('#element');12const x = 100;13const y = 100;14const modifiers = 0;15const button = 'left';16const clickCount = 1;17const type = 'mouseMoved';18const delay = 0;19const pointerAction = new PointerAction(page, type, button, clickCount, modifiers, x, y, delay);20const pointerActionSequence = new PointerActionSequence();21pointerActionSequence.addAction(pointerAction);22await _retryPointerAction(page, pointerActionSequence);23const page = await browser.newPage();24const element = await page.$('#element');25const x = 100;26const y = 100;27const modifiers = 0;28const button = 'left';29const clickCount = 1;30const type = 'mousePressed';31const delay = 0;32const pointerAction = new PointerAction(page, type, button, clickCount, modifiers, x, y, delay);33const pointerActionSequence = new PointerActionSequence();34pointerActionSequence.addAction(pointerAction);35await _retryPointerAction(page, pointerActionSequence);36const page = await browser.newPage();37const element = await page.$('#element');38const x = 100;39const y = 100;40const modifiers = 0;41const button = 'left';42const clickCount = 1;43const type = 'mouseReleased';44const delay = 0;45const pointerAction = new PointerAction(page, type, button, clickCount, modifiers, x, y, delay);
Using AI Code Generation
1const { _retryPointerAction } = require('@playwright/test/lib/server/frames');2const { getTestState } = require('@playwright/test/lib/state');3const test = getTestState().test;4const pointerAction = async (page, action, options) => {5 await _retryPointerAction(page, action, options);6};7test('test', async ({ page }) => {8 await pointerAction(page, 'move', { x: 100, y: 100 });9 await pointerAction(page, 'down');10 await pointerAction(page, 'up');11 await pointerAction(page, 'click');12});
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!!