diff --git a/e2e/console/activity.spec.ts b/e2e/console/activity.spec.ts index e9ab7e685..922279806 100644 --- a/e2e/console/activity.spec.ts +++ b/e2e/console/activity.spec.ts @@ -375,6 +375,19 @@ test.describe("the Activity page", () => { }) => { const host = await startDaemon("worker", { driverScript: { ios: IOS } }); try { + let release = () => {}; + const gate = new Promise((resolve) => { + release = resolve; + }); + // why: the real daemon answers the page before the oldest late, as on a loaded runner (#1006); the + // test notes the row in view only after the end row has moved it. + await page.route( + (url) => url.pathname === "/v1/events" && url.searchParams.has("before"), + async (route: Route) => { + await gate; + await route.continue(); + }, + ); for (let index = 0; index < 6; index += 1) await lease(host, `console-e2e-scroll-${index}`); await openEvents(page, host); await expect.poll(() => rows(page).count()).toBeGreaterThan(5); @@ -383,11 +396,12 @@ test.describe("the Activity page", () => { await page.keyboard.press("End"); await expect.poll(() => feed(page).evaluate((box) => box.scrollTop)).toBeGreaterThan(0); - await expect - .poll(() => - feed(page).evaluate((box) => box.scrollHeight - box.scrollTop - box.clientHeight), - ) - .toBeLessThan(2); + const atEnd = () => + feed(page).evaluate((box) => box.scrollHeight - box.scrollTop - box.clientHeight); + await expect.poll(atEnd).toBeLessThan(2); + release(); + await expect(page.getByText("Start of the history (", { exact: false })).toBeVisible(); + await expect.poll(atEnd).toBeLessThan(2); const inView = await firstRowInView(page); await lease(host, "console-e2e-scroll-new"); const more = page.getByRole("button", { name: /^\d+ new events?$/ });