UNPKG

@applitools/eyes-storybook

Version:
88 lines (74 loc) 2.68 kB
const {presult} = require('@applitools/functional-commons'); const browserLog = require('./browserLog'); const fakeIE = require('./fakeIE'); const {makeNetworkUtils} = require('./utils/pageNetworkUtils'); const utils = require('@applitools/utils'); function makeInitPage({iframeUrl, config, browser, logger, getTransitiongIntoIE, getRenderIE}) { const networkUtils = makeNetworkUtils({logger}); return async function initPage({pageId, pagePool}) { logger.log('initializing puppeteer page number ', pageId); const browserContext = await browser.createBrowserContext(); const page = await browserContext.newPage(); if (utils.general.getEnvValue('DEBUG_BROWSER_LOGS', 'boolean')) { page.on('console', async msg => { const args = await Promise.all(msg.args().map(arg => arg.jsonValue())); logger.console.log(`[DEBUG-BROWSER]`, ...args); }); } const {startInterception} = networkUtils.extend({page, pageId}); await startInterception({ timeout: config.browserRequestsTimeout, blockPatterns: config.networkBlockPatterns, browserHeadersOverride: config.browserHeadersOverride, cache: config.browserCacheRequests, }); if (config.viewportSize) { await page.setViewport(config.viewportSize); } if (config.showLogs) { browserLog({ page, onLog: text => { if (config.showBrowserLogs) { logger.log(`tab ${pageId}: ${text}`); } else if (text.match(/\[dom-snapshot\]/)) { logger.log(`tab ${pageId}: ${text}`); } }, }); } if (config.puppeteerExtraHTTPHeaders) { await page.setExtraHTTPHeaders(config.puppeteerExtraHTTPHeaders); } page.on('close', async () => { if (pagePool.isClosed) return; if (!getTransitiongIntoIE() && pagePool.isInPool(pageId)) { logger.log( `Puppeteer page closed [page ${pageId}] while still in page pool, creating a new one instead`, ); await pagePool.removeAndAddPage(pageId); } }); page.on('error', async err => { logger.log(`Puppeteer error for page ${pageId}:`, err); await pagePool.removeAndAddPage(pageId); }); if (getRenderIE()) { await fakeIE({logger, page, pageId}); } const [err] = await presult( page.goto(iframeUrl, { timeout: config.readStoriesTimeout, waitUntil: config.navigationWaitUntil, }), ); if (err) { logger.log(`error navigating to iframe.html`, err); if (pagePool.isInPool(pageId)) { throw err; } } return page; }; } module.exports = makeInitPage;