import * as base from "@playwright/test"; import path from "path"; import { chromium } from "@playwright/test" import dotenv from 'dotenv'; dotenv.config(); // LambdaTest capabilities const capabilities = { browserName: "Chrome", // Browsers allowed: `Chrome`, `MicrosoftEdge`, `pw-chromium`, `pw-firefox` and `pw-webkit` browserVersion: "latest", "LT:Options": { platform: "Windows 11", build: "Playwright SmartUI Build", name: "Playwright Compare Screenshots", user: process.env.LT_USERNAME, accessKey: process.env.LT_ACCESS_KEY, network: true, video: true, console: true, geoLocation: "" ,// country code can be fetched from https://www.lambdatest.com/capabilities-generator/ "smartUIProjectName": "Playwright-SmartUI-Project", }, }; // Patching the capabilities dynamically according to the project name. const modifyCapabilities = (configName, testName) => { let config = configName.split("@lambdatest")[0]; let [browserName, browserVersion, platform] = config.split(":"); capabilities.browserName = browserName ? browserName : capabilities.browserName; capabilities.browserVersion = browserVersion ? browserVersion : capabilities.browserVersion; capabilities["LT:Options"]["platform"] = platform ? platform : capabilities["LT:Options"]["platform"]; capabilities["LT:Options"]["name"] = testName; }; const getErrorMessage = (obj, keys) => keys.reduce( (obj, key) => (typeof obj == "object" ? obj[key] : undefined), obj ); const test = base.test.extend({ page: async ({ page, playwright }, use, testInfo) => { // Configure LambdaTest platform for cross-browser testing let fileName = testInfo.file.split(path.sep).pop(); if (testInfo.project.name.match(/lambdatest/)) { modifyCapabilities( testInfo.project.name, `${testInfo.title} - ${fileName}` ); const browser = await chromium.connect({ wsEndpoint: `wss://cdp.lambdatest.com/playwright?capabilities=${encodeURIComponent( JSON.stringify(capabilities) )}`, }); const ltPage = await browser.newPage(testInfo.project.use); await use(ltPage); await ltPage.close(); await browser.close(); } else { // Run tests in local in case of local config provided await use(page); } }, }); export default test;