@applitools/eyes-storybook
Version:
88 lines (74 loc) • 2.68 kB
JavaScript
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;