From a9d1f183ed68dfacd9c6994ac2e941759e5fe729 Mon Sep 17 00:00:00 2001 From: yanguoyu <841185308@qq.com> Date: Wed, 24 Jul 2024 16:29:26 +0800 Subject: [PATCH] test: Test playright screen shot --- .github/workflows/playwright.yml | 2 +- package.json | 2 +- packages/e2e/__tests__/tests/index.test.ts | 18 +++++---- packages/e2e/global-setup.ts | 28 ++++++++++++++ packages/e2e/global-variable.ts | 45 ++++++++++++++++++++++ packages/e2e/playwright.config.ts | 3 +- 6 files changed, 87 insertions(+), 11 deletions(-) create mode 100644 packages/e2e/global-setup.ts create mode 100644 packages/e2e/global-variable.ts diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index eb6f7d3c3e..cad1df2174 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -25,5 +25,5 @@ jobs: if: always() with: name: playwright-report - path: playwright-report/ + path: packages/e2e/test-results retention-days: 30 diff --git a/package.json b/package.json index 693ee4716d..15e8d58ce9 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "package:e2e": "yarn build && ./scripts/copy-ui-files.sh", "package:test": "yarn build && ./scripts/copy-ui-files.sh && ./scripts/package-for-test.sh", "test": "cross-env NODE_OPTIONS=--openssl-legacy-provider lerna run --parallel --load-env-files=false test", - "test:e2e": "concurrently \"cross-env BROWSER=none yarn run start:ui\" \"wait-on -t 30000 http://127.0.0.1:3000 && cd packages/e2e && yarn test:e2e\"", + "test:e2e": "cd packages/e2e && yarn test:e2e", "test:ci": "yarn build:main && yarn test", "lint": "lerna run --stream lint", "postinstall": "husky install", diff --git a/packages/e2e/__tests__/tests/index.test.ts b/packages/e2e/__tests__/tests/index.test.ts index 82a1ef1e63..cef6f70c74 100644 --- a/packages/e2e/__tests__/tests/index.test.ts +++ b/packages/e2e/__tests__/tests/index.test.ts @@ -4,9 +4,13 @@ import {test, expect} from "@playwright/test"; let electronApp: ElectronApplication; - test.beforeAll(async () => { electronApp = await electron.launch({args: ["../../packages/neuron-wallet/dist/main.js"]}); + await new Promise((resolve) => { + electronApp.once("window", async (page) => { + resolve(page) + }); + }) electronApp.on("window", async (page) => { const filename = page.url()?.split("/").pop(); console.log(`Window opened: ${filename}`); @@ -20,12 +24,9 @@ test.beforeAll(async () => { }); }); -/* -test.afterAll(async () => { - await electronApp.close(); -}); -*/ - +test.afterAll(async() => { + await electronApp.close() +}) let page: Page; @@ -50,11 +51,12 @@ test("Launch Neuron", async () => { }); test("Create Wallet", async () => { + page = await electronApp.firstWindow(); let createWallet = await page.getByText('钱包 1').isVisible(); console.log("createWallet"+createWallet); if (!createWallet) { await page.screenshot({path: "./test-results/createWallet.png"}); - await page.getByLabel("导入助记词").click(); + await page.getByLabel("Import Wallet Seed").click(); await page.locator("div").filter({hasText: /^1$/}).getByRole("textbox").click(); await page.locator("div").filter({hasText: /^1$/}).getByRole("textbox").fill("verb"); await page.locator("div").filter({hasText: /^2$/}).getByRole("textbox").click(); diff --git a/packages/e2e/global-setup.ts b/packages/e2e/global-setup.ts new file mode 100644 index 0000000000..65388345c4 --- /dev/null +++ b/packages/e2e/global-setup.ts @@ -0,0 +1,28 @@ +import { concurrently } from 'concurrently' +import path from 'path' +const waitOn = require('wait-on'); + +async function globalSetup() { + const { commands } = concurrently( + [ + { + command: 'cross-env BROWSER=none yarn run start:ui', + name: 'start ui', + cwd: path.resolve(__dirname, '../../'), + }, + ], + ); + await waitOn({ + resources: [ + 'http://127.0.0.1:3000' + ], + timeout: 30_000, + }) + console.log('ui start success') + return async () => { + console.log('stop ui server') + await commands[0].kill() + } +} + +export default globalSetup; diff --git a/packages/e2e/global-variable.ts b/packages/e2e/global-variable.ts new file mode 100644 index 0000000000..65b5f239bf --- /dev/null +++ b/packages/e2e/global-variable.ts @@ -0,0 +1,45 @@ +import { test as baseTest } from '@playwright/test'; +import { concurrently, Command } from 'concurrently' +import path from 'path' +import { _electron as electron, ElectronApplication } from "playwright"; +const waitOn = require('wait-on'); + +export const test = baseTest.extend<{ + uiCommand: Command; + electronApp: ElectronApplication +}>({ + uiCommand: async ({}, use) => { + const { commands, result } = await concurrently( + [ + { + command: 'cross-env BROWSER=none yarn run start:ui', + name: 'start ui', + cwd: path.resolve(__dirname, '../../'), + }, + ], + ); + console.log(result) + await waitOn({ + resources: [ + 'http://127.0.0.1:3000' + ], + timeout: 30_000, + }) + await use(commands[0]) + }, + electronApp: async ({}, use) => { + const electronApp = await electron.launch({args: ["../../packages/neuron-wallet/dist/main.js"]}); + electronApp.on("window", async (page) => { + const filename = page.url()?.split("/").pop(); + console.log(`Window opened: ${filename}`); + + page.on("pageerror", (error) => { + console.error(error); + }); + page.on("console", (msg) => { + console.log(msg.text()); + }); + }); + await use(electronApp) + } +}); \ No newline at end of file diff --git a/packages/e2e/playwright.config.ts b/packages/e2e/playwright.config.ts index b7d888a7ac..e23b4d1a75 100644 --- a/packages/e2e/playwright.config.ts +++ b/packages/e2e/playwright.config.ts @@ -4,7 +4,8 @@ const config: PlaywrightTestConfig = { testDir: "./__tests__/tests/", maxFailures: 2, timeout: 180000, - retries: 1 + retries: 1, + globalSetup: require.resolve('./global-setup'), }; export default config;