From 48dc466eea3d4a509a74693d86d2e29b284ba346 Mon Sep 17 00:00:00 2001 From: Paul Lewis Date: Wed, 1 Apr 2020 10:48:19 +0100 Subject: [PATCH] [e2e] Fix selection after delete Discovered a race condition when running e2e in SLOWMO. This CL fixes the race condition by ensuring that the old content is definitely grabbed before the backspace key is pressed. Change-Id: I6f39f18b8352ed03a1b6e4c067a2e526589b4ace Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2130789 Commit-Queue: Paul Lewis Reviewed-by: Jack Franklin --- test/e2e/elements/selection-after-delete.ts | 9 ++++----- test/e2e/helpers/elements-helpers.ts | 5 ++--- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/test/e2e/elements/selection-after-delete.ts b/test/e2e/elements/selection-after-delete.ts index 6f2ad90254..2e8e04fac5 100644 --- a/test/e2e/elements/selection-after-delete.ts +++ b/test/e2e/elements/selection-after-delete.ts @@ -5,14 +5,14 @@ import {describe, it} from 'mocha'; import {click, getBrowserAndPages, resetPages, resourcesPath, waitFor, waitForElementWithTextContent} from '../../shared/helper.js'; -import {assertContentOfSelectedElementsNode, expandSelectedNodeRecursively, waitForSelectedNodeChange} from '../helpers/elements-helpers.js'; +import {assertContentOfSelectedElementsNode, expandSelectedNodeRecursively, getContentOfSelectedNode, waitForSelectedNodeChange} from '../helpers/elements-helpers.js'; describe('The Elements tab', async () => { beforeEach(async () => { await resetPages(); }); - it('can delete stuff', async () => { + it('can delete elements in the tree', async () => { const {target, frontend} = getBrowserAndPages(); await target.goto(`${resourcesPath}/elements/selection-after-delete.html`); @@ -40,10 +40,9 @@ describe('The Elements tab', async () => { do { const nextVal = expected.shift() || ''; - // Start watching for the node change before hitting backspace. - const elementChanged = waitForSelectedNodeChange(); + const initialValue = await getContentOfSelectedNode(); await frontend.keyboard.press('Backspace'); - await elementChanged; + await waitForSelectedNodeChange(initialValue); await assertContentOfSelectedElementsNode(nextVal); } while (expected.length); diff --git a/test/e2e/helpers/elements-helpers.ts b/test/e2e/helpers/elements-helpers.ts index 13e1fc21dd..1887031cb6 100644 --- a/test/e2e/helpers/elements-helpers.ts +++ b/test/e2e/helpers/elements-helpers.ts @@ -24,16 +24,15 @@ export const getContentOfSelectedNode = async () => { return await selectedNode.evaluate(node => node.textContent); }; -export const waitForSelectedNodeChange = async (maxTotalTimeout = 1000) => { +export const waitForSelectedNodeChange = async (initialValue: string, maxTotalTimeout = 1000) => { if (maxTotalTimeout === 0) { maxTotalTimeout = Number.POSITIVE_INFINITY; } const start = performance.now(); - const initialNodeContent = await getContentOfSelectedNode(); do { const currentContent = await getContentOfSelectedNode(); - if (currentContent !== initialNodeContent) { + if (currentContent !== initialValue) { return currentContent; }