From 0d54e8e0dedf4bfcaf7aa7c72e447368dd072728 Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Thu, 1 Aug 2024 12:51:00 -0700 Subject: [PATCH] Do not use pw:api in runner code --- packages/playwright/src/index.ts | 1 + packages/playwright/src/worker/testInfo.ts | 7 +++++-- tests/playwright-test/playwright.trace.spec.ts | 18 ------------------ 3 files changed, 6 insertions(+), 20 deletions(-) diff --git a/packages/playwright/src/index.ts b/packages/playwright/src/index.ts index 9a159c984a..6dbf290d66 100644 --- a/packages/playwright/src/index.ts +++ b/packages/playwright/src/index.ts @@ -261,6 +261,7 @@ const playwrightFixtures: Fixtures = ({ title: renderApiCall(apiName, params), apiName, params, + canNestByTime: true, }); userData.userObject = step; out.stepId = step.stepId; diff --git a/packages/playwright/src/worker/testInfo.ts b/packages/playwright/src/worker/testInfo.ts index e55619e9c6..bca8e8d96b 100644 --- a/packages/playwright/src/worker/testInfo.ts +++ b/packages/playwright/src/worker/testInfo.ts @@ -33,7 +33,7 @@ export interface TestStepInternal { complete(result: { error?: Error, attachments?: Attachment[] }): void; stepId: string; title: string; - category: 'hook' | 'fixture' | 'test.step' | 'expect' | 'pw:api' | string; + category: 'hook' | 'fixture' | 'test.step' | 'expect' | 'attach' | string; location?: Location; boxedStack?: StackFrame[]; steps: TestStepInternal[]; @@ -44,6 +44,9 @@ export interface TestStepInternal { infectParentStepsWithError?: boolean; box?: boolean; isStage?: boolean; + // TODO: this сould be decided based on the category, but pw:api + // is from a different abstraction layer. + canNestByTime?: boolean; } export type TestStage = { @@ -252,7 +255,7 @@ export class TestInfoImpl implements TestInfo { parentStep = this._findLastStageStep(); } else { parentStep = zones.zoneData('stepZone'); - if (!parentStep && data.category === 'pw:api') { + if (!parentStep && data.canNestByTime) { // API steps (but not test.step calls) can be nested by time, instead of by stack. // However, do not nest chains of route.continue by checking the title. parentStep = this._findLastNonFinishedStep(step => step.title !== data.title); diff --git a/tests/playwright-test/playwright.trace.spec.ts b/tests/playwright-test/playwright.trace.spec.ts index 7433d74466..642a3555ca 100644 --- a/tests/playwright-test/playwright.trace.spec.ts +++ b/tests/playwright-test/playwright.trace.spec.ts @@ -1179,24 +1179,6 @@ test('should record trace for manually created context in a failed test', async expect(trace.events).toContainEqual(expect.objectContaining({ type: 'console', text: 'from the page' })); }); -test('expect during fetch', async ({ page, server }) => { - server.setRoute('/index', (req, res) => { - console.log('index'); - res.writeHead(200, { 'Content-Type': 'text/html' }); - res.end(`
Hello!
`); - }); - server.setRoute('/hang', async (req, res) => { - console.log('Hanging request'); - }); - await page.route('**/api', async route => { - const response = await route.fetch({ url: server.PREFIX + '/hang' }); - await route.fulfill({ response }); - }); - await page.goto(server.PREFIX + '/index'); - await expect(page.getByText('Hello!')).toBeVisible(); - await page.unrouteAll({ behavior: 'ignoreErrors' }); -}); - test('should not nest top level expect into unfinished api calls ', { annotation: { type: 'issue', description: 'https://github.com/microsoft/playwright/issues/31959' } }, async ({ runInlineTest, server }) => {