import { chromium, test as base, BrowserContext, Page, Browser } from '@playwright/test'
import { Users } from '../../playwright.config'
import OnboardingFlow from '..//pageObjects/OnboardingPage/OnboardingFlow'
import DashboardSidebar from '..//pageObjects/DashboardPage/DashboardSidebar'
import SequencesDashboard from '..//pageObjects/DashboardPage/SequencesDashboard'
import LiveFeedDashboard from '../pageObjects/DashboardPage/LiveFeedDashboard'
import DashboardTabCanvas from '../pageObjects/DashboardPage/DashboardTabCanvas'
import DashboardComposeModal from '../pageObjects/DashboardPage/DashboardComposeModal'
import GmailInbox from '../pageObjects/GmailPage/GmailInbox'
import { faker } from '@faker-js/faker'
import SettingsDashboard from '../pageObjects/DashboardPage/SettingsDashboard'
import TasksDashboard from '../pageObjects/DashboardPage/TasksDashboard'
import GroupsDashboard from '../pageObjects/DashboardPage/GroupsDashboard'
import TemplatesDashboard from '../pageObjects/DashboardPage/TemplatesDashboard'
import MeetingTemplatesDashboard from '../pageObjects/DashboardPage/MeetingTemplatesDashboard'
import RulesDashboard from '../pageObjects/DashboardPage/RulesDashboard'
import DashboardComposeCall from '../pageObjects/DashboardPage/DashboardComposeCall'
import SalesforceLogin from '../pageObjects/SalesforcePage/SalesforceLogin'
import SalesforceIndividualContact from '../pageObjects/SalesforcePage/SalesforceIndividualContact'
import ReportsDashboard from '../pageObjects/DashboardPage/ReportsDashboard'
import OutboxDashboard from '../pageObjects/DashboardPage/OutboxDashboard'
import ContactsDashboard from '../pageObjects/DashboardPage/ContactsDashboard'
import BrandingDashboard from '../pageObjects/DashboardPage/BrandingDashboard'
import path from 'path'
const extensionPath = path.join(__dirname, '../../extension/')
type WithExtenstion = {
browser: Browser
context: BrowserContext
page: Page
} & TestConfig
type TestConfig = {
//pages
onboardingFlow: OnboardingFlow
dashBoardSidebar: DashboardSidebar
sequencesDashboard: SequencesDashboard
liveFeedDashboard: LiveFeedDashboard
dashboardTabCanvas: DashboardTabCanvas
dashboardComposeModal: DashboardComposeModal
gmailInbox: GmailInbox
settingsDashboard: SettingsDashboard
tasksDashboard: TasksDashboard
groupsDashboard: GroupsDashboard
templatesDashboard: TemplatesDashboard
meetingTemplates: MeetingTemplatesDashboard
rulesDashboard: RulesDashboard
dashboardComposeCall: DashboardComposeCall
salesforceLogin: SalesforceLogin
salesforceIndividualContact: SalesforceIndividualContact
reportsDashboard: ReportsDashboard
outboxDashboard: OutboxDashboard
contactsDashboard: ContactsDashboard
brandingDashboard: BrandingDashboard
//users
users: Users
userDataPath: string
}
export const test = base.extend<TestConfig>({
users: [
{
defaultUserEmail: '',
defaultUserPwd: '',
envUser1Email: '',
envUser1Pwd: '',
envUser2Email: '',
envUser2Pwd: '',
envUser3Email: '',
envUser3Pwd: '',
envUser4Email: '',
envUser4Pwd: '',
envUser5Email: '',
envUser5Pwd: '',
envUser6Email: '',
envUser6Pwd: '',
envUser7Email: '',
envUser7Pwd: '',
envUser8Email: '',
envUser8Pwd: '',
envUser9Email: '',
envUser9Pwd: '',
envUser10Email: '',
envUser10Pwd: '',
envUser11Email: '',
envUser11Pwd: '',
envUser12Email: '',
envUser12Pwd: '',
groupMember: '',
secretToken0: '',
secretToken1: '',
secretToken2: '',
secretToken3: '',
secretToken4: '',
secretToken5: '',
secretToken6: '',
secretToken7: '',
secretToken8: '',
secretToken9: '',
secretToken10: '',
secretToken11: '',
secretToken12: '',
sfUser1Email: '',
sfUser1Pwd: '',
sfUser2Email: '',
sfUser2Pwd: '',
sfUser3Email: '',
sfUser3Pwd: '',
delegatedUserEmail: '',
delegatedUserPwd: '',
delegatedSecret: '',
seqRegSuiteUserEmail: '',
seqRegSuiteUserPwd: '',
seqRegSuiteUserSecret: '',
shareUserEmail: '',
shareUserPwd: '',
sharedSecret: '',
sfUser4Email: '',
sfUser4Pwd: '',
sfUser5Email: '',
sfUser5Pwd: '',
sharedActivity1Email: '',
sharedActivity1Pwd: '',
sharedActivity1Secret: '',
phoneNumber: '',
calendarEnhancementEmail: '',
calendarEnhancementPwd: '',
calendarEnhancementSecret: '',
nonAdminSeqRecipientEmail: '',
adminSeqRecipientEmail: '',
},
{ option: true },
],
// Define a fixture. Note that it can use built-in fixture "page"
onboardingFlow: async ({ page }, use) => {
await use(new OnboardingFlow(page))
},
dashBoardSidebar: async ({ page }, use) => {
await use(new DashboardSidebar(page))
},
sequencesDashboard: async ({ page }, use) => {
await use(new SequencesDashboard(page))
},
liveFeedDashboard: async ({ page }, use) => {
await use(new LiveFeedDashboard(page))
},
dashboardTabCanvas: async ({ page }, use) => {
await use(new DashboardTabCanvas(page))
},
dashboardComposeModal: async ({ page }, use) => {
await use(new DashboardComposeModal(page))
},
gmailInbox: async ({ page }, use) => {
await use(new GmailInbox(page))
},
settingsDashboard: async ({ page }, use) => {
await use(new SettingsDashboard(page))
},
tasksDashboard: async ({ page }, use) => {
await use(new TasksDashboard(page))
},
groupsDashboard: async ({ page }, use) => {
await use(new GroupsDashboard(page))
},
templatesDashboard: async ({ page }, use) => {
await use(new TemplatesDashboard(page))
},
meetingTemplates: async ({ page }, use) => {
await use(new MeetingTemplatesDashboard(page))
},
rulesDashboard: async ({ page }, use) => {
await use(new RulesDashboard(page))
},
dashboardComposeCall: async ({ page }, use) => {
await use(new DashboardComposeCall(page))
},
salesforceLogin: async ({ page }, use) => {
await use(new SalesforceLogin(page))
},
salesforceIndividualContact: async ({ page }, use) => {
await use(new SalesforceIndividualContact(page))
},
reportsDashboard: async ({ page }, use) => {
await use(new ReportsDashboard(page))
},
outboxDashboard: async ({ page }, use) => {
await use(new OutboxDashboard(page))
},
contactsDashboard: async ({ page }, use) => {
await use(new ContactsDashboard(page))
},
brandingDashboard: async ({ page }, use) => {
await use(new BrandingDashboard(page))
}
})
export function createTestWithExtension(storagePath = 'user') {
return base.extend<WithExtenstion>({
browser: async (use) => {
const browser = await chromium.launch()
await use(browser)
// await browser.close() // Close the browser when the fixture is finished
},
context: async ({ browserName }, use) => {
const browserTypes = { chromium }
const launchOptions = {
headless: false,
args: [
`--disable-extensions-except=${extensionPath}`,
'--no-sandbox',
'--disable-setuid-sandbox',
'--disable-dev-shm-usage',
'--disable-accelerated-2d-canvas',
'--no-first-run',
'--no-zygote',
// '--single-process',
'--disable-gpu',
],
}
const context = await browserTypes[browserName].launchPersistentContext(
`/tmp/${storagePath}`,
launchOptions
)
const pages = await context.pages()
const blankPage = pages.find(p => p.url() === 'about:blank')
await blankPage?.close()
await use(context)
},
page: async ({ context }, use) => {
const page = await context.newPage()
await use(page)
},
users: [
{
defaultUserEmail: '',
defaultUserPwd: '',
envUser1Email: '',
envUser1Pwd: '',
envUser2Email: '',
envUser2Pwd: '',
envUser3Email: '',
envUser3Pwd: '',
envUser4Email: '',
envUser4Pwd: '',
envUser5Email: '',
envUser5Pwd: '',
envUser6Email: '',
envUser6Pwd: '',
envUser7Email: '',
envUser7Pwd: '',
envUser8Email: '',
envUser8Pwd: '',
envUser9Email: '',
envUser9Pwd: '',
envUser10Email: '',
envUser10Pwd: '',
envUser11Email: '',
envUser11Pwd: '',
envUser12Email: '',
envUser12Pwd: '',
groupMember: '',
secretToken0: '',
secretToken1: '',
secretToken2: '',
secretToken3: '',
secretToken4: '',
secretToken5: '',
secretToken6: '',
secretToken7: '',
secretToken8: '',
secretToken9: '',
secretToken10: '',
secretToken11: '',
secretToken12: '',
sfUser1Email: '',
sfUser1Pwd: '',
sfUser2Email: '',
sfUser2Pwd: '',
sfUser3Email: '',
sfUser3Pwd: '',
delegatedUserEmail: '',
delegatedUserPwd: '',
delegatedSecret: '',
seqRegSuiteUserEmail: '',
seqRegSuiteUserPwd: '',
seqRegSuiteUserSecret: '',
shareUserEmail: '',
shareUserPwd: '',
sharedSecret: '',
sfUser4Email: '',
sfUser4Pwd: '',
sfUser5Email: '',
sfUser5Pwd: '',
sharedActivity1Email: '',
sharedActivity1Pwd: '',
sharedActivity1Secret: '',
phoneNumber: '',
calendarEnhancementEmail: '',
calendarEnhancementPwd: '',
calendarEnhancementSecret: '',
nonAdminSeqRecipientEmail: '',
adminSeqRecipientEmail: '',
},
{ option: true },
],
// Define a fixture. Note that it can use built-in fixture "page"
onboardingFlow: async ({ page }, use) => {
await use(new OnboardingFlow(page))
},
dashBoardSidebar: async ({ page }, use) => {
await use(new DashboardSidebar(page))
},
sequencesDashboard: async ({ page }, use) => {
await use(new SequencesDashboard(page))
},
liveFeedDashboard: async ({ page }, use) => {
await use(new LiveFeedDashboard(page))
},
dashboardTabCanvas: async ({ page }, use) => {
await use(new DashboardTabCanvas(page))
},
dashboardComposeModal: async ({ page }, use) => {
await use(new DashboardComposeModal(page))
},
gmailInbox: async ({ page }, use) => {
await use(new GmailInbox(page))
},
settingsDashboard: async ({ page }, use) => {
await use(new SettingsDashboard(page))
},
tasksDashboard: async ({ page }, use) => {
await use(new TasksDashboard(page))
},
groupsDashboard: async ({ page }, use) => {
await use(new GroupsDashboard(page))
},
templatesDashboard: async ({ page }, use) => {
await use(new TemplatesDashboard(page))
},
meetingTemplates: async ({ page }, use) => {
await use(new MeetingTemplatesDashboard(page))
},
rulesDashboard: async ({ page }, use) => {
await use(new RulesDashboard(page))
},
dashboardComposeCall: async ({ page }, use) => {
await use(new DashboardComposeCall(page))
},
salesforceLogin: async ({ page }, use) => {
await use(new SalesforceLogin(page))
},
salesforceIndividualContact: async ({ page }, use) => {
await use(new SalesforceIndividualContact(page))
},
reportsDashboard: async ({ page }, use) => {
await use(new ReportsDashboard(page))
},
outboxDashboard: async ({ page }, use) => {
await use(new OutboxDashboard(page))
},
contactsDashboard: async ({ page }, use) => {
await use(new ContactsDashboard(page))
},
brandingDashboard: async ({ page }, use) => {
await use(new BrandingDashboard(page))
}
})
}
export { faker }
// playwright.config.ts
import { defineConfig } from '@playwright/test'
import dotenv from 'dotenv'
/**
* Read environment variables from file.
* https://github.com/motdotla/dotenv
*/
dotenv.config()
require('dotenv').config({ path: './.env' })
export type Users = {
defaultUserEmail: string | undefined
defaultUserPwd: string | undefined
envUser1Email: string | undefined
envUser1Pwd: string | undefined
envUser2Email: string | undefined
envUser2Pwd: string | undefined
envUser3Email: string | undefined
envUser3Pwd: string | undefined
envUser4Email: string | undefined
envUser4Pwd: string | undefined
envUser5Email: string | undefined
envUser5Pwd: string | undefined
envUser6Email: string | undefined
envUser6Pwd: string | undefined
envUser7Email: string | undefined
envUser7Pwd: string | undefined
envUser8Email: string | undefined
envUser8Pwd: string | undefined
envUser9Email: string | undefined
envUser9Pwd: string | undefined
envUser10Email: string | undefined
envUser10Pwd: string | undefined
envUser11Email: string | undefined
envUser11Pwd: string | undefined
envUser12Email: string | undefined
envUser12Pwd: string | undefined
groupMember: string | undefined
secretToken0: string | undefined
secretToken1: string | undefined
secretToken2: string | undefined
secretToken3: string | undefined
secretToken4: string | undefined
secretToken5: string | undefined
secretToken6: string | undefined
secretToken7: string | undefined
secretToken8: string | undefined
secretToken9: string | undefined
secretToken10: string | undefined
secretToken11: string | undefined
secretToken12: string | undefined
sfUser1Email: string | undefined
sfUser1Pwd: string | undefined
sfUser2Email: string | undefined
sfUser2Pwd: string | undefined
sfUser3Email: string | undefined
sfUser3Pwd: string | undefined
delegatedUserEmail: string | undefined
delegatedUserPwd: string | undefined
delegatedSecret: string | undefined
seqRegSuiteUserEmail: string | undefined
seqRegSuiteUserPwd: string | undefined
seqRegSuiteUserSecret: string | undefined
shareUserEmail: string | undefined
shareUserPwd: string | undefined
sharedSecret: string | undefined
sharedActivity1Email: string | undefined
sharedActivity1Pwd: string | undefined
sharedActivity1Secret: string | undefined
sfUser4Email: string | undefined
sfUser4Pwd: string | undefined
sfUser5Email: string | undefined
sfUser5Pwd: string | undefined
phoneNumber: string | undefined
calendarEnhancementEmail: string | undefined
calendarEnhancementPwd: string | undefined
calendarEnhancementSecret: string | undefined
nonAdminSeqRecipientEmail: string | undefined
adminSeqRecipientEmail: string | undefined
}
export type ProjectConfiguration = {
users: Users
userDataPath: string | undefined
}
/**
* See https://playwright.dev/docs/test-configuration.
*/
const config = defineConfig<ProjectConfiguration>({
/* Maximum time one test can run for. */
timeout: 180 * 1000,
expect: {
/**
* Maximum time expect() should wait for the condition to be met.
* For example in `await expect(locator).toHaveText();`
*/
timeout: 10000,
},
/* Run tests in files in parallel */
fullyParallel: true,
/* Fail the build on CI if you accidentally left test.only in the source code. */
forbidOnly: !!process.env.CI,
/* Retry on CI only */
retries: process.env.CI ? 0 : 0,
/* Opt out of parallel tests on CI. */
workers: process.env.CI ? 10 : 10,
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
reporter: process.env.ci ? 'allure-playwright' :
[ ['allure-playwright', { outputFolder: 'allure-results', detail: true }],
['line'], ['html'] ],
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
use: {
launchOptions:{
args : [
'--use-fake-ui-for-media-stream',
'--use-fake-device-for-media-stream',
'--use-file-for-fake-audio-capture=./data/audio.wav',
'--use-file-for-fake-video-capture=./data/akiyo_cif.y4m'
],
},
browserName: 'chromium',
// channel: 'chrome',
headless: false,
screenshot: 'only-on-failure',
video: 'on',
viewport: {
width: 1920,
height: 1080
},
locale: 'en-US',
/* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */
actionTimeout: 20000,
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
trace: 'retain-on-failure',
},
projects: [
{
name: 'staging',
use: {
baseURL: process.env.STG_BASE_URL,
viewport: { width: 1450, height: 795 },
userDataPath: process.env.PATH,
users: {
defaultUserEmail: process.env.DEFAULT_TEST_USER_EMAIL,
defaultUserPwd: process.env.DEFAULT_TEST_USER_PWD,
envUser1Email: process.env.AQA1_STG_USER_EMAIL,
envUser1Pwd: process.env.AQA1_STG_USER_PWD,
envUser2Email: process.env.AQA2_STG_USER_EMAIL,
envUser2Pwd: process.env.AQA2_STG_USER_PWD,
envUser3Email: process.env.AQA3_STG_USER_EMAIL,
envUser3Pwd: process.env.AQA3_STG_USER_PWD,
envUser4Email: process.env.AQA4_STG_USER_EMAIL,
envUser4Pwd: process.env.AQA4_STG_USER_PWD,
envUser5Email: process.env.AQA5_STG_USER_EMAIL,
envUser5Pwd: process.env.AQA5_STG_USER_PWD,
envUser6Email: process.env.AQA6_STG_USER_EMAIL,
envUser6Pwd: process.env.AQA6_STG_USER_PWD,
envUser7Email: process.env.GMAIL1_STG_USER_EMAIL,
envUser7Pwd: process.env.GMAIL1_STG_USER_PWD,
envUser8Email: process.env.GMAIL2_STG_USER_EMAIL,
envUser8Pwd: process.env.GMAIL2_STG_USER_PWD,
envUser9Email: process.env.GMAIL3_STG_USER_EMAIL,
envUser9Pwd: process.env.GMAIL3_STG_USER_PWD,
envUser10Email: process.env.GMAIL4_STG_USER_EMAIL,
envUser10Pwd: process.env.GMAIL4_STG_USER_PWD,
envUser11Email: process.env.GMAIL5_STG_USER_EMAIL,
envUser11Pwd: process.env.GMAIL5_STG_USER_PWD,
envUser12Email: process.env.GMAIL7_STG_USER_EMAIL,
envUser12Pwd: process.env.GMAIL7_STG_USER_PWD,
groupMember: process.env.STAGING_GROUP_MEMBER,
secretToken0: process.env.AQA_USER_SECRET,
secretToken1: process.env.AQA1_USER_SECRET,
secretToken2: process.env.AQA2_USER_SECRET,
secretToken3: process.env.AQA3_USER_SECRET,
secretToken4: process.env.AQA4_USER_SECRET,
secretToken5: process.env.AQA5_STG_USER_SECRET,
secretToken6: process.env.AQA6_STG_USER_SECRET,
secretToken7: process.env.MM_AUTOMATION_STG1_SECRET,
secretToken8: process.env.QA4_STG_USER_SECRET,
secretToken9: process.env.QA5_STG_USER_SECRET,
secretToken10: process.env.QA6_STG_USER_SECRET,
secretToken11: process.env.QA1_STG_USER_SECRET,
secretToken12: process.env.AQA3_STG_USER_SECRET,
sfUser1Email: process.env.SF1_USER_EMAIL,
sfUser1Pwd: process.env.SF1_USER_PWD,
sfUser2Email: process.env.SF2_USER_EMAIL,
sfUser2Pwd: process.env.SF2_USER_PWD,
sfUser3Email: process.env.SF3_STG_USER_EMAIL,
sfUser3Pwd: process.env.SF3_STG_USER_PWD,
sfUser4Email: process.env.SF4_USER_EMAIL,
sfUser4Pwd: process.env.SF4_USER_PWD,
sfUser5Email: process.env.SF5_USER_EMAIL,
sfUser5Pwd: process.env.SF5_USER_PWD,
delegatedUserEmail: process.env.DELEGATED_SEQ_STG_EMAIL,
delegatedUserPwd: process.env.DELEGATED_SEQ_STG_PWD,
delegatedSecret: process.env.DELEGATED_SEQ_STG_SECRET,
seqRegSuiteUserEmail: process.env.SEQ_REG_STG_USER_EMAIL,
seqRegSuiteUserPwd: process.env.SEQ_REG_STG_USER_PWD,
seqRegSuiteUserSecret: process.env.SEQ_REG_STG_USER_SECRET,
nonAdminSeqRecipientEmail: process.env.STG_NON_ADMIN_RECIPIENT_EMAIL,
adminSeqRecipientEmail: process.env.STG_ADMIN_RECIPIENT_EMAIL,
shareUserEmail: process.env.SHARED_SEQ_STG_EMAIL,
shareUserPwd: process.env.SHARED_SEQ_STG_PWD,
sharedSecret: process.env.SHARED_SEQ_STG_SECRET,
sharedActivity1Email: process.env.SHARED_ACTIVITY1_STG_EMAIL,
sharedActivity1Pwd: process.env.SHARED_ACTIVITY1_STG_PWD,
sharedActivity1Secret: process.env.SHARED_ACTIVITY1_STG_SECRET,
phoneNumber: process.env.QA1_STG_NUMBER,
calendarEnhancementEmail: process.env.GMAIL6_STG_USER_EMAIL,
calendarEnhancementPwd: process.env.GMAIL6_STG_USER_PWD,
calendarEnhancementSecret: process.env.QA2_STG_USER_SECRET
}
}
},
{
name: 'production',
use: {
baseURL: process.env.PROD_BASE_URL,
viewport: { width: 1450, height: 795 },
userDataPath: process.env.PATH,
users: {
defaultUserEmail: process.env.DEFAULT_TEST_USER_EMAIL,
defaultUserPwd: process.env.DEFAULT_TEST_USER_PWD,
envUser1Email: process.env.AQA5_PROD_USER_EMAIL,
envUser1Pwd: process.env.AQA5_PROD_USER_PWD,
envUser2Email: process.env.AQA6_PROD_USER_EMAIL,
envUser2Pwd: process.env.AQA6_PROD_USER_PWD,
envUser3Email: process.env.AQA7_PROD_USER_EMAIL,
envUser3Pwd: process.env.AQA7_PROD_USER_PWD,
envUser4Email: process.env.AQA8_PROD_USER_EMAIL,
envUser4Pwd: process.env.AQA8_PROD_USER_PWD,
envUser5Email: process.env.AQA3_PROD_USER_EMAIL,
envUser5Pwd: process.env.AQA3_PROD_USER_PWD,
envUser6Email: process.env.AQA4_PROD_USER_EMAIL,
envUser6Pwd: process.env.AQA4_PROD_USER_PWD,
envUser7Email: process.env.GMAIL1_PROD_USER_EMAIL,
envUser7Pwd: process.env.GMAIL1_PROD_USER_PWD,
envUser8Email: process.env.GMAIL2_PROD_USER_EMAIL,
envUser8Pwd: process.env.GMAIL2_PROD_USER_PWD,
envUser9Email: process.env.GMAIL3_PROD_USER_EMAIL,
envUser9Pwd: process.env.GMAIL3_PROD_USER_PWD,
envUser10Email: process.env.GMAIL4_PROD_USER_EMAIL,
envUser10Pwd: process.env.GMAIL4_PROD_USER_PWD,
envUser11Email: process.env.GMAIL5_PROD_USER_EMAIL,
envUser11Pwd: process.env.GMAIL5_PROD_USER_PWD,
envUser12Email: process.env.GMAIL7_PROD_USER_EMAIL,
envUser12Pwd: process.env.GMAIL7_PROD_USER_PWD,
groupMember: process.env.PRODUCTION_GROUP_MEMBER,
secretToken0: process.env.AQA_USER_SECRET,
secretToken1: process.env.AQA5_USER_SECRET,
secretToken2: process.env.AQA6_USER_SECRET,
secretToken3: process.env.AQA7_USER_SECRET,
secretToken4: process.env.AQA8_USER_SECRET,
secretToken5: process.env.AQA3_PROD_USER_SECRET,
secretToken6: process.env.AQA4_PROD_USER_SECRET,
secretToken7: process.env.MM_AUTOMATION_PROD1_SECRET,
secretToken8: process.env.QA1_PROD_USER_SECRET,
secretToken9: process.env.QA2_PROD_USER_SECRET,
secretToken10: process.env.QA3_PROD_USER_SECRET,
secretToken11: process.env.QA4_PROD_USER_SECRET,
secretToken12: process.env.QA6_PROD_USER_SECRET,
sfUser1Email: process.env.SF1_USER_EMAIL,
sfUser1Pwd: process.env.SF1_USER_PWD,
sfUser2Email: process.env.SF2_USER_EMAIL,
sfUser2Pwd: process.env.SF2_USER_PWD,
sfUser3Email: process.env.SF3_PROD_USER_EMAIL,
sfUser3Pwd: process.env.SF3_PROD_USER_PWD,
sfUser4Email: process.env.SF4_USER_EMAIL,
sfUser4Pwd: process.env.SF4_USER_PWD,
sfUser5Email: process.env.SF5_USER_EMAIL,
sfUser5Pwd: process.env.SF5_USER_PWD,
delegatedUserEmail: process.env.DELEGATED_SEQ_PROD_EMAIL,
delegatedUserPwd: process.env.DELEGATED_SEQ_PROD_PWD,
delegatedSecret: process.env.DELEGATED_SEQ_PROD_SECRET,
seqRegSuiteUserEmail: process.env.SEQ_REG_PROD_USER_EMAIL,
seqRegSuiteUserPwd: process.env.SEQ_REG_PROD_USER_PWD,
seqRegSuiteUserSecret: process.env.SEQ_REG_PROD_USER_SECRET,
nonAdminSeqRecipientEmail: process.env.PROD_NON_ADMIN_RECIPIENT_EMAIL,
adminSeqRecipientEmail: process.env.PROD_ADMIN_RECIPIENT_EMAIL,
shareUserEmail: process.env.SHARED_SEQ_PROD_EMAIL,
shareUserPwd: process.env.SHARED_SEQ_PROD_PWD,
sharedSecret: process.env.SHARED_SEQ_PROD_SECRET,
sharedActivity1Email: process.env.SHARED_ACTIVITY1_PROD_EMAIL,
sharedActivity1Pwd: process.env.SHARED_ACTIVITY1_PROD_PWD,
sharedActivity1Secret: process.env.SHARED_ACTIVITY1_PROD_SECRET,
phoneNumber: process.env.QA4_PROD_NUMBER,
calendarEnhancementEmail: process.env.GMAIL6_PROD_USER_EMAIL,
calendarEnhancementPwd: process.env.GMAIL6_PROD_USER_PWD,
calendarEnhancementSecret: process.env.QA5_PROD_USER_SECRET
}
}
}
]
})
export default config
Running tests in persistent context with preserved browser state, crashes when running more than one test in parallel worker execution.
System info
Source code
Link to the GitHub repository with the repro
[https://github.com/your_profile/playwright_issue_title]
or
Config file
Test file (self-contained)
Steps
Expected
[Describe expected behavior]
To use preserved state in persistent context
Actual
[Describe actual behavior]
Running tests in persistent context with preserved browser state, crashes when running more than one test in parallel worker execution.