Best JavaScript code snippet using playwright-internal
Protocol.js
Source:Protocol.js  
1/* This Source Code Form is subject to the terms of the Mozilla Public2 * License, v. 2.0. If a copy of the MPL was not distributed with this3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */4const {t, checkScheme} = ChromeUtils.import('chrome://juggler/content/protocol/PrimitiveTypes.js');5// Protocol-specific types.6const browserTypes = {};7browserTypes.TargetInfo = {8  type: t.Enum(['page']),9  targetId: t.String,10  browserContextId: t.Optional(t.String),11  // PageId of parent tab, if any.12  openerId: t.Optional(t.String),13};14browserTypes.CookieOptions = {15  name: t.String,16  value: t.String,17  url: t.Optional(t.String),18  domain: t.Optional(t.String),19  path: t.Optional(t.String),20  secure: t.Optional(t.Boolean),21  httpOnly: t.Optional(t.Boolean),22  sameSite: t.Optional(t.Enum(['Strict', 'Lax', 'None'])),23  expires: t.Optional(t.Number),24};25browserTypes.Cookie = {26  name: t.String,27  domain: t.String,28  path: t.String,29  value: t.String,30  expires: t.Number,31  size: t.Number,32  httpOnly: t.Boolean,33  secure: t.Boolean,34  session: t.Boolean,35  sameSite: t.Enum(['Strict', 'Lax', 'None']),36};37browserTypes.Geolocation = {38  latitude: t.Number,39  longitude: t.Number,40  accuracy: t.Optional(t.Number),41};42browserTypes.DownloadOptions = {43  behavior: t.Optional(t.Enum(['saveToDisk', 'cancel'])),44  downloadsDir: t.Optional(t.String),45};46const pageTypes = {};47pageTypes.DOMPoint = {48  x: t.Number,49  y: t.Number,50};51pageTypes.Rect = {52  x: t.Number,53  y: t.Number,54  width: t.Number,55  height: t.Number,56};57pageTypes.Size = {58  width: t.Number,59  height: t.Number,60};61pageTypes.Viewport = {62  viewportSize: pageTypes.Size,63  deviceScaleFactor: t.Optional(t.Number),64};65pageTypes.DOMQuad = {66  p1: pageTypes.DOMPoint,67  p2: pageTypes.DOMPoint,68  p3: pageTypes.DOMPoint,69  p4: pageTypes.DOMPoint,70};71pageTypes.TouchPoint = {72  x: t.Number,73  y: t.Number,74  radiusX: t.Optional(t.Number),75  radiusY: t.Optional(t.Number),76  rotationAngle: t.Optional(t.Number),77  force: t.Optional(t.Number),78};79pageTypes.Clip = {80  x: t.Number,81  y: t.Number,82  width: t.Number,83  height: t.Number,84};85const runtimeTypes = {};86runtimeTypes.RemoteObject = {87  type: t.Optional(t.Enum(['object', 'function', 'undefined', 'string', 'number', 'boolean', 'symbol', 'bigint'])),88  subtype: t.Optional(t.Enum(['array', 'null', 'node', 'regexp', 'date', 'map', 'set', 'weakmap', 'weakset', 'error', 'proxy', 'promise', 'typedarray'])),89  objectId: t.Optional(t.String),90  unserializableValue: t.Optional(t.Enum(['Infinity', '-Infinity', '-0', 'NaN'])),91  value: t.Any92};93runtimeTypes.ObjectProperty = {94  name: t.String,95  value: runtimeTypes.RemoteObject,96};97runtimeTypes.ScriptLocation = {98  columnNumber: t.Number,99  lineNumber: t.Number,100  url: t.String,101};102runtimeTypes.ExceptionDetails = {103  text: t.Optional(t.String),104  stack: t.Optional(t.String),105  value: t.Optional(t.Any),106};107runtimeTypes.CallFunctionArgument = {108  objectId: t.Optional(t.String),109  unserializableValue: t.Optional(t.Enum(['Infinity', '-Infinity', '-0', 'NaN'])),110  value: t.Any,111};112runtimeTypes.AuxData = {113  frameId: t.Optional(t.String),114  name: t.Optional(t.String),115};116const axTypes = {};117axTypes.AXTree = {118  role: t.String,119  name: t.String,120  children: t.Optional(t.Array(t.Recursive(axTypes, 'AXTree'))),121  selected: t.Optional(t.Boolean),122  focused: t.Optional(t.Boolean),123  pressed: t.Optional(t.Boolean),124  focusable: t.Optional(t.Boolean),125  haspopup: t.Optional(t.Boolean),126  required: t.Optional(t.Boolean),127  invalid: t.Optional(t.Boolean),128  modal: t.Optional(t.Boolean),129  editable: t.Optional(t.Boolean),130  busy: t.Optional(t.Boolean),131  multiline: t.Optional(t.Boolean),132  readonly: t.Optional(t.Boolean),133  checked: t.Optional(t.Enum(['mixed', true])),134  expanded: t.Optional(t.Boolean),135  disabled: t.Optional(t.Boolean),136  multiselectable: t.Optional(t.Boolean),137  value: t.Optional(t.String),138  description: t.Optional(t.String),139  roledescription: t.Optional(t.String),140  valuetext: t.Optional(t.String),141  orientation: t.Optional(t.String),142  autocomplete: t.Optional(t.String),143  keyshortcuts: t.Optional(t.String),144  level: t.Optional(t.Number),145  tag: t.Optional(t.String),146  foundObject: t.Optional(t.Boolean),147}148const networkTypes = {};149networkTypes.HTTPHeader = {150  name: t.String,151  value: t.String,152};153networkTypes.HTTPCredentials = {154  username: t.String,155  password: t.String,156};157networkTypes.SecurityDetails = {158  protocol: t.String,159  subjectName: t.String,160  issuer: t.String,161  validFrom: t.Number,162  validTo: t.Number,163};164networkTypes.ResourceTiming = {165  startTime: t.Number,166  domainLookupStart: t.Number,167  domainLookupEnd: t.Number,168  connectStart: t.Number,169  secureConnectionStart: t.Number,170  connectEnd: t.Number,171  requestStart: t.Number,172  responseStart: t.Number,173};174const Browser = {175  targets: ['browser'],176  types: browserTypes,177  events: {178    'attachedToTarget': {179      sessionId: t.String,180      targetInfo: browserTypes.TargetInfo,181    },182    'detachedFromTarget': {183      sessionId: t.String,184      targetId: t.String,185    },186    'downloadCreated': {187      uuid: t.String,188      browserContextId: t.Optional(t.String),189      pageTargetId: t.String,190      url: t.String,191      suggestedFileName: t.String,192    },193    'downloadFinished': {194      uuid: t.String,195      canceled: t.Optional(t.Boolean),196      error: t.Optional(t.String),197    },198    'videoRecordingFinished': {199      screencastId: t.String,200    },201  },202  methods: {203    'enable': {204      params: {205        attachToDefaultContext: t.Boolean,206      },207    },208    'createBrowserContext': {209      params: {210        removeOnDetach: t.Optional(t.Boolean),211      },212      returns: {213        browserContextId: t.String,214      },215    },216    'removeBrowserContext': {217      params: {218        browserContextId: t.String,219      },220    },221    'newPage': {222      params: {223        browserContextId: t.Optional(t.String),224      },225      returns: {226        targetId: t.String,227      }228    },229    'close': {},230    'getInfo': {231      returns: {232        userAgent: t.String,233        version: t.String,234      },235    },236    'setExtraHTTPHeaders': {237      params: {238        browserContextId: t.Optional(t.String),239        headers: t.Array(networkTypes.HTTPHeader),240      },241    },242    'setBrowserProxy': {243      params: {244        type: t.Enum(['http', 'https', 'socks', 'socks4']),245        bypass: t.Array(t.String),246        host: t.String,247        port: t.Number,248        username: t.Optional(t.String),249        password: t.Optional(t.String),250      },251    },252    'setContextProxy': {253      params: {254        browserContextId: t.Optional(t.String),255        type: t.Enum(['http', 'https', 'socks', 'socks4']),256        bypass: t.Array(t.String),257        host: t.String,258        port: t.Number,259        username: t.Optional(t.String),260        password: t.Optional(t.String),261      },262    },263    'setHTTPCredentials': {264      params: {265        browserContextId: t.Optional(t.String),266        credentials: t.Nullable(networkTypes.HTTPCredentials),267      },268    },269    'setRequestInterception': {270      params: {271        browserContextId: t.Optional(t.String),272        enabled: t.Boolean,273      },274    },275    'setGeolocationOverride': {276      params: {277        browserContextId: t.Optional(t.String),278        geolocation: t.Nullable(browserTypes.Geolocation),279      }280    },281    'setUserAgentOverride': {282      params: {283        browserContextId: t.Optional(t.String),284        userAgent: t.Nullable(t.String),285      }286    },287    'setPlatformOverride': {288      params: {289        browserContextId: t.Optional(t.String),290        platform: t.Nullable(t.String),291      }292    },293    'setBypassCSP': {294      params: {295        browserContextId: t.Optional(t.String),296        bypassCSP: t.Nullable(t.Boolean),297      }298    },299    'setIgnoreHTTPSErrors': {300      params: {301        browserContextId: t.Optional(t.String),302        ignoreHTTPSErrors: t.Nullable(t.Boolean),303      }304    },305    'setJavaScriptDisabled': {306      params: {307        browserContextId: t.Optional(t.String),308        javaScriptDisabled: t.Boolean,309      }310    },311    'setLocaleOverride': {312      params: {313        browserContextId: t.Optional(t.String),314        locale: t.Nullable(t.String),315      }316    },317    'setTimezoneOverride': {318      params: {319        browserContextId: t.Optional(t.String),320        timezoneId: t.Nullable(t.String),321      }322    },323    'setDownloadOptions': {324      params: {325        browserContextId: t.Optional(t.String),326        downloadOptions: t.Nullable(browserTypes.DownloadOptions),327      }328    },329    'setTouchOverride': {330      params: {331        browserContextId: t.Optional(t.String),332        hasTouch: t.Nullable(t.Boolean),333      }334    },335    'setDefaultViewport': {336      params: {337        browserContextId: t.Optional(t.String),338        viewport: t.Nullable(pageTypes.Viewport),339      }340    },341    'setScrollbarsHidden': {342      params: {343        browserContextId: t.Optional(t.String),344        hidden: t.Boolean,345      }346    },347    'addScriptToEvaluateOnNewDocument': {348      params: {349        browserContextId: t.Optional(t.String),350        script: t.String,351      }352    },353    'addBinding': {354      params: {355        browserContextId: t.Optional(t.String),356        worldName: t.Optional(t.String),357        name: t.String,358        script: t.String,359      },360    },361    'grantPermissions': {362      params: {363        origin: t.String,364        browserContextId: t.Optional(t.String),365        permissions: t.Array(t.String),366      },367    },368    'resetPermissions': {369      params: {370        browserContextId: t.Optional(t.String),371      }372    },373    'setCookies': {374      params: {375        browserContextId: t.Optional(t.String),376        cookies: t.Array(browserTypes.CookieOptions),377      }378    },379    'clearCookies': {380      params: {381        browserContextId: t.Optional(t.String),382      }383    },384    'getCookies': {385      params: {386        browserContextId: t.Optional(t.String)387      },388      returns: {389        cookies: t.Array(browserTypes.Cookie),390      },391    },392    'setOnlineOverride': {393      params: {394        browserContextId: t.Optional(t.String),395        override: t.Nullable(t.Enum(['online', 'offline'])),396      }397    },398    'setColorScheme': {399      params: {400        browserContextId: t.Optional(t.String),401        colorScheme: t.Nullable(t.Enum(['dark', 'light', 'no-preference'])),402      },403    },404    'setReducedMotion': {405      params: {406        browserContextId: t.Optional(t.String),407        reducedMotion: t.Nullable(t.Enum(['reduce', 'no-preference'])),408      },409    },410    'setForcedColors': {411      params: {412        browserContextId: t.Optional(t.String),413        forcedColors: t.Nullable(t.Enum(['active', 'none'])),414      },415    },416    'setVideoRecordingOptions': {417      params: {418        browserContextId: t.Optional(t.String),419        options: t.Optional({420          dir: t.String,421          width: t.Number,422          height: t.Number,423        }),424      },425    },426    'cancelDownload': {427      params: {428        uuid: t.Optional(t.String),429      }430    }431  },432};433const Network = {434  targets: ['page'],435  types: networkTypes,436  events: {437    'requestWillBeSent': {438      // frameId may be absent for redirected requests.439      frameId: t.Optional(t.String),440      requestId: t.String,441      // RequestID of redirected request.442      redirectedFrom: t.Optional(t.String),443      postData: t.Optional(t.String),444      headers: t.Array(networkTypes.HTTPHeader),445      isIntercepted: t.Boolean,446      url: t.String,447      method: t.String,448      navigationId: t.Optional(t.String),449      cause: t.String,450      internalCause: t.String,451    },452    'responseReceived': {453      securityDetails: t.Nullable(networkTypes.SecurityDetails),454      requestId: t.String,455      fromCache: t.Boolean,456      remoteIPAddress: t.Optional(t.String),457      remotePort: t.Optional(t.Number),458      status: t.Number,459      statusText: t.String,460      headers: t.Array(networkTypes.HTTPHeader),461      timing: networkTypes.ResourceTiming,462    },463    'requestFinished': {464      requestId: t.String,465      responseEndTime: t.Number,466      transferSize: t.Number,467      encodedBodySize: t.Number,468      protocolVersion: t.Optional(t.String),469    },470    'requestFailed': {471      requestId: t.String,472      errorCode: t.String,473    },474  },475  methods: {476    'setRequestInterception': {477      params: {478        enabled: t.Boolean,479      },480    },481    'setExtraHTTPHeaders': {482      params: {483        headers: t.Array(networkTypes.HTTPHeader),484      },485    },486    'abortInterceptedRequest': {487      params: {488        requestId: t.String,489        errorCode: t.String,490      },491    },492    'resumeInterceptedRequest': {493      params: {494        requestId: t.String,495        url: t.Optional(t.String),496        method: t.Optional(t.String),497        headers: t.Optional(t.Array(networkTypes.HTTPHeader)),498        postData: t.Optional(t.String),499      },500    },501    'fulfillInterceptedRequest': {502      params: {503        requestId: t.String,504        status: t.Number,505        statusText: t.String,506        headers: t.Array(networkTypes.HTTPHeader),507        base64body: t.Optional(t.String),  // base64-encoded508      },509    },510    'getResponseBody': {511      params: {512        requestId: t.String,513      },514      returns: {515        base64body: t.String,516        evicted: t.Optional(t.Boolean),517      },518    },519  },520};521const Runtime = {522  targets: ['page'],523  types: runtimeTypes,524  events: {525    'executionContextCreated': {526      executionContextId: t.String,527      auxData: runtimeTypes.AuxData,528    },529    'executionContextDestroyed': {530      executionContextId: t.String,531    },532    'console': {533      executionContextId: t.String,534      args: t.Array(runtimeTypes.RemoteObject),535      type: t.String,536      location: runtimeTypes.ScriptLocation,537    },538  },539  methods: {540    'evaluate': {541      params: {542        // Pass frameId here.543        executionContextId: t.String,544        expression: t.String,545        returnByValue: t.Optional(t.Boolean),546      },547      returns: {548        result: t.Optional(runtimeTypes.RemoteObject),549        exceptionDetails: t.Optional(runtimeTypes.ExceptionDetails),550      }551    },552    'callFunction': {553      params: {554        // Pass frameId here.555        executionContextId: t.String,556        functionDeclaration: t.String,557        returnByValue: t.Optional(t.Boolean),558        args: t.Array(runtimeTypes.CallFunctionArgument),559      },560      returns: {561        result: t.Optional(runtimeTypes.RemoteObject),562        exceptionDetails: t.Optional(runtimeTypes.ExceptionDetails),563      }564    },565    'disposeObject': {566      params: {567        executionContextId: t.String,568        objectId: t.String,569      },570    },571    'getObjectProperties': {572      params: {573        executionContextId: t.String,574        objectId: t.String,575      },576      returns: {577        properties: t.Array(runtimeTypes.ObjectProperty),578      }579    },580  },581};582const Page = {583  targets: ['page'],584  types: pageTypes,585  events: {586    'ready': {587    },588    'crashed': {589    },590    'eventFired': {591      frameId: t.String,592      name: t.Enum(['load', 'DOMContentLoaded']),593    },594    'uncaughtError': {595      frameId: t.String,596      message: t.String,597      stack: t.String,598    },599    'frameAttached': {600      frameId: t.String,601      parentFrameId: t.Optional(t.String),602    },603    'frameDetached': {604      frameId: t.String,605    },606    'navigationStarted': {607      frameId: t.String,608      navigationId: t.String,609      url: t.String,610    },611    'navigationCommitted': {612      frameId: t.String,613      // |navigationId| can only be null in response to enable.614      navigationId: t.Optional(t.String),615      url: t.String,616      // frame.id or frame.name617      name: t.String,618    },619    'navigationAborted': {620      frameId: t.String,621      navigationId: t.String,622      errorText: t.String,623    },624    'sameDocumentNavigation': {625      frameId: t.String,626      url: t.String,627    },628    'dialogOpened': {629      dialogId: t.String,630      type: t.Enum(['prompt', 'alert', 'confirm', 'beforeunload']),631      message: t.String,632      defaultValue: t.Optional(t.String),633    },634    'dialogClosed': {635      dialogId: t.String,636    },637    'bindingCalled': {638      executionContextId: t.String,639      name: t.String,640      payload: t.Any,641    },642    'linkClicked': {643      phase: t.Enum(['before', 'after']),644    },645    'willOpenNewWindowAsynchronously': {},646    'fileChooserOpened': {647      executionContextId: t.String,648      element: runtimeTypes.RemoteObject649    },650    'workerCreated': {651      workerId: t.String,652      frameId: t.String,653      url: t.String,654    },655    'workerDestroyed': {656      workerId: t.String,657    },658    'dispatchMessageFromWorker': {659      workerId: t.String,660      message: t.String,661    },662    'videoRecordingStarted': {663      screencastId: t.String,664      file: t.String,665    },666    'webSocketCreated': {667      frameId: t.String,668      wsid: t.String,669      requestURL: t.String,670    },671    'webSocketOpened': {672      frameId: t.String,673      requestId: t.String,674      wsid: t.String,675      effectiveURL: t.String,676    },677    'webSocketClosed': {678      frameId: t.String,679      wsid: t.String,680      error: t.String,681    },682    'webSocketFrameSent': {683      frameId: t.String,684      wsid: t.String,685      opcode: t.Number,686      data: t.String,687    },688    'webSocketFrameReceived': {689      frameId: t.String,690      wsid: t.String,691      opcode: t.Number,692      data: t.String,693    },694    'screencastFrame': {695      data: t.String,696      deviceWidth: t.Number,697      deviceHeight: t.Number,698    },699  },700  methods: {701    'close': {702      params: {703        runBeforeUnload: t.Optional(t.Boolean),704      },705    },706    'setFileInputFiles': {707      params: {708        frameId: t.String,709        objectId: t.String,710        files: t.Array(t.String),711      },712    },713    'addBinding': {714      params: {715        worldName: t.Optional(t.String),716        name: t.String,717        script: t.String,718      },719    },720    'setViewportSize': {721      params: {722        viewportSize: t.Nullable(pageTypes.Size),723      },724    },725    'bringToFront': {726      params: {727      },728    },729    'setEmulatedMedia': {730      params: {731        type: t.Optional(t.Enum(['screen', 'print', ''])),732        colorScheme: t.Optional(t.Enum(['dark', 'light', 'no-preference'])),733        reducedMotion: t.Optional(t.Enum(['reduce', 'no-preference'])),734        forcedColors: t.Optional(t.Enum(['active', 'none'])),735      },736    },737    'setCacheDisabled': {738      params: {739        cacheDisabled: t.Boolean,740      },741    },742    'describeNode': {743      params: {744        frameId: t.String,745        objectId: t.String,746      },747      returns: {748        contentFrameId: t.Optional(t.String),749        ownerFrameId: t.Optional(t.String),750      },751    },752    'scrollIntoViewIfNeeded': {753      params: {754        frameId: t.String,755        objectId: t.String,756        rect: t.Optional(pageTypes.Rect),757      },758    },759    'addScriptToEvaluateOnNewDocument': {760      params: {761        script: t.String,762        worldName: t.Optional(t.String),763      }764    },765    'navigate': {766      params: {767        frameId: t.String,768        url: t.String,769        referer: t.Optional(t.String),770      },771      returns: {772        navigationId: t.Nullable(t.String),773        navigationURL: t.Nullable(t.String),774      }775    },776    'goBack': {777      params: {778        frameId: t.String,779      },780      returns: {781        success: t.Boolean,782      },783    },784    'goForward': {785      params: {786        frameId: t.String,787      },788      returns: {789        success: t.Boolean,790      },791    },792    'reload': {793      params: {794        frameId: t.String,795      },796    },797    'adoptNode': {798      params: {799        frameId: t.String,800        objectId: t.String,801        executionContextId: t.String,802      },803      returns: {804        remoteObject: t.Nullable(runtimeTypes.RemoteObject),805      },806    },807    'screenshot': {808      params: {809        mimeType: t.Enum(['image/png', 'image/jpeg']),810        clip: t.Optional(pageTypes.Clip),811        omitDeviceScaleFactor: t.Optional(t.Boolean),812      },813      returns: {814        data: t.String,815      }816    },817    'getContentQuads': {818      params: {819        frameId: t.String,820        objectId: t.String,821      },822      returns: {823        quads: t.Array(pageTypes.DOMQuad),824      },825    },826    'dispatchKeyEvent': {827      params: {828        type: t.String,829        key: t.String,830        keyCode: t.Number,831        location: t.Number,832        code: t.String,833        repeat: t.Boolean,834        text: t.Optional(t.String),835      }836    },837    'dispatchTouchEvent': {838      params: {839        type: t.Enum(['touchStart', 'touchEnd', 'touchMove', 'touchCancel']),840        touchPoints: t.Array(pageTypes.TouchPoint),841        modifiers: t.Number,842      },843      returns: {844        defaultPrevented: t.Boolean,845      }846    },847    'dispatchTapEvent': {848      params: {849        x: t.Number,850        y: t.Number,851        modifiers: t.Number,852      }853    },854    'dispatchMouseEvent': {855      params: {856        type: t.String,857        button: t.Number,858        x: t.Number,859        y: t.Number,860        modifiers: t.Number,861        clickCount: t.Optional(t.Number),862        buttons: t.Number,863      }864    },865    'dispatchWheelEvent': {866      params: {867        x: t.Number,868        y: t.Number,869        deltaX: t.Number,870        deltaY: t.Number,871        deltaZ: t.Number,872        modifiers: t.Number,873      }874    },875    'insertText': {876      params: {877        text: t.String,878      }879    },880    'crash': {881      params: {}882    },883    'handleDialog': {884      params: {885        dialogId: t.String,886        accept: t.Boolean,887        promptText: t.Optional(t.String),888      },889    },890    'setInterceptFileChooserDialog': {891      params: {892        enabled: t.Boolean,893      },894    },895    'sendMessageToWorker': {896      params: {897        frameId: t.String,898        workerId: t.String,899        message: t.String,900      },901    },902    'startScreencast': {903      params: {904        width: t.Number,905        height: t.Number,906        quality: t.Number,907      },908      returns: {909        screencastId: t.String,910      },911    },912    'screencastFrameAck': {913      params: {914        screencastId: t.String,915      },916    },917    'stopScreencast': {918    },919  },920};921const Accessibility = {922  targets: ['page'],923  types: axTypes,924  events: {},925  methods: {926    'getFullAXTree': {927      params: {928        objectId: t.Optional(t.String),929      },930      returns: {931        tree: axTypes.AXTree932      },933    }934  }935}936this.protocol = {937  domains: {Browser, Page, Runtime, Network, Accessibility},938};939this.checkScheme = checkScheme;...ffBrowser.js
Source:ffBrowser.js  
1"use strict";2Object.defineProperty(exports, "__esModule", {3  value: true4});5exports.FFBrowserContext = exports.FFBrowser = void 0;6var _errors = require("../../utils/errors");7var _utils = require("../../utils/utils");8var _browser = require("../browser");9var _browserContext = require("../browserContext");10var network = _interopRequireWildcard(require("../network"));11var _ffConnection = require("./ffConnection");12var _ffPage = require("./ffPage");13function _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); }14function _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; }15/**16 * Copyright 2018 Google Inc. All rights reserved.17 * Modifications copyright (c) Microsoft Corporation.18 *19 * Licensed under the Apache License, Version 2.0 (the 'License');20 * you may not use this file except in compliance with the License.21 * You may obtain a copy of the License at22 *23 *     http://www.apache.org/licenses/LICENSE-2.024 *25 * Unless required by applicable law or agreed to in writing, software26 * distributed under the License is distributed on an 'AS IS' BASIS,27 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.28 * See the License for the specific language governing permissions and29 * limitations under the License.30 */31class FFBrowser extends _browser.Browser {32  static async connect(transport, options) {33    const connection = new _ffConnection.FFConnection(transport, options.protocolLogger, options.browserLogsCollector);34    const browser = new FFBrowser(connection, options);35    if (options.__testHookOnConnectToBrowser) await options.__testHookOnConnectToBrowser();36    const promises = [connection.send('Browser.enable', {37      attachToDefaultContext: !!options.persistent38    }), browser._initVersion()];39    if (options.persistent) {40      browser._defaultContext = new FFBrowserContext(browser, undefined, options.persistent);41      promises.push(browser._defaultContext._initialize());42    }43    if (options.proxy) promises.push(browser._connection.send('Browser.setBrowserProxy', toJugglerProxyOptions(options.proxy)));44    await Promise.all(promises);45    return browser;46  }47  constructor(connection, options) {48    super(options);49    this._connection = void 0;50    this._ffPages = void 0;51    this._contexts = void 0;52    this._version = '';53    this._userAgent = '';54    this._connection = connection;55    this._ffPages = new Map();56    this._contexts = new Map();57    this._connection.on(_ffConnection.ConnectionEvents.Disconnected, () => this._onDisconnect());58    this._connection.on('Browser.attachedToTarget', this._onAttachedToTarget.bind(this));59    this._connection.on('Browser.detachedFromTarget', this._onDetachedFromTarget.bind(this));60    this._connection.on('Browser.downloadCreated', this._onDownloadCreated.bind(this));61    this._connection.on('Browser.downloadFinished', this._onDownloadFinished.bind(this));62    this._connection.on('Browser.videoRecordingFinished', this._onVideoRecordingFinished.bind(this));63  }64  async _initVersion() {65    const result = await this._connection.send('Browser.getInfo');66    this._version = result.version.substring(result.version.indexOf('/') + 1);67    this._userAgent = result.userAgent;68  }69  isConnected() {70    return !this._connection._closed;71  }72  async newContext(options) {73    (0, _browserContext.validateBrowserContextOptions)(options, this.options);74    if (options.isMobile) throw new Error('options.isMobile is not supported in Firefox');75    const {76      browserContextId77    } = await this._connection.send('Browser.createBrowserContext', {78      removeOnDetach: true79    });80    const context = new FFBrowserContext(this, browserContextId, options);81    await context._initialize();82    this._contexts.set(browserContextId, context);83    return context;84  }85  contexts() {86    return Array.from(this._contexts.values());87  }88  version() {89    return this._version;90  }91  userAgent() {92    return this._userAgent;93  }94  _onDetachedFromTarget(payload) {95    const ffPage = this._ffPages.get(payload.targetId);96    this._ffPages.delete(payload.targetId);97    ffPage.didClose();98  }99  _onAttachedToTarget(payload) {100    const {101      targetId,102      browserContextId,103      openerId,104      type105    } = payload.targetInfo;106    (0, _utils.assert)(type === 'page');107    const context = browserContextId ? this._contexts.get(browserContextId) : this._defaultContext;108    (0, _utils.assert)(context, `Unknown context id:${browserContextId}, _defaultContext: ${this._defaultContext}`);109    const session = this._connection.createSession(payload.sessionId);110    const opener = openerId ? this._ffPages.get(openerId) : null;111    const ffPage = new _ffPage.FFPage(session, context, opener);112    this._ffPages.set(targetId, ffPage);113  }114  _onDownloadCreated(payload) {115    const ffPage = this._ffPages.get(payload.pageTargetId);116    (0, _utils.assert)(ffPage);117    if (!ffPage) return;118    let originPage = ffPage._initializedPage; // If it's a new window download, report it on the opener page.119    if (!originPage) {120      // Resume the page creation with an error. The page will automatically close right121      // after the download begins.122      ffPage._markAsError(new Error('Starting new page download'));123      if (ffPage._opener) originPage = ffPage._opener._initializedPage;124    }125    if (!originPage) return;126    this._downloadCreated(originPage, payload.uuid, payload.url, payload.suggestedFileName);127  }128  _onDownloadFinished(payload) {129    const error = payload.canceled ? 'canceled' : payload.error;130    this._downloadFinished(payload.uuid, error);131  }132  _onVideoRecordingFinished(payload) {133    var _this$_takeVideo;134    (_this$_takeVideo = this._takeVideo(payload.screencastId)) === null || _this$_takeVideo === void 0 ? void 0 : _this$_takeVideo.reportFinished();135  }136  _onDisconnect() {137    for (const video of this._idToVideo.values()) video.artifact.reportFinished(_errors.kBrowserClosedError);138    this._idToVideo.clear();139    this._didClose();140  }141}142exports.FFBrowser = FFBrowser;143class FFBrowserContext extends _browserContext.BrowserContext {144  constructor(browser, browserContextId, options) {145    super(browser, options, browserContextId);146  }147  async _initialize() {148    (0, _utils.assert)(!this._ffPages().length);149    const browserContextId = this._browserContextId;150    const promises = [super._initialize()];151    promises.push(this._browser._connection.send('Browser.setDownloadOptions', {152      browserContextId,153      downloadOptions: {154        behavior: this._options.acceptDownloads ? 'saveToDisk' : 'cancel',155        downloadsDir: this._browser.options.downloadsPath156      }157    }));158    if (this._options.viewport) {159      const viewport = {160        viewportSize: {161          width: this._options.viewport.width,162          height: this._options.viewport.height163        },164        deviceScaleFactor: this._options.deviceScaleFactor || 1165      };166      promises.push(this._browser._connection.send('Browser.setDefaultViewport', {167        browserContextId,168        viewport169      }));170    }171    if (this._options.hasTouch) promises.push(this._browser._connection.send('Browser.setTouchOverride', {172      browserContextId,173      hasTouch: true174    }));175    if (this._options.userAgent) promises.push(this._browser._connection.send('Browser.setUserAgentOverride', {176      browserContextId,177      userAgent: this._options.userAgent178    }));179    if (this._options.bypassCSP) promises.push(this._browser._connection.send('Browser.setBypassCSP', {180      browserContextId,181      bypassCSP: true182    }));183    if (this._options.ignoreHTTPSErrors) promises.push(this._browser._connection.send('Browser.setIgnoreHTTPSErrors', {184      browserContextId,185      ignoreHTTPSErrors: true186    }));187    if (this._options.javaScriptEnabled === false) promises.push(this._browser._connection.send('Browser.setJavaScriptDisabled', {188      browserContextId,189      javaScriptDisabled: true190    }));191    if (this._options.locale) promises.push(this._browser._connection.send('Browser.setLocaleOverride', {192      browserContextId,193      locale: this._options.locale194    }));195    if (this._options.timezoneId) promises.push(this._browser._connection.send('Browser.setTimezoneOverride', {196      browserContextId,197      timezoneId: this._options.timezoneId198    }));199    if (this._options.permissions) promises.push(this.grantPermissions(this._options.permissions));200    if (this._options.extraHTTPHeaders || this._options.locale) promises.push(this.setExtraHTTPHeaders(this._options.extraHTTPHeaders || []));201    if (this._options.httpCredentials) promises.push(this.setHTTPCredentials(this._options.httpCredentials));202    if (this._options.geolocation) promises.push(this.setGeolocation(this._options.geolocation));203    if (this._options.offline) promises.push(this.setOffline(this._options.offline));204    promises.push(this._browser._connection.send('Browser.setColorScheme', {205      browserContextId,206      colorScheme: this._options.colorScheme !== undefined ? this._options.colorScheme : 'light'207    }));208    // [Replay] - Browser.setReducedMotion and Browser.setReducedMotion are not supported209    // promises.push(this._browser._connection.send('Browser.setReducedMotion', {210    //   browserContextId,211    //   reducedMotion: this._options.reducedMotion !== undefined ? this._options.reducedMotion : 'no-preference'212    // }));213    // promises.push(this._browser._connection.send('Browser.setReducedMotion', {214    //   browserContextId,215    //   forcedColors: this._options.forcedColors !== undefined ? this._options.forcedColors : 'none'216    // }));217    if (this._options.recordVideo) {218      promises.push(this._ensureVideosPath().then(() => {219        return this._browser._connection.send('Browser.setVideoRecordingOptions', {220          // validateBrowserContextOptions ensures correct video size.221          options: { ...this._options.recordVideo.size,222            dir: this._options.recordVideo.dir223          },224          browserContextId: this._browserContextId225        });226      }));227    }228    if (this._options.proxy) {229      promises.push(this._browser._connection.send('Browser.setContextProxy', {230        browserContextId: this._browserContextId,231        ...toJugglerProxyOptions(this._options.proxy)232      }));233    }234    await Promise.all(promises);235  }236  _ffPages() {237    return Array.from(this._browser._ffPages.values()).filter(ffPage => ffPage._browserContext === this);238  }239  pages() {240    return this._ffPages().map(ffPage => ffPage._initializedPage).filter(pageOrNull => !!pageOrNull);241  }242  async newPageDelegate() {243    (0, _browserContext.assertBrowserContextIsNotOwned)(this);244    const {245      targetId246    } = await this._browser._connection.send('Browser.newPage', {247      browserContextId: this._browserContextId248    }).catch(e => {249      if (e.message.includes('Failed to override timezone')) throw new Error(`Invalid timezone ID: ${this._options.timezoneId}`);250      throw e;251    });252    return this._browser._ffPages.get(targetId);253  }254  async _doCookies(urls) {255    const {256      cookies257    } = await this._browser._connection.send('Browser.getCookies', {258      browserContextId: this._browserContextId259    });260    return network.filterCookies(cookies.map(c => {261      const copy = { ...c262      };263      delete copy.size;264      delete copy.session;265      return copy;266    }), urls);267  }268  async addCookies(cookies) {269    const cc = network.rewriteCookies(cookies).map(c => ({ ...c,270      expires: c.expires && c.expires !== -1 ? c.expires : undefined271    }));272    await this._browser._connection.send('Browser.setCookies', {273      browserContextId: this._browserContextId,274      cookies: cc275    });276  }277  async clearCookies() {278    await this._browser._connection.send('Browser.clearCookies', {279      browserContextId: this._browserContextId280    });281  }282  async _doGrantPermissions(origin, permissions) {283    const webPermissionToProtocol = new Map([['geolocation', 'geo'], ['persistent-storage', 'persistent-storage'], ['push', 'push'], ['notifications', 'desktop-notification']]);284    const filtered = permissions.map(permission => {285      const protocolPermission = webPermissionToProtocol.get(permission);286      if (!protocolPermission) throw new Error('Unknown permission: ' + permission);287      return protocolPermission;288    });289    await this._browser._connection.send('Browser.grantPermissions', {290      origin: origin,291      browserContextId: this._browserContextId,292      permissions: filtered293    });294  }295  async _doClearPermissions() {296    await this._browser._connection.send('Browser.resetPermissions', {297      browserContextId: this._browserContextId298    });299  }300  async setGeolocation(geolocation) {301    (0, _browserContext.verifyGeolocation)(geolocation);302    this._options.geolocation = geolocation;303    await this._browser._connection.send('Browser.setGeolocationOverride', {304      browserContextId: this._browserContextId,305      geolocation: geolocation || null306    });307  }308  async setExtraHTTPHeaders(headers) {309    this._options.extraHTTPHeaders = headers;310    let allHeaders = this._options.extraHTTPHeaders;311    if (this._options.locale) allHeaders = network.mergeHeaders([allHeaders, network.singleHeader('Accept-Language', this._options.locale)]);312    await this._browser._connection.send('Browser.setExtraHTTPHeaders', {313      browserContextId: this._browserContextId,314      headers: allHeaders315    });316  }317  async setOffline(offline) {318    this._options.offline = offline;319    await this._browser._connection.send('Browser.setOnlineOverride', {320      browserContextId: this._browserContextId,321      override: offline ? 'offline' : 'online'322    });323  }324  async _doSetHTTPCredentials(httpCredentials) {325    this._options.httpCredentials = httpCredentials;326    await this._browser._connection.send('Browser.setHTTPCredentials', {327      browserContextId: this._browserContextId,328      credentials: httpCredentials || null329    });330  }331  async _doAddInitScript(source) {332    await this._browser._connection.send('Browser.addScriptToEvaluateOnNewDocument', {333      browserContextId: this._browserContextId,334      script: source335    });336  }337  async _doExposeBinding(binding) {338    await this._browser._connection.send('Browser.addBinding', {339      browserContextId: this._browserContextId,340      name: binding.name,341      script: binding.source342    });343  }344  async _doUpdateRequestInterception() {345    await this._browser._connection.send('Browser.setRequestInterception', {346      browserContextId: this._browserContextId,347      enabled: !!this._requestInterceptor348    });349  }350  _onClosePersistent() {}351  async _doClose() {352    (0, _utils.assert)(this._browserContextId);353    await this._browser._connection.send('Browser.removeBrowserContext', {354      browserContextId: this._browserContextId355    });356    this._browser._contexts.delete(this._browserContextId);357  }358  async _doCancelDownload(uuid) {359    await this._browser._connection.send('Browser.cancelDownload', {360      uuid361    });362  }363}364exports.FFBrowserContext = FFBrowserContext;365function toJugglerProxyOptions(proxy) {366  const proxyServer = new URL(proxy.server);367  let port = parseInt(proxyServer.port, 10);368  let type = 'http';369  if (proxyServer.protocol === 'socks5:') type = 'socks';else if (proxyServer.protocol === 'socks4:') type = 'socks4';else if (proxyServer.protocol === 'https:') type = 'https';370  if (proxyServer.port === '') {371    if (proxyServer.protocol === 'http:') port = 80;else if (proxyServer.protocol === 'https:') port = 443;372  }373  return {374    type,375    bypass: proxy.bypass ? proxy.bypass.split(',').map(domain => domain.trim()) : [],376    host: proxyServer.hostname,377    port,378    username: proxy.username,379    password: proxy.password380  };...BrowserHandler.js
Source:BrowserHandler.js  
...179  async ['Browser.setForcedColors']({browserContextId, forcedColors}) {180    await this._targetRegistry.browserContextForId(browserContextId).setForcedColors(nullToUndefined(forcedColors));181  }182  async ['Browser.setVideoRecordingOptions']({browserContextId, options}) {183    await this._targetRegistry.browserContextForId(browserContextId).setVideoRecordingOptions(options);184  }185  async ['Browser.setUserAgentOverride']({browserContextId, userAgent}) {186    await this._targetRegistry.browserContextForId(browserContextId).setDefaultUserAgent(userAgent);187  }188  async ['Browser.setPlatformOverride']({browserContextId, platform}) {189    await this._targetRegistry.browserContextForId(browserContextId).setDefaultPlatform(platform);190  }191  async ['Browser.setBypassCSP']({browserContextId, bypassCSP}) {192    await this._targetRegistry.browserContextForId(browserContextId).applySetting('bypassCSP', nullToUndefined(bypassCSP));193  }194  async ['Browser.setJavaScriptDisabled']({browserContextId, javaScriptDisabled}) {195    await this._targetRegistry.browserContextForId(browserContextId).setJavaScriptDisabled(javaScriptDisabled);196  }197  async ['Browser.setLocaleOverride']({browserContextId, locale}) {...Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3  const browser = await chromium.launch({ headless: false });4  const page = await browser.newPage();5  await page.screenshot({ path: 'playwright.png' });6  await browser.close();7})();Using AI Code Generation
1const { chromium } = require('playwright');2const path = require('path');3(async () => {4  const browser = await chromium.launch({ headless: false });5  const context = await browser.newContext({6    recordVideo: {7      dir: path.join(__dirname, 'videos'),8    },9  });10  const page = await context.newPage();11  await page.screenshot({ path: 'example.png' });12  await browser.close();13})();14const { chromium } = require('playwright');15const path = require('path');16(async () => {17  const browser = await chromium.launch({ headless: false });18  const context = await browser.newContext({19    recordVideo: {20      dir: path.join(__dirname, 'videos'),21    },22  });23  const page = await context.newPage();24  await page.screenshot({ path: 'example.png' });25  await browser.close();26})();27const { chromium } = require('playwright');28const path = require('path');29(async () => {30  const browser = await chromium.launch({ headless: false });31  const context = await browser.newContext({32    recordVideo: {33      dir: path.join(__dirname, 'videos'),34    },35  });36  const page = await context.newPage();37  await page.screenshot({ path: 'example.png' });38  await browser.close();39})();40const { chromium } = require('playwright');41const path = require('path');42(async () => {43  const browser = await chromium.launch({ headless: false });44  const context = await browser.newContext({45    recordVideo: {46      dir: path.join(__dirname, 'videos'),47    },48  });49  const page = await context.newPage();50  await page.screenshot({ path: 'example.png' });51  await browser.close();52})();53const { chromium } = require('playwright');54const path = require('path');55(async () => {56  const browser = await chromium.launch({Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3  const browser = await chromium.launch({ headless: false, devtools: true });4  const context = await browser.newContext({5    recordVideo: {6    },7  });8  const page = await context.newPage();9  await page.close();10  await context.close();11  await browser.close();12})();13const { helper } = require('../helper');14const { BrowserContext } = require('../browserContext');15const { Events } = require('../events');16const { Page } = require('../page');17const { assert } = require('../../utils/utils');18const { CRSession } = require('./crConnection');19const { CRPage } = require('./crPage');20const { Protocol } = require('./protocol');21const { CRBrowserServer } = require('./crBrowserServer');22const { Browser } = require('../browser');23class CRBrowser extends Browser {24   * @param {!Puppeteer.CDPSession} client25   * @param {function():Promise} closeCallback26   * @param {BrowserContext} context27   * @param {boolean} ignoreHTTPSErrors28   * @param {boolean} appMode29   * @param {boolean} hasTouch30   * @param {boolean} isChromium31  constructor(client, closeCallback, context, ignoreHTTPSErrors, appMode, hasTouch, isChromium) {32    super(context, ignoreHTTPSErrors, appMode, hasTouch, isChromium);33    this._client = client;34    this._closeCallback = closeCallback;35    this._contexts = new Set();36    this._defaultContext = context;37    this._contexts.add(context);38    this._eventListeners = [];39    this._crPages = new Map();40    this._crPagePromises = new Map();41    this._connection = client._connection;42    this._connection.on(Events.Disconnected, () => this._onDisconnected());43    this._browserContextIds = new Map();44    this._version = null;45    /** @type {function():Promise} */Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3  const browser = await chromium.launch({ 4  });5  const context = await browser.newContext();6  await context.setVideoRecordingOptions({7    size: {8    },9  });10  const page = await context.newPage();11  await page.click('#movie_player > div.ytp-chrome-bottom > div.ytp-chrome-controls > div.ytp-left-controls > button');12  await page.waitForTimeout(10000);13  await browser.close();14})();15const { chromium } = require('playwright');16(async () => {17  const browser = await chromium.launch({ 18  });19  const context = await browser.newContext();20  await context.setVideoRecordingOptions({21    size: {22    },23  });24  const page = await context.newPage();25  await page.click('#movie_player > div.ytp-chrome-bottom > div.ytp-chrome-controls > div.ytp-left-controls > button');26  await page.waitForTimeout(10000);27  await browser.close();28})();29const { chromium } = require('playwright');30(async () => {31  const browser = await chromium.launch({ Using AI Code Generation
1const { chromium } = require('playwright');2const { setVideoRecordingOptions } = require('playwright-core/lib/server/deviceDescriptors');3(async () => {4  const browser = await chromium.launch();5  const context = await browser.newContext();6  setVideoRecordingOptions(context, { dir: './videos' });7  const page = await context.newPage();8  await page.screenshot({ path: `example.png` });9  await browser.close();10})();Using AI Code Generation
1const { chromium } = require("playwright");2(async () => {3  const browser = await chromium.launch();4  const context = await browser.newContext();5  await context.setVideoRecordingOptions({6    size: { width: 1280, height: 720 },7  });8  const page = await context.newPage();9  await page.screenshot({ path: "example.png" });10  await browser.close();11})();12const { chromium } = require("playwright");13(async () => {14  const browser = await chromium.launch();15  const context = await browser.newContext();16  await context.setVideoRecordingOptions({17    size: { width: 1280, height: 720 },18  });19  const page = await context.newPage();20  await page.screenshot({ path: "example.png" });21  await browser.close();22})();23const { chromium } = require("playwright");24(async () => {25  const browser = await chromium.launch();26  const context = await browser.newContext();27  await context.setVideoRecordingOptions({28    size: { width: 1280, height: 720 },29  });30  const page = await context.newPage();31  await page.screenshot({ path: "example.png" });32  await browser.close();33})();34const { chromium } = require("playwright");35(async () => {36  const browser = await chromium.launch();37  const context = await browser.newContext();38  await context.setVideoRecordingOptions({39    size: { width: 1280, height: 720 },40  });41  const page = await context.newPage();42  await page.screenshot({ path: "example.png" });43  await browser.close();44})();Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3    const browser = await chromium.launch({headless: false});4    const context = await browser.newContext({recordVideo: { dir: 'videos/' }});5    const page = await context.newPage();6    await page.screenshot({ path: 'example.png' });7    await browser.close();8})();9const { chromium } = require('playwright');10(async () => {11    const browser = await chromium.launch({headless: false});12    const context = await browser.newContext({recordVideo: { dir: 'videos/' }});13    const page = await context.newPage();14    await page.screenshot({ path: 'example.png' });15    await browser.close();16})();17const { chromium } = require('playwright');18(async () => {19    const browser = await chromium.launch({headless: false});20    const context = await browser.newContext({recordVideo: { dir: 'videos/' }});21    const page = await context.newPage();22    await page.screenshot({ path: 'example.png' });23    await browser.close();24})();25const { chromium } = require('playwright');26(async () => {27    const browser = await chromium.launch({headless: false});28    const context = await browser.newContext({recordVideo: { dir: 'videos/' }});29    const page = await context.newPage();30    await page.screenshot({ path: 'example.png' });31    await browser.close();32})();33const { chromium } = require('playwright');34(async () => {35    const browser = await chromium.launch({headless: false});36    const context = await browser.newContext({recordVideo: { dir: 'videos/' }});37    const page = await context.newPage();Using AI Code Generation
1const { chromium } = require('playwright');2const { setVideoRecordingOptions } = require('playwright/lib/server/chromium/crBrowser');3(async () => {4  setVideoRecordingOptions({5    size: { width: 1280, height: 720 },6  });7  const browser = await chromium.launch();8  const context = await browser.newContext();9  const page = await context.newPage();10  await page.screenshot({ path: 'example.png' });11  await browser.close();12})();Using AI Code Generation
1const { chromium } = require('playwright');2const browser = await chromium.launch();3const context = await browser.newContext({4  videoSize: {5  }6});7const page = await context.newPage();8const { chromium } = require('playwright');9const browser = await chromium.launch();10const context = await browser.newContext({11  videoSize: {12  }13});14const page = await context.newPage();15const { chromium } = require('playwright');16const browser = await chromium.launch();17const context = await browser.newContext({18  videoSize: {19  }20});21const page = await context.newPage();22const { chromium } = require('playwright');23const browser = await chromium.launch();24const context = await browser.newContext({25  videoSize: {26  }27});28const page = await context.newPage();29const { chromium } = require('playwright');30const browser = await chromium.launch();31const context = await browser.newContext({32  videoSize: {33  }34});35const page = await context.newPage();36const { chromium } = require('playwright');37const browser = await chromium.launch();38const context = await browser.newContext({39  videoSize: {40  }41});42const page = await context.newPage();Using AI Code Generation
1const { chromium } = require('playwright');2const { setVideoRecordingOptions } = require('playwright-core/lib/server/video/recorder');3(async () => {4  const browser = await chromium.launch();5  setVideoRecordingOptions(browser._defaultContext, { recordVideo: { dir: 'videos' } });6  const context = await browser.newContext();7  const page = await context.newPage();8  await page.screenshot({ path: `example.png` });9  await browser.close();10})();11- Constant Rate Factor (CRF) is a quality setting for the video encoding. The lower the value, the higher the quality of the video. Defaults toLambdaTest’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!!
