diff --git a/srcEarnProtocol/app.ts b/srcEarnProtocol/app.ts index 1154f29d..ad612eb4 100644 --- a/srcEarnProtocol/app.ts +++ b/srcEarnProtocol/app.ts @@ -1,6 +1,7 @@ import { expect } from '#earnProtocolFixtures'; import { step } from '#noWalletFixtures'; import { Page } from '@playwright/test'; +import { expectDefaultTimeout, openPageTimeout } from 'utils/config'; import { Banners } from './banners'; import { Modals } from './modals'; import { @@ -95,6 +96,19 @@ export class App { await this.page.pause(); } + @step + async openPage() { + // Quadratic backoff: 3*n² seconds per retry → 3s, 12s, 27s, 48s, 75s + const retryIntervals = [1, 2, 3, 4, 5].map((n) => 3_000 * n * n); + await expect(async () => { + await this.page.goto('', { timeout: expectDefaultTimeout * 3 }); + await this.waitForAppToBeStable(); + }).toPass({ + intervals: retryIntervals, + timeout: openPageTimeout, + }); + } + @step async waitForAppToBeStable() { await expect(async () => { diff --git a/srcEarnProtocol/fixtures/noWallet.ts b/srcEarnProtocol/fixtures/noWallet.ts index 0312a998..1a6960e8 100644 --- a/srcEarnProtocol/fixtures/noWallet.ts +++ b/srcEarnProtocol/fixtures/noWallet.ts @@ -1,6 +1,6 @@ import { test as base } from '@playwright/test'; import { App } from '../app'; -import { earnProtocolBaseUrl } from 'utils/config'; +import { earnProtocolBaseUrl, openPageTimeout } from 'utils/config'; type MyFixtures = { app: App; @@ -11,9 +11,6 @@ export const test = base.extend({ async ({ page, context }, use) => { const app = new App(page); - await app.page.goto(''); - - // Remove cookies banner await context.addCookies([ { name: 'analyticsCookie', @@ -22,28 +19,14 @@ export const test = base.extend({ url: earnProtocolBaseUrl, }, ]); - // await app.waitForAppToBeStable(); - // await app.page.reload(); - - // // - // console.log('=== earnProtocolBaseUrl: ', earnProtocolBaseUrl); - // // - // // Close 'Go to Beach Club' banner in staging - // // - This is working locally on prod too, but not in github runs - // if (earnProtocolBaseUrl.includes('staging')) { - // await app.page - // .locator('[class*="_floatingBannerContainer"]') - // .getByRole('button') - // .filter({ has: app.page.locator('svg[title="close"]') }) - // .click(); - // } + await app.openPage(); await use(app); await app.page.close(); }, - { timeout: 50000 }, + { timeout: openPageTimeout + 5_000 }, ], }); diff --git a/srcEarnProtocol/fixtures/withRealWalletArbitrum.ts b/srcEarnProtocol/fixtures/withRealWalletArbitrum.ts index 79e84eff..4a11f206 100644 --- a/srcEarnProtocol/fixtures/withRealWalletArbitrum.ts +++ b/srcEarnProtocol/fixtures/withRealWalletArbitrum.ts @@ -1,7 +1,7 @@ import { metaMaskFixtures } from '@synthetixio/synpress/playwright'; import arbitrumRealWalletSetup from '../../utils/synpress/real-wallet-setup/arbitrumRealWallet.setup'; import { App } from '../app'; -import { earnProtocolBaseUrl } from 'utils/config'; +import { earnProtocolBaseUrl, openPageTimeout } from 'utils/config'; export const test = metaMaskFixtures(arbitrumRealWalletSetup).extend<{ app: App; @@ -10,8 +10,6 @@ export const test = metaMaskFixtures(arbitrumRealWalletSetup).extend<{ async ({ page, context }, use) => { const app = new App(page); - await app.page.goto(''); - await context.addCookies([ { name: 'analyticsCookie', @@ -21,13 +19,13 @@ export const test = metaMaskFixtures(arbitrumRealWalletSetup).extend<{ }, ]); - await app.waitForAppToBeStable(); + await app.openPage(); await use(app); await app.page.close(); }, - { timeout: 50000 }, + { timeout: openPageTimeout + 5_000 }, ], }); diff --git a/srcEarnProtocol/fixtures/withRealWalletBase.ts b/srcEarnProtocol/fixtures/withRealWalletBase.ts index e915b9e2..d6797c2a 100644 --- a/srcEarnProtocol/fixtures/withRealWalletBase.ts +++ b/srcEarnProtocol/fixtures/withRealWalletBase.ts @@ -1,7 +1,7 @@ import { metaMaskFixtures } from '@synthetixio/synpress/playwright'; import baseRealWalletSetup from '../../utils/synpress/real-wallet-setup/baseRealWallet.setup'; import { App } from '../app'; -import { earnProtocolBaseUrl } from 'utils/config'; +import { earnProtocolBaseUrl, openPageTimeout } from 'utils/config'; export const test = metaMaskFixtures(baseRealWalletSetup).extend<{ app: App; @@ -10,8 +10,6 @@ export const test = metaMaskFixtures(baseRealWalletSetup).extend<{ async ({ page, context }, use) => { const app = new App(page); - await app.page.goto(''); - await context.addCookies([ { name: 'analyticsCookie', @@ -21,13 +19,13 @@ export const test = metaMaskFixtures(baseRealWalletSetup).extend<{ }, ]); - await app.waitForAppToBeStable(); + await app.openPage(); await use(app); await app.page.close(); }, - { timeout: 50000 }, + { timeout: openPageTimeout + 5_000 }, ], }); diff --git a/srcEarnProtocol/fixtures/withRealWalletHyperliquid.ts b/srcEarnProtocol/fixtures/withRealWalletHyperliquid.ts index b97f387b..6365dae4 100644 --- a/srcEarnProtocol/fixtures/withRealWalletHyperliquid.ts +++ b/srcEarnProtocol/fixtures/withRealWalletHyperliquid.ts @@ -1,7 +1,7 @@ import { metaMaskFixtures } from '@synthetixio/synpress/playwright'; import hyperliquidRealWalletSetup from '../../utils/synpress/real-wallet-setup/hyperliquidRealWallet.setup'; import { App } from '../app'; -import { earnProtocolBaseUrl } from 'utils/config'; +import { earnProtocolBaseUrl, openPageTimeout } from 'utils/config'; export const test = metaMaskFixtures(hyperliquidRealWalletSetup).extend<{ app: App; @@ -10,8 +10,6 @@ export const test = metaMaskFixtures(hyperliquidRealWalletSetup).extend<{ async ({ page, context }, use) => { const app = new App(page); - await app.page.goto(''); - await context.addCookies([ { name: 'analyticsCookie', @@ -21,13 +19,13 @@ export const test = metaMaskFixtures(hyperliquidRealWalletSetup).extend<{ }, ]); - await app.waitForAppToBeStable(); + await app.openPage(); await use(app); await app.page.close(); }, - { timeout: 50000 }, + { timeout: openPageTimeout + 5_000 }, ], }); diff --git a/srcEarnProtocol/fixtures/withRealWalletSonic.ts b/srcEarnProtocol/fixtures/withRealWalletSonic.ts index 150d99da..ff0d5642 100644 --- a/srcEarnProtocol/fixtures/withRealWalletSonic.ts +++ b/srcEarnProtocol/fixtures/withRealWalletSonic.ts @@ -1,7 +1,7 @@ import { metaMaskFixtures } from '@synthetixio/synpress/playwright'; import sonicRealWalletSetup from '../../utils/synpress/real-wallet-setup/sonicRealWallet.setup'; import { App } from '../app'; -import { earnProtocolBaseUrl } from 'utils/config'; +import { earnProtocolBaseUrl, openPageTimeout } from 'utils/config'; export const test = metaMaskFixtures(sonicRealWalletSetup).extend<{ app: App; @@ -10,8 +10,6 @@ export const test = metaMaskFixtures(sonicRealWalletSetup).extend<{ async ({ page, context }, use) => { const app = new App(page); - await app.page.goto(''); - await context.addCookies([ { name: 'analyticsCookie', @@ -21,13 +19,13 @@ export const test = metaMaskFixtures(sonicRealWalletSetup).extend<{ }, ]); - await app.waitForAppToBeStable(); + await app.openPage(); await use(app); await app.page.close(); }, - { timeout: 50000 }, + { timeout: openPageTimeout + 5_000 }, ], }); diff --git a/srcEarnProtocol/fixtures/withTestWalletArbitrum.ts b/srcEarnProtocol/fixtures/withTestWalletArbitrum.ts index 7e5c3fd5..f22c1c96 100644 --- a/srcEarnProtocol/fixtures/withTestWalletArbitrum.ts +++ b/srcEarnProtocol/fixtures/withTestWalletArbitrum.ts @@ -1,7 +1,7 @@ import { metaMaskFixtures } from '@synthetixio/synpress/playwright'; import arbitrumSetup from '../../utils/synpress/test-wallet-setup/arbitrum.setup'; import { App } from '../app'; -import { earnProtocolBaseUrl } from 'utils/config'; +import { earnProtocolBaseUrl, openPageTimeout } from 'utils/config'; export const test = metaMaskFixtures(arbitrumSetup).extend<{ app: App; @@ -10,8 +10,6 @@ export const test = metaMaskFixtures(arbitrumSetup).extend<{ async ({ page, context }, use) => { const app = new App(page); - await app.page.goto(''); - await context.addCookies([ { name: 'analyticsCookie', @@ -21,13 +19,13 @@ export const test = metaMaskFixtures(arbitrumSetup).extend<{ }, ]); - await app.waitForAppToBeStable(); + await app.openPage(); await use(app); await app.page.close(); }, - { timeout: 50000 }, + { timeout: openPageTimeout + 5_000 }, ], }); diff --git a/srcEarnProtocol/fixtures/withTestWalletBase.ts b/srcEarnProtocol/fixtures/withTestWalletBase.ts index dc5533bd..b840d8c3 100644 --- a/srcEarnProtocol/fixtures/withTestWalletBase.ts +++ b/srcEarnProtocol/fixtures/withTestWalletBase.ts @@ -1,7 +1,7 @@ import { metaMaskFixtures } from '@synthetixio/synpress/playwright'; import baseSetup from '../../utils/synpress/test-wallet-setup/base.setup'; import { App } from '../app'; -import { earnProtocolBaseUrl } from 'utils/config'; +import { earnProtocolBaseUrl, openPageTimeout } from 'utils/config'; export const test = metaMaskFixtures(baseSetup).extend<{ app: App; @@ -10,8 +10,6 @@ export const test = metaMaskFixtures(baseSetup).extend<{ async ({ page, context }, use) => { const app = new App(page); - await app.page.goto(''); - await context.addCookies([ { name: 'analyticsCookie', @@ -21,13 +19,13 @@ export const test = metaMaskFixtures(baseSetup).extend<{ }, ]); - await app.waitForAppToBeStable(); + await app.openPage(); await use(app); await app.page.close(); }, - { timeout: 50000 }, + { timeout: openPageTimeout + 5_000 }, ], }); diff --git a/utils/config.ts b/utils/config.ts index da4c135c..2079e7f5 100644 --- a/utils/config.ts +++ b/utils/config.ts @@ -27,6 +27,11 @@ export const extremelyLongTestTimeout: number = export const gigaTestTimeout: number = baseUrl.includes('localhost') || baseUrl.includes('3000.csb.app') ? 400_000 : 360_000; +export const openPageTimeout: number = + earnProtocolBaseUrl.includes('localhost') || earnProtocolBaseUrl.includes('3000.csb.app') + ? 400_000 + : 360_000; + export const positionTimeout: number = baseUrl.includes('localhost') || baseUrl.includes('3000.csb.app') ? 60_000 : 45_000;