Skip to content

Migrate wrappers e2e tests from TestCafe to Playwright - #34757

Open
aleksei-semikozov wants to merge 3 commits into
DevExpress:mainfrom
aleksei-semikozov:playwright-wrappers-e2e-stage1
Open

Migrate wrappers e2e tests from TestCafe to Playwright#34757
aleksei-semikozov wants to merge 3 commits into
DevExpress:mainfrom
aleksei-semikozov:playwright-wrappers-e2e-stage1

Conversation

@aleksei-semikozov

Copy link
Copy Markdown
Contributor

No description provided.

@aleksei-semikozov aleksei-semikozov self-assigned this Aug 12, 2026
@aleksei-semikozov
aleksei-semikozov marked this pull request as ready for review August 12, 2026 16:55
@aleksei-semikozov
aleksei-semikozov requested a review from a team as a code owner August 12, 2026 16:55
Copilot AI lite review requested due to automatic review settings August 12, 2026 16:55

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR migrates the wrappers end-to-end (E2E) suite from TestCafe to Playwright, introducing Playwright-based specs plus a lightweight static server to run against prebuilt wrapper apps, and updating CI to execute the new runner.

Changes:

  • Replaced TestCafe *.test.js wrapper E2E tests with Playwright *.spec.ts tests and added Playwright fixtures/config.
  • Added a static server (serve.js) + Docker helper to run the suite in a CI-like environment.
  • Updated dependencies and CI workflow to run Playwright tests and publish Playwright artifacts on failure.

Reviewed changes

Copilot reviewed 32 out of 33 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
pnpm-workspace.yaml Adds @playwright/test to the workspace catalog.
pnpm-lock.yaml Locks @playwright/test (and Playwright) and removes TestCafe from the wrappers E2E dependency set.
e2e/wrappers/tests/textbox.test.js Removes the old TestCafe TextBox E2E test.
e2e/wrappers/tests/textbox.spec.ts Adds Playwright version of the TextBox E2E test.
e2e/wrappers/tests/select-box-nested-validator.test.js Removes the old TestCafe SelectBox/Validator E2E tests.
e2e/wrappers/tests/select-box-nested-validator.spec.ts Adds Playwright versions of the SelectBox/Validator E2E tests.
e2e/wrappers/tests/inputs-list-in-form.test.js Removes the old TestCafe inputs-in-form E2E test.
e2e/wrappers/tests/inputs-list-in-form.spec.ts Adds Playwright version of the inputs-in-form E2E test.
e2e/wrappers/tests/gantt-template-state-update.test.js Removes the old TestCafe Gantt E2E test.
e2e/wrappers/tests/gantt-template-state-update.spec.ts Adds Playwright version of the Gantt E2E test (React-only skip).
e2e/wrappers/tests/chat-template-rerender.test.js Removes the old TestCafe Chat E2E test.
e2e/wrappers/tests/chat-template-rerender.spec.ts Adds Playwright version of the Chat E2E test (React-only skip).
e2e/wrappers/tests/button.test.js Removes the old TestCafe Button E2E test.
e2e/wrappers/tests/button.spec.ts Adds Playwright version of the Button E2E test.
e2e/wrappers/test-helpers.js Removes TestCafe-specific helper utilities.
e2e/wrappers/serve.js Adds an Express static server used by Playwright webServer to serve built apps.
e2e/wrappers/runner.js Removes the custom TestCafe runner.
e2e/wrappers/README.md Adds documentation for running the new Playwright-based wrappers E2E suite.
e2e/wrappers/playwright.config.ts Adds Playwright config (framework ports, baseURL, webServer, CI reporter).
e2e/wrappers/package.json Replaces TestCafe runner scripts with Playwright scripts; adds @playwright/test + cross-env; removes TestCafe.
e2e/wrappers/fixtures.ts Adds a Playwright fixture to expose framework as a test option.
e2e/wrappers/docker/run.sh Adds a helper script to run wrappers E2E tests in a CI-like container.
e2e/wrappers/docker/Dockerfile Adds a container definition matching CI Node + Chrome versions.
e2e/wrappers/.gitignore Ignores Playwright output directories.
apps/vue/test.js Removes placeholder TestCafe playground test file.
apps/vue/runner.js Removes TestCafe runner for the Vue playground.
apps/vue/project.json Removes exclusions that referenced deleted TestCafe test file.
apps/vue/package.json Removes the Vue playground test script that ran TestCafe.
apps/react/test.js Removes placeholder TestCafe playground test file.
apps/react/runner.js Removes TestCafe runner for the React playground.
apps/react/project.json Removes exclusions that referenced deleted TestCafe test file.
apps/react/package.json Removes the React playground test script that ran TestCafe.
.github/workflows/wrapper_tests_e2e.yml Updates CI to rely on Playwright’s webServer and uploads Playwright artifacts on failure.
Files not reviewed (1)
  • pnpm-lock.yaml: Generated file

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread e2e/wrappers/serve.js
Comment thread e2e/wrappers/README.md
Comment thread e2e/wrappers/README.md Outdated
Comment thread e2e/wrappers/tests/inputs-list-in-form.spec.ts Outdated
Comment thread e2e/wrappers/docker/run.sh Outdated

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 32 out of 33 changed files in this pull request and generated no new comments.

Files not reviewed (1)
  • pnpm-lock.yaml: Generated file
Suppressed comments (4)

e2e/wrappers/docker/run.sh:6

  • This script’s prerequisites recommend pnpm install without --frozen-lockfile, which conflicts with the repo’s standard install instructions and can cause mismatched dependency trees vs CI. Use pnpm install --frozen-lockfile in the instructions.
#   pnpm install

e2e/wrappers/README.md:22

  • Repo setup guidance elsewhere requires using a frozen lockfile; using plain pnpm install here can lead to lockfile drift and CI-only failures. Update the command to use --frozen-lockfile.
pnpm install

e2e/wrappers/serve.js:16

  • --port is not validated. If it’s omitted or non-numeric, Number(argv.port) becomes NaN and Express will attempt to listen on an invalid port, producing a confusing runtime error. Validate the parsed port and exit with a clear message.
const argv = minimist(process.argv.slice(2));
const framework = argv.framework;
const port = Number(argv.port);
const distDir = DIST_DIRS[framework];

e2e/wrappers/tests/inputs-list-in-form.spec.ts:8

  • Test title has a grammatical error ("should adding and deleting"). Consider rephrasing to improve readability in test reports.
    test('Phone inputs should adding and deleting correctly', async ({ page }) => {

Copilot AI review requested due to automatic review settings August 12, 2026 17:15

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 32 out of 33 changed files in this pull request and generated no new comments.

Files not reviewed (1)
  • pnpm-lock.yaml: Generated file
Suppressed comments (2)

e2e/wrappers/README.md:18

  • The layout table is using || at the start of each row, which renders as an extra empty column in Markdown. Use single leading/trailing pipes so the table displays correctly.
| Path                   | Purpose                                                              |
|------------------------|----------------------------------------------------------------------|
| `builders/*`           | Host applications that render the examples for each framework        |
| `examples/*`           | Examples under test, one folder per scenario and framework           |
| `tests/*.spec.ts`      | Playwright specs                                                     |

e2e/wrappers/docker/run.sh:8

  • docker/run.sh mounts the repo (including node_modules) from the host into a linux/amd64 container. This can fail on macOS/Windows (or non-amd64 hosts) because native dependencies (e.g. esbuild) won’t match the container OS/arch. Please document this limitation so the script’s prerequisites are clear.
# The repository is mounted as is, so dependencies must be installed and
# the app under test built on the host first:
#

Copilot AI review requested due to automatic review settings August 13, 2026 13:58

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 32 out of 33 changed files in this pull request and generated no new comments.

Files not reviewed (1)
  • pnpm-lock.yaml: Generated file
Suppressed comments (2)

e2e/wrappers/README.md:39

  • The README states that dependencies are taken from the host, but the container is pinned to linux/amd64. If node_modules was installed on macOS/Windows (or non-amd64), platform-specific binaries (e.g., Playwright driver, esbuild) typically won’t run in the container. Clarify that the host install/build must be produced for linux/amd64 (or instruct how to install inside the container).
The container mirrors the OS, Node and Google Chrome the tests get on CI. Dependencies and
application builds are taken from the host:

e2e/wrappers/docker/run.sh:5

  • This script instructs installing dependencies on the host, but the container is forced to linux/amd64. If the host pnpm install ran on a different OS/arch, mounted node_modules can contain incompatible native binaries (Playwright driver, esbuild, etc.) and the run will fail. Add a note that the host install must be linux/amd64 (or that dependencies should be installed inside a linux/amd64 container/VM).
# The repository is mounted as is, so dependencies must be installed and
# the app under test built on the host first:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants