Bump @playwright/test from 1.63.0 to 1.64.0 in the playwright group across 1 directory (#190)

* Bump @playwright/test

Bumps the playwright group with 1 update in the / directory: [@playwright/test](https://github.com/microsoft/playwright).


Updates `@playwright/test` from 1.63.0 to 1.64.0
- [Release notes](https://github.com/microsoft/playwright/releases)
- [Commits](https://github.com/microsoft/playwright/compare/v1.63.0...v1.64.0)

---
updated-dependencies:
- dependency-name: "@playwright/test"
  dependency-version: 1.64.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: playwright
...

Signed-off-by: dependabot[bot] <support@github.com>

* E2E: abort the stubbed reconnect navigation instead of answering 204

Chromium 156 (Playwright 1.64) reports a navigation that ends in a 204 as a
finished request that commits nothing, where Chromium 155 reported it as
failed (net::ERR_ABORTED). Playwright's click waits for the navigation it
started to commit or fail, so with 1.64 the click never returned and the
test timed out reading "" off a closing page. An abort is reported as a
failure by every Chromium and keeps the document just the same.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* E2E: touch beside the open drawer, after it has stopped sliding

The drawer-open pull touched the middle of the rows (x~196) right after
`inert` came off, at the start of the drawer's 200ms slide. Once the 256px
drawer has arrived, that point is the drawer, not the backdrop, so the
hit-test only passed while it beat the transition; slower CI runners lost
that race on every branch from 2026-10-16. Wait for the drawer to rest,
then touch the backdrop strip to its right, and pull at the same point
once it is closed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Paul Lützner <karatektus@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
authored and GitHub committed 2026-10-17 13:54:34 +02:00
1 parent 208a6a26fc
commit 6292ce2cda
4 files changed
+61 -22

No files matched your search

+12 -12
View File
@@ -6,7 +6,7 @@
"": {
"name": "plmail-e2e",
"devDependencies": {
"@playwright/test": "^1.63.0",
"@playwright/test": "^1.64.0",
"@types/node": "^26.6.5",
"typescript": "^7.0.2"
},
@@ -15,13 +15,13 @@
}
},
"node_modules/@playwright/test": {
"version": "1.63.0",
"resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.63.0.tgz",
"integrity": "sha512-oxMK4vllB9RK5NQ2l1pq1IfOf2AvnEuj/vYGDj0H2nMtmtZpKtCwt/l00GEO6xjGfpBNAvjovvYdCm50dRQkpQ==",
"version": "1.64.0",
"resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.64.0.tgz",
"integrity": "sha512-oTN9FNYuN6bqQMwiho6jJKLCG2/QOYCixGXuCjRmzOq23eODeukuY2XiAVoVpAECbuezMt1MHQjAiQxK8F+Y+g==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"playwright": "1.63.0"
"playwright": "1.64.0"
},
"bin": {
"playwright": "cli.js"
@@ -381,13 +381,13 @@
}
},
"node_modules/playwright": {
"version": "1.63.0",
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.63.0.tgz",
"integrity": "sha512-+7ziBLidS4NaNCdt57SUDT+wYmmd5fmiQejUic/kb+YsYSCPyOOE9sebzMjNmQrsnNpDJqd4WHvV/8lfKfUDUg==",
"version": "1.64.0",
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.64.0.tgz",
"integrity": "sha512-kVzTnYFYEyQ9RGzBjNCd2+yEqWmVbxl3AHPynv3qQ6JTjv4a+kwRcnqQwIpuP3NnrnIrE/Q6wWAIAvMfIE2/Yg==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"playwright-core": "1.63.0"
"playwright-core": "1.64.0"
},
"bin": {
"playwright": "cli.js"
@@ -397,9 +397,9 @@
}
},
"node_modules/playwright-core": {
"version": "1.63.0",
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.63.0.tgz",
"integrity": "sha512-rYCsBF/M5HjUch52bbtVONEFjv6Xu8sm8h72dNlR5bzIE1fvC/bxgspzkjSfU+MweEMmPM8KJebG6nnyxo5mCg==",
"version": "1.64.0",
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.64.0.tgz",
"integrity": "sha512-T9r+MZkTECl2+oUcZ26YgZzTrYidTsIhYYkJix+6iDOymOb1FB2RLLSOxRGnZGv5DStt+aduIVbt+E8WygXYpg==",
"dev": true,
"license": "Apache-2.0",
"bin": {
+1 -1
View File
@@ -25,7 +25,7 @@
"node": ">=18"
},
"devDependencies": {
"@playwright/test": "^1.63.0",
"@playwright/test": "^1.64.0",
"@types/node": "^26.6.5",
"typescript": "^7.0.2"
}
+20 -6
View File
@@ -236,13 +236,27 @@ test.describe("health repair feedback", () => {
`WHERE email = '${ACCOUNT}' AND ${OWNED_BY_THIS_WORKER}"`,
);
// 204, so the browser keeps the current document and the pending state
// stays on screen to be looked at. Leaving the request hanging instead
// tears the document down mid-navigation, and every assertion below
// then reads an empty string off a page that no longer exists — which
// is what this looked like before, and looked like a broken controller.
// Aborted, so the browser keeps the current document and the pending
// state stays on screen to be looked at. The navigation has to END,
// though, one way or the other: `link.click()` does not return until
// Playwright has seen the navigation it started either commit or fail.
//
// This used to be `route.fulfill({ status: 204 })`, which keeps the
// document just as well and, up to Chromium 155, was reported as a
// failed request (net::ERR_ABORTED) — the "fail" Playwright waits for.
// Chromium 156 (Playwright 1.64) reports the same 204 as a FINISHED
// request that commits nothing, so neither ending ever arrives, the
// click sits in "waiting for scheduled navigations to finish" until the
// test timeout closes the page, and the assertion below reads "" off
// a page that is shutting down. That looked like the document being
// torn down mid-navigation, and like a broken controller; it was
// neither, the controller had done its job 30ms after the press.
//
// An abort is reported as a failure by every Chromium, so the click
// returns straight away. Leaving the request hanging instead is no
// better than the 204: the click waits on it for the same reason.
await page.route("**/settings/health/reconnect/*", (route) =>
route.fulfill({ status: 204 }),
route.abort("aborted"),
);
await page.goto("/settings?section=health");
+28 -3
View File
@@ -159,7 +159,31 @@ test.describe("pull to refresh on a phone", () => {
// list never sees the touch at all. That is what the browser does, and it
// is recorded here: the open-surface check in the gesture module is covered
// by its node-side spec, not by this one.
const start = await rowsStart(page);
//
// "Where the drawer is open" means beside the drawer, not under it. The
// drawer is w-64 (256px) of Pixel 5's 393, and the middle of the rows is
// x≈196 — inside the drawer once it has arrived. This used to touch that
// middle straight after `inert` came off, which is the START of a 200ms
// slide, so the hit-test found the backdrop only while the drawer was
// still mostly off-screen. A slower runner reached it later, found the
// drawer, and the test failed with "drawer" (on CI from 2026-10-16, on
// every branch). So: wait until the drawer has stopped moving, then
// touch the strip of backdrop to its right, which is the drawer-open
// touch that can actually reach the list's part of the screen.
const drawer = page.locator("#sidebar-drawer");
await expect.poll(() => drawer.evaluate((el) => el.getBoundingClientRect().left)).toBe(0);
const drawerBox = (await drawer.boundingBox())!;
const rowsBox = (await page.locator(ROWS).boundingBox())!;
const besideDrawer = drawerBox.x + drawerBox.width;
const start = {
x: (besideDrawer + rowsBox.x + rowsBox.width) / 2,
y: (await rowsStart(page)).y,
};
expect(start.x, "the rows reach past the open drawer").toBeGreaterThan(besideDrawer);
const hit = await page.evaluate(({ x, y }) => {
const element = document.elementFromPoint(x, y);
@@ -180,8 +204,9 @@ test.describe("pull to refresh on a phone", () => {
await page.keyboard.press("Escape");
await expect(page.locator("#sidebar-drawer")).toHaveAttribute("inert", "");
const again = await rowsStart(page);
const second = await Finger.down(page, again.x, again.y);
// The same point as the first pull, so the only thing that changed
// between the two is the drawer.
const second = await Finger.down(page, start.x, start.y);
await second.move(0, PULL_PAST);
await second.up();