diff --git a/src/lib/webpage-impact/README.md b/src/lib/webpage-impact/README.md index 808f9fc..7686a50 100644 --- a/src/lib/webpage-impact/README.md +++ b/src/lib/webpage-impact/README.md @@ -24,6 +24,7 @@ The follwing config parameters are optional: - `headers`: - `accept`: string https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept - `accept-encoding`: array of allowed encodings (a single encoding can also be passed as a string) https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding +- `username`: The plugin supports simple logins with username and password. Provide the username if the page you want to measure requires such a login. The password needs to be stored in a shell environment variable called `WI_PASSWORD`. Please note, that the login may fail nevertheless because the plugin expects a certain interface that may not be provided by your page. ### Returns diff --git a/src/lib/webpage-impact/index.ts b/src/lib/webpage-impact/index.ts index 6cc18c0..688be9c 100644 --- a/src/lib/webpage-impact/index.ts +++ b/src/lib/webpage-impact/index.ts @@ -24,6 +24,7 @@ type WebpageImpactOptions = { reload: boolean; cacheEnabled: boolean; scrollToBottom?: boolean; + username?: string; }; type ResourceBase = { @@ -176,6 +177,7 @@ const WebpageImpactUtils = () => { reload: false, cacheEnabled: false, scrollToBottom: config?.scrollToBottom, + username: config?.username, }); let reloadedResources: Resource[] | undefined; @@ -203,7 +205,7 @@ const WebpageImpactUtils = () => { const loadPageResources = async ( page: Page, url: string, - {reload, cacheEnabled, scrollToBottom}: WebpageImpactOptions + {reload, cacheEnabled, scrollToBottom, username}: WebpageImpactOptions ): Promise => { try { await page.setCacheEnabled(cacheEnabled); @@ -254,6 +256,20 @@ const WebpageImpactUtils = () => { if (!reload) { await page.goto(url, {waitUntil: 'networkidle0'}); + if (username !== undefined) { + const password = process.env.WI_PASSWORD; + if (password === undefined) { + throw new Error( + `${LOGGER_PREFIX}: Username but no password provided. Store password in environment variable 'WI_PASSWORD'.` + ); + } + await page.type('#username', username); + await page.type('#password', password); + + await page.click('#submit'); + + await page.waitForNavigation(); + } } else { await page.reload({waitUntil: 'networkidle0'}); }