diff --git a/package.json b/package.json index c95f5b5..e127e71 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lambdatest/smartui-cli", - "version": "4.1.32", + "version": "4.1.33", "description": "A command line interface (CLI) to run SmartUI tests on LambdaTest", "files": [ "dist/**/*" diff --git a/src/lib/schemaValidation.ts b/src/lib/schemaValidation.ts index f545901..10c7973 100644 --- a/src/lib/schemaValidation.ts +++ b/src/lib/schemaValidation.ts @@ -342,6 +342,18 @@ const WebStaticConfigSchema: JSONSchemaType = { enum: ['load', 'domcontentloaded'], errorMessage: "pageEvent can be load, domcontentloaded" }, + requestHeaders: { + type: "array", + items: { + type: "object", + minProperties: 1, + additionalProperties: { type: "string" } + }, + uniqueItems: true, + errorMessage: { + uniqueItems: "Invalid config; duplicates in requestHeaders" + } + }, }, required: ["name", "url"], additionalProperties: false diff --git a/src/lib/screenshot.ts b/src/lib/screenshot.ts index 1ac7cf3..6c785ed 100644 --- a/src/lib/screenshot.ts +++ b/src/lib/screenshot.ts @@ -44,6 +44,26 @@ async function captureScreenshotsForConfig( const browser = browsers[browserName]; context = await browser?.newContext(contextOptions); page = await context?.newPage(); + const headersObject: Record = {}; + if (ctx.config.requestHeaders && Array.isArray(ctx.config.requestHeaders)) { + ctx.config.requestHeaders.forEach((headerObj) => { + Object.entries(headerObj).forEach(([key, value]) => { + headersObject[key] = value; + }); + }); + } + if (urlConfig.requestHeaders && Array.isArray(urlConfig.requestHeaders)) { + urlConfig.requestHeaders.forEach((headerObj) => { + Object.entries(headerObj).forEach(([key, value]) => { + headersObject[key] = value; + }); + }); + } + + ctx.log.debug(`Combined headers: ${JSON.stringify(headersObject)}`); + if (Object.keys(headersObject).length > 0) { + await page.setExtraHTTPHeaders(headersObject); + } await page?.goto(url.trim(), pageOptions); await executeDocumentScripts(ctx, page, "afterNavigation", afterNavigationScript)