UNPKG

@wdio/devtools-service

Version:

A WebdriverIO service that allows you to run Chrome DevTools commands in your tests

67 lines (66 loc) 3.08 kB
import FRGatherer from 'lighthouse/lighthouse-core/fraggle-rock/gather/session.js'; import pageFunctions from 'lighthouse/lighthouse-core/lib/page-functions.js'; import NetworkRecorder from 'lighthouse/lighthouse-core/lib/network-recorder.js'; import InstallabilityErrors from 'lighthouse/lighthouse-core/gather/gatherers/installability-errors.js'; import WebAppManifest from 'lighthouse/lighthouse-core/gather/gatherers/web-app-manifest.js'; import LinkElements from 'lighthouse/lighthouse-core/gather/gatherers/link-elements.js'; import ViewportDimensions from 'lighthouse/lighthouse-core/gather/gatherers/viewport-dimensions.js'; import serviceWorkers from 'lighthouse/lighthouse-core/gather/driver/service-workers.js'; import collectMetaElements from '../scripts/collectMetaElements.js'; import { NETWORK_RECORDER_EVENTS } from '../constants.js'; export default class PWAGatherer { _session; _page; _driver; _frGatherer; _networkRecorder; _networkRecords = []; constructor(_session, _page, _driver) { this._session = _session; this._page = _page; this._driver = _driver; this._frGatherer = new FRGatherer(this._session); /** * setup network recorder */ this._networkRecorder = new NetworkRecorder(); NETWORK_RECORDER_EVENTS.forEach((method) => { this._session.on(method, (params) => this._networkRecorder.dispatch({ method, params })); }); /** * clean up network records after every page load */ this._page.on('load', () => { this._networkRecords = this._networkRecorder.getRawRecords(); delete this._networkRecorder; this._networkRecorder = new NetworkRecorder(); }); } async gatherData() { const pageUrl = await this._page?.url(); const passContext = { url: pageUrl, driver: this._driver }; const loadData = { networkRecords: this._networkRecords }; const linkElements = new LinkElements(); const viewportDimensions = new ViewportDimensions(); const { registrations } = await serviceWorkers.getServiceWorkerRegistrations(this._frGatherer); const { versions } = await serviceWorkers.getServiceWorkerVersions(this._frGatherer); return { URL: { requestedUrl: pageUrl, finalUrl: pageUrl }, WebAppManifest: await WebAppManifest.getWebAppManifest(this._frGatherer, pageUrl), InstallabilityErrors: await InstallabilityErrors.getInstallabilityErrors(this._frGatherer), MetaElements: await this._driver.evaluate(collectMetaElements, { args: [], useIsolation: true, deps: [pageFunctions.getElementsInDocument], }), ViewportDimensions: await viewportDimensions.afterPass(passContext), ServiceWorker: { versions, registrations }, LinkElements: await linkElements.afterPass(passContext, loadData) }; } }