From 2e646ef92ab51a4d284e55f659d96abe2fa25a65 Mon Sep 17 00:00:00 2001 From: Dmitry Gozman Date: Thu, 16 Jun 2022 17:49:08 -0700 Subject: [PATCH] test: fix multiple focus highlights in ff codegen tests (#14937) --- tests/library/inspector/inspectorTest.ts | 28 ++++++++++++++---------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/tests/library/inspector/inspectorTest.ts b/tests/library/inspector/inspectorTest.ts index 2a3bfa92f1..2771c6d492 100644 --- a/tests/library/inspector/inspectorTest.ts +++ b/tests/library/inspector/inspectorTest.ts @@ -15,7 +15,7 @@ */ import { contextTest } from '../../config/browserTest'; -import type { Page } from 'playwright-core'; +import type { ConsoleMessage, Page } from 'playwright-core'; import * as path from 'path'; import type { Source } from '../../../packages/playwright-core/src/server/recorder/recorderTypes'; import type { CommonFixtures, TestChildProcess } from '../../config/commonFixtures'; @@ -131,21 +131,27 @@ class Recorder { } async waitForHighlight(action: () => Promise): Promise { - let callback; - const result = new Promise(f => callback = f); - const listener = async msg => { + // We get the last highlighted selector, because Firefox sometimes issues multiple + // focus events. + let generatedSelector: string | undefined; + let callback: Function | undefined; + + const listener = async (msg: ConsoleMessage) => { const prefix = 'Highlight updated for test: '; if (msg.text().startsWith(prefix)) { - this.page.off('console', listener); - callback(msg.text().substr(prefix.length)); + generatedSelector = msg.text().substr(prefix.length); + if (callback) { + this.page.off('console', listener); + callback(generatedSelector); + } } }; this.page.on('console', listener); - const [ generatedSelector ] = await Promise.all([ - result, - action() - ]); - return generatedSelector; + + await action(); + if (generatedSelector) + return generatedSelector; + return await new Promise(f => callback = f); } async waitForActionPerformed(): Promise<{ hovered: string | null, active: string | null }> {