forked from jsnbuchanan/crowd-funder-for-time-pwa
- Add better error handling and logging for gift recording flow - Add explicit navigation to contacts page before finding gift button - Add info icon click handling when needed - Add more comprehensive button detection with multiple selectors - Add debug logging for page state and navigation - Add screenshot capture on failures - Add retry logic with proper state verification - Fix linter errors in playwright config The changes help diagnose and handle various UI states that can occur during gift recording, making the tests more reliable especially on Linux.
127 lines
4.2 KiB
TypeScript
127 lines
4.2 KiB
TypeScript
import { defineConfig, devices } from "@playwright/test";
|
|
import { isLinuxEnvironment, getOSSpecificConfig } from './test-playwright/testUtils';
|
|
|
|
/**
|
|
* Read environment variables from file.
|
|
* https://github.com/motdotla/dotenv
|
|
*/
|
|
// import dotenv from 'dotenv';
|
|
// dotenv.config({ path: path.resolve(__dirname, '.env') });
|
|
|
|
/**
|
|
* See https://playwright.dev/docs/test-configuration.
|
|
*/
|
|
export default defineConfig({
|
|
testDir: "./test-playwright",
|
|
...getOSSpecificConfig(),
|
|
/* 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 ? 2 : 0,
|
|
/* Opt out of parallel tests on CI. */
|
|
workers: isLinuxEnvironment() ? 4 : undefined,
|
|
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
|
|
reporter: [
|
|
['list'],
|
|
['html', { open: 'never' }],
|
|
['json', { outputFile: 'test-results/test-results.json' }]
|
|
],
|
|
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
|
|
use: {
|
|
/* Base URL to use in actions like `await page.goto('/')`. */
|
|
baseURL: "http://localhost:8081",
|
|
|
|
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
|
|
trace: "retain-on-failure",
|
|
|
|
// Add request logging
|
|
logger: {
|
|
isEnabled: (name, severity) => severity === 'error' || name === 'api',
|
|
log: (name, severity, message, args) => console.log(`${severity}: ${message}`, args)
|
|
}
|
|
},
|
|
|
|
/* Configure projects for major browsers */
|
|
projects: [
|
|
{
|
|
name: 'chromium-serial',
|
|
testMatch: /.*\/(35-record-gift-from-image-share|40-add-contact)\.spec\.ts/,
|
|
use: {
|
|
...devices['Desktop Chrome'],
|
|
permissions: ["clipboard-read"],
|
|
},
|
|
workers: 1, // Force serial execution for problematic tests
|
|
},
|
|
{
|
|
name: 'firefox-serial',
|
|
testMatch: /.*\/(35-record-gift-from-image-share|40-add-contact)\.spec\.ts/,
|
|
use: { ...devices['Desktop Firefox'] },
|
|
workers: 1,
|
|
},
|
|
{
|
|
name: 'chromium',
|
|
testMatch: /^(?!.*\/(35-record-gift-from-image-share|40-add-contact)\.spec\.ts).+\.spec\.ts$/,
|
|
use: {
|
|
...devices['Desktop Chrome'],
|
|
permissions: ["clipboard-read"],
|
|
},
|
|
},
|
|
{
|
|
name: 'firefox',
|
|
testMatch: /^(?!.*\/(35-record-gift-from-image-share|40-add-contact)\.spec\.ts).+\.spec\.ts$/,
|
|
use: { ...devices['Desktop Firefox'] },
|
|
},
|
|
|
|
// {
|
|
// name: "webkit",
|
|
// use: { ...devices["Desktop Safari"] },
|
|
// },
|
|
|
|
// /* Test against mobile viewports. */
|
|
// {
|
|
// name: "Mobile Chrome",
|
|
// use: { ...devices["Pixel 5"] },
|
|
// },
|
|
// {
|
|
// name: "Mobile Safari",
|
|
// use: { ...devices["iPhone 12"] },
|
|
// },
|
|
|
|
/* Test against branded browsers. */
|
|
// {
|
|
// name: 'Microsoft Edge',
|
|
// use: { ...devices['Desktop Edge'], channel: 'msedge' },
|
|
// },
|
|
// {
|
|
// name: "Google Chrome",
|
|
// use: { ...devices["Desktop Chrome"], channel: "chrome" },
|
|
// },
|
|
],
|
|
|
|
/* Configure global timeout; default is 30000 milliseconds */
|
|
// the image upload will often not succeed at 5 seconds
|
|
timeout: 30000, // various tests fail at various times with 25000
|
|
|
|
/* Run your local dev server before starting the tests */
|
|
/**
|
|
* This could be an array of servers, meaning we could start the Endorser server as well:
|
|
* {
|
|
* command: "cd ../endorser-ch; NODE_ENV=test-local npm run dev",
|
|
* url: 'http://localhost:3000',
|
|
* reuseExistingServer: !process.env.CI,
|
|
* },
|
|
*
|
|
* But if we do then the testInfo.config.webServer is null and the API-setting test 00 fails.
|
|
* It is worth considering a change such that Time Safari's default Endorser API server is NOT set
|
|
* in the user's settings so that it can be blanked out and the default is used.
|
|
*/
|
|
webServer: {
|
|
command:
|
|
"VITE_APP_SERVER=http://localhost:8081 VITE_DEFAULT_ENDORSER_API_SERVER=http://localhost:3000 VITE_PASSKEYS_ENABLED=true npm run dev -- --port=8081",
|
|
url: "http://localhost:8081",
|
|
reuseExistingServer: !process.env.CI,
|
|
},
|
|
});
|