forked from microsoft/fluentui
-
Notifications
You must be signed in to change notification settings - Fork 0
/
visitPage.ts
56 lines (44 loc) · 1.57 KB
/
visitPage.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import type { Browser } from 'puppeteer';
import { visitUrl } from '@fluentui/scripts-puppeteer';
import { PROVIDER_ID } from './constants';
import * as React from 'react';
import { containsAriaDescriptionWarning } from './helpers';
class RenderError extends Error {
public name = 'RangeError';
}
export async function visitPage(browser: Browser, url: string) {
const page = await browser.newPage();
await page.setRequestInterception(true);
let error: Error | undefined;
page.on('console', message => {
if (message.type() === 'error') {
const messageContent = message.text();
// Ignoring 'aria-description' warning from react 17 as it's a valid prop
// https://github.com/facebook/react/issues/21035
if (containsAriaDescriptionWarning(messageContent) && React.version.startsWith('17')) {
return;
}
// Ignoring network errors as we have an interceptor that prevents loading everything except our JS bundle
if (!messageContent.includes('net::ERR_FAILED')) {
error = new RenderError(messageContent);
}
}
});
page.on('request', request => {
// Our interceptor allows only our HTML and JS output
if (request.url() === url || request.url().endsWith('/out-esm.js')) {
return request.continue();
}
return request.abort();
});
page.on('pageerror', err => {
error = err;
});
await visitUrl(page, url);
// @ts-expect-error - https://github.com/puppeteer/puppeteer/issues/9582
await page.waitForSelector(`#${PROVIDER_ID}`);
await page.close();
if (error) {
throw error;
}
}