diff --git a/test/integration/freetext_editor_spec.mjs b/test/integration/freetext_editor_spec.mjs index 192f77482..13afe708d 100644 --- a/test/integration/freetext_editor_spec.mjs +++ b/test/integration/freetext_editor_spec.mjs @@ -43,7 +43,9 @@ import { paste, pasteFromClipboard, scrollIntoView, + selectEditor, switchToEditor, + unselectEditor, waitForAnnotationEditorLayer, waitForAnnotationModeChanged, waitForEditorMovedInDOM, @@ -171,15 +173,7 @@ describe("FreeText Editor", () => { it("must copy/paste", async () => { // Run sequentially to avoid clipboard issues. for (const [browserName, page] of pages) { - const editorRect = await getRect(page, getEditorSelector(0)); - - // Select the editor created previously. - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2 - ); - - await waitForSelectedEditor(page, getEditorSelector(0)); + await selectEditor(page, getEditorSelector(0)); await copy(page); await paste(page); await page.waitForSelector(getEditorSelector(1), { @@ -243,14 +237,7 @@ describe("FreeText Editor", () => { await page.type(`${getEditorSelector(3)} .internal`, data); await commit(page); - // And select it again. - const editorRect = await getRect(page, getEditorSelector(3)); - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2 - ); - - await waitForSelectedEditor(page, getEditorSelector(3)); + await selectEditor(page, getEditorSelector(3)); await copy(page); await paste(page); await page.waitForSelector(getEditorSelector(4), { @@ -350,14 +337,7 @@ describe("FreeText Editor", () => { () => !document.querySelector(".selectedEditor") ); - const editorRect = await getRect(page, getEditorSelector(8)); - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2 - ); - - await waitForSelectedEditor(page, getEditorSelector(8)); - + await selectEditor(page, getEditorSelector(8)); expect(await getEditors(page, "selected")) .withContext(`In ${browserName}`) .toEqual([8]); @@ -397,16 +377,7 @@ describe("FreeText Editor", () => { await commit(page); if (i < 4) { - // And select it again. - const editorRect = await getRect(page, editorSelector); - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2, - { count: 2 } - ); - await page.waitForSelector( - `${editorSelector} .overlay:not(.enabled)` - ); + await selectEditor(page, editorSelector, /* count = */ 2); } } @@ -467,13 +438,7 @@ describe("FreeText Editor", () => { expect(text).withContext(`In ${browserName}`).toEqual("A"); // Add a new A. - const editorRect = await getRect(page, editorSelector); - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2, - { count: 2 } - ); - await page.waitForSelector(`${editorSelector} .overlay:not(.enabled)`); + await selectEditor(page, editorSelector, /* count = */ 2); await page.type(`${editorSelector} .internal`, "A"); await commit(page); @@ -904,12 +869,9 @@ describe("FreeText Editor", () => { const serialized = await getSerialized(page); expect(serialized).withContext(`In ${browserName}`).toEqual([]); - const editorSelector = getEditorSelector(0); - const editorRect = await getRect(page, editorSelector); - // Select the annotation we want to move. - await page.mouse.click(editorRect.x + 2, editorRect.y + 2); - await waitForSelectedEditor(page, editorSelector); + const editorSelector = getEditorSelector(0); + await selectEditor(page, editorSelector); await dragAndDrop(page, editorSelector, [[100, 100]]); await waitForSerialized(page, 1); @@ -942,15 +904,7 @@ describe("FreeText Editor", () => { expect(editorIds.length).withContext(`In ${browserName}`).toEqual(6); const editorRect = await getRect(page, getEditorSelector(0)); - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2, - { count: 2 } - ); - await page.waitForSelector( - `${getEditorSelector(0)} .overlay:not(.enabled)` - ); - + await selectEditor(page, getEditorSelector(0), /* count = */ 2); await kbGoToEnd(page); await page.waitForFunction( sel => @@ -1048,16 +1002,7 @@ describe("FreeText Editor", () => { }); const editorSelector = getEditorSelector(1); - const editorRect = await getRect(page, editorSelector); - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2, - { count: 2 } - ); - await page.waitForSelector( - `${editorSelector} .overlay:not(.enabled)` - ); - + await selectEditor(page, editorSelector, /* count = */ 2); await kbGoToEnd(page); await page.waitForFunction( sel => @@ -1134,12 +1079,7 @@ describe("FreeText Editor", () => { let editorIds = await getEditors(page, "freeText"); expect(editorIds.length).withContext(`In ${browserName}`).toEqual(6); - const editorRect = await getRect(page, getEditorSelector(3)); - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2 - ); - await waitForSelectedEditor(page, getEditorSelector(3)); + await selectEditor(page, getEditorSelector(3)); await page.keyboard.press("Backspace"); await page.waitForFunction( sel => !document.querySelector(sel), @@ -1199,13 +1139,7 @@ describe("FreeText Editor", () => { const editorIds = await getEditors(page, "freeText"); expect(editorIds.length).withContext(`In ${browserName}`).toEqual(6); - const editorRect = await getRect(page, getEditorSelector(1)); - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2 - ); - await waitForSelectedEditor(page, getEditorSelector(1)); - + await selectEditor(page, getEditorSelector(1)); await copy(page); await paste(page); await page.waitForSelector(getEditorSelector(6), { @@ -1859,17 +1793,17 @@ describe("FreeText Editor", () => { const rect = await getRect(page, ".annotationEditorLayer"); const data = "Hello PDF.js World !!"; - const selectorEditor = getEditorSelector(0); + const editorSelector = getEditorSelector(0); await page.mouse.click(rect.x + 200, rect.y + 200); - await page.waitForSelector(selectorEditor, { + await page.waitForSelector(editorSelector, { visible: true, }); - await page.type(`${selectorEditor} .internal`, data); + await page.type(`${editorSelector} .internal`, data); await commit(page); const [pageX, pageY] = await getFirstSerialized(page, x => x.rect); - await moveEditor(page, selectorEditor, 20, () => + await moveEditor(page, editorSelector, 20, () => page.keyboard.press("ArrowRight") ); @@ -1881,7 +1815,7 @@ describe("FreeText Editor", () => { .withContext(`In ${browserName}`) .toEqual(Math.round(pageY)); - await moveEditor(page, selectorEditor, 20, () => + await moveEditor(page, editorSelector, 20, () => page.keyboard.press("ArrowDown") ); @@ -1893,7 +1827,7 @@ describe("FreeText Editor", () => { .withContext(`In ${browserName}`) .toEqual(Math.round(pageY - 20)); - await moveEditor(page, selectorEditor, 2, () => kbBigMoveLeft(page)); + await moveEditor(page, editorSelector, 2, () => kbBigMoveLeft(page)); [newX, newY] = await getFirstSerialized(page, x => x.rect); expect(Math.round(newX)) @@ -1903,7 +1837,7 @@ describe("FreeText Editor", () => { .withContext(`In ${browserName}`) .toEqual(Math.round(pageY - 20)); - await moveEditor(page, selectorEditor, 2, () => kbBigMoveUp(page)); + await moveEditor(page, editorSelector, 2, () => kbBigMoveUp(page)); [newX, newY] = await getFirstSerialized(page, x => x.rect); expect(Math.round(newX)) @@ -1928,8 +1862,8 @@ describe("FreeText Editor", () => { ); const pageWidth = page2X - page1X; - const selectorEditor = getEditorSelector(0); - await moveEditor(page, selectorEditor, 5, () => + const editorSelector = getEditorSelector(0); + await moveEditor(page, editorSelector, 5, () => page.keyboard.press("ArrowRight") ); @@ -1953,40 +1887,40 @@ describe("FreeText Editor", () => { const rect = await getRect(page, ".annotationEditorLayer"); const data = "Hello PDF.js World !!"; - let selectorEditor = getEditorSelector(1); + let editorSelector = getEditorSelector(1); await page.mouse.click(rect.x + 100, rect.y + 100); - await page.waitForSelector(selectorEditor, { + await page.waitForSelector(editorSelector, { visible: true, }); - await page.type(`${selectorEditor} .internal`, data); + await page.type(`${editorSelector} .internal`, data); await commit(page); const [pageX, pageY] = await getFirstSerialized(page, x => x.rect); await clearAll(page); - selectorEditor = getEditorSelector(2); + editorSelector = getEditorSelector(2); await page.mouse.click(rect.x + 100, rect.y + 100); - await page.waitForSelector(selectorEditor, { + await page.waitForSelector(editorSelector, { visible: true, }); - await moveEditor(page, selectorEditor, 20, () => + await moveEditor(page, editorSelector, 20, () => page.keyboard.press("ArrowRight") ); - await moveEditor(page, selectorEditor, 2, () => kbBigMoveDown(page)); + await moveEditor(page, editorSelector, 2, () => kbBigMoveDown(page)); - await moveEditor(page, selectorEditor, 20, () => + await moveEditor(page, editorSelector, 20, () => page.keyboard.press("ArrowLeft") ); - await moveEditor(page, selectorEditor, 2, () => kbBigMoveUp(page)); + await moveEditor(page, editorSelector, 2, () => kbBigMoveUp(page)); - await moveEditor(page, selectorEditor, 2, () => kbBigMoveRight(page)); + await moveEditor(page, editorSelector, 2, () => kbBigMoveRight(page)); - await moveEditor(page, selectorEditor, 2, () => kbBigMoveLeft(page)); + await moveEditor(page, editorSelector, 2, () => kbBigMoveLeft(page)); - await page.type(`${selectorEditor} .internal`, data); + await page.type(`${editorSelector} .internal`, data); await commit(page); const [newX, newY] = await getFirstSerialized(page, x => x.rect); @@ -2106,12 +2040,7 @@ describe("FreeText Editor", () => { await commit(page); // Select the second editor. - rect = await getRect(page, getEditorSelector(1)); - await page.mouse.click( - rect.x + 0.5 * rect.width, - rect.y + 0.5 * rect.height - ); - await waitForSelectedEditor(page, getEditorSelector(1)); + await selectEditor(page, getEditorSelector(1)); const pos = n => page.evaluate(sel => { @@ -2130,9 +2059,9 @@ describe("FreeText Editor", () => { .toEqual(1); const { y: y0, height } = await getRect(page, getEditorSelector(0)); - const selectorEditor = getEditorSelector(1); - while ((await getRect(page, selectorEditor)).y > y0 - height) { - await moveEditor(page, selectorEditor, 1, () => kbBigMoveUp(page)); + const editorSelector = getEditorSelector(1); + while ((await getRect(page, editorSelector)).y > y0 - height) { + await moveEditor(page, editorSelector, 1, () => kbBigMoveUp(page)); } // The editor must be moved in the DOM and potentially the focus @@ -2287,26 +2216,20 @@ describe("FreeText Editor", () => { const page1Selector = `.page[data-page-number = "1"] > .annotationEditorLayer.freetextEditing`; let rect = await getRect(page, page1Selector); - const selectorEditor = getEditorSelector(0); + const editorSelector = getEditorSelector(0); await page.mouse.click(rect.x + 10, rect.y + 10); - await page.waitForSelector(selectorEditor, { + await page.waitForSelector(editorSelector, { visible: true, }); - await page.type(`${selectorEditor} .internal`, "Hello"); - await cancelFocusIn(page, selectorEditor); + await page.type(`${editorSelector} .internal`, "Hello"); + await cancelFocusIn(page, editorSelector); await commit(page); // Unselect. - await page.keyboard.press("Escape"); - await waitForUnselectedEditor(page, selectorEditor); - - const editorRect = await getRect(page, selectorEditor); + await unselectEditor(page, editorSelector); // Select the editor created previously. - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2 - ); + await selectEditor(page, editorSelector); // Go to the last page. await scrollIntoView(page, `.page[data-page-number = "14"]`); @@ -2339,15 +2262,7 @@ describe("FreeText Editor", () => { await page.waitForSelector(getEditorSelector(0), { visible: true, }); - - rect = await getRect(page, getEditorSelector(0)); - await page.mouse.click( - rect.x + rect.width / 2, - rect.y + rect.height / 2 - ); - - await waitForSelectedEditor(page, getEditorSelector(0)); - + await selectEditor(page, getEditorSelector(0)); const content = await page.$eval(getEditorSelector(0), el => el.innerText.trimEnd() ); @@ -2375,26 +2290,20 @@ describe("FreeText Editor", () => { const page1Selector = `.page[data-page-number = "1"] > .annotationEditorLayer.freetextEditing`; const rect = await getRect(page, page1Selector); - const selectorEditor = getEditorSelector(0); + const editorSelector = getEditorSelector(0); await page.mouse.click(rect.x + 10, rect.y + 10); - await page.waitForSelector(selectorEditor, { + await page.waitForSelector(editorSelector, { visible: true, }); - await page.type(`${selectorEditor} .internal`, "Hello"); - await cancelFocusIn(page, selectorEditor); + await page.type(`${editorSelector} .internal`, "Hello"); + await cancelFocusIn(page, editorSelector); await commit(page); // Unselect. - await page.keyboard.press("Escape"); - await waitForUnselectedEditor(page, selectorEditor); - - const editorRect = await getRect(page, selectorEditor); + await unselectEditor(page, editorSelector); // Select the editor created previously. - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2 - ); + await selectEditor(page, editorSelector); // Go to the last page. await scrollIntoView(page, `.page[data-page-number = "14"]`); @@ -2538,18 +2447,18 @@ describe("FreeText Editor", () => { await page.focus("#editorFreeTextButton"); await page.keyboard.press("Enter"); - let selectorEditor = getEditorSelector(0); - await page.waitForSelector(selectorEditor, { + let editorSelector = getEditorSelector(0); + await page.waitForSelector(editorSelector, { visible: true, }); - await moveEditor(page, selectorEditor, 5, () => kbBigMoveUp(page)); + await moveEditor(page, editorSelector, 5, () => kbBigMoveUp(page)); const data = "Hello PDF.js World !!"; - await page.type(`${selectorEditor} .internal`, data); + await page.type(`${editorSelector} .internal`, data); await commit(page); - let content = await page.$eval(selectorEditor, el => + let content = await page.$eval(editorSelector, el => el.innerText.trimEnd() ); @@ -2560,19 +2469,18 @@ describe("FreeText Editor", () => { await page.focus("#editorFreeTextButton"); await page.keyboard.press(" "); - selectorEditor = getEditorSelector(1); - await page.waitForSelector(selectorEditor, { + editorSelector = getEditorSelector(1); + await page.waitForSelector(editorSelector, { visible: true, }); - await moveEditor(page, selectorEditor, 5, () => kbBigMoveDown(page)); + await moveEditor(page, editorSelector, 5, () => kbBigMoveDown(page)); - await page.type(`${selectorEditor} .internal`, data); + await page.type(`${editorSelector} .internal`, data); await commit(page); // Unselect. - await page.keyboard.press("Escape"); - await waitForUnselectedEditor(page, selectorEditor); + await unselectEditor(page, editorSelector); content = await page.$eval(getEditorSelector(1), el => el.innerText.trimEnd() @@ -2587,20 +2495,19 @@ describe("FreeText Editor", () => { await Promise.all( pages.map(async ([browserName, page]) => { await page.keyboard.press("Enter"); - let selectorEditor = getEditorSelector(2); - await page.waitForSelector(selectorEditor, { + let editorSelector = getEditorSelector(2); + await page.waitForSelector(editorSelector, { visible: true, }); - await moveEditor(page, selectorEditor, 10, () => kbBigMoveLeft(page)); + await moveEditor(page, editorSelector, 10, () => kbBigMoveLeft(page)); const data = "Hello PDF.js World !!"; - await page.type(`${selectorEditor} .internal`, data); + await page.type(`${editorSelector} .internal`, data); await commit(page); // Unselect. - await page.keyboard.press("Escape"); - await waitForUnselectedEditor(page, selectorEditor); + await unselectEditor(page, editorSelector); let content = await page.$eval(getEditorSelector(2), el => el.innerText.trimEnd() @@ -2609,23 +2516,22 @@ describe("FreeText Editor", () => { expect(content).withContext(`In ${browserName}`).toEqual(data); await page.keyboard.press(" "); - selectorEditor = getEditorSelector(3); - await page.waitForSelector(selectorEditor, { + editorSelector = getEditorSelector(3); + await page.waitForSelector(editorSelector, { visible: true, }); - await moveEditor(page, selectorEditor, 10, () => + await moveEditor(page, editorSelector, 10, () => kbBigMoveRight(page) ); - await page.type(`${selectorEditor} .internal`, data); + await page.type(`${editorSelector} .internal`, data); await commit(page); // Unselect. - await page.keyboard.press("Escape"); - await waitForUnselectedEditor(page, selectorEditor); + await unselectEditor(page, editorSelector); - content = await page.$eval(selectorEditor, el => + content = await page.$eval(editorSelector, el => el.innerText.trimEnd() ); @@ -2769,12 +2675,7 @@ describe("FreeText Editor", () => { } // Select the editor created previously. - const editorRect = await getRect(page, getEditorSelector(0)); - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2 - ); - await waitForSelectedEditor(page, getEditorSelector(0)); + await selectEditor(page, getEditorSelector(0)); await selectAll(page); @@ -3137,13 +3038,7 @@ describe("FreeText Editor", () => { const getText = edSelector => page.$eval(`${edSelector} .internal`, el => el.innerText.trimEnd()); - const editorRect = await getRect(page, editorSelector); - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2, - { count: 2 } - ); - await page.waitForSelector(`${editorSelector} .overlay:not(.enabled)`); + await selectEditor(page, editorSelector, /* count = */ 2); const select = position => page.evaluate( @@ -3254,15 +3149,7 @@ describe("FreeText Editor", () => { const editorSelector = getEditorSelector(0); const editorRect = await getRect(page, editorSelector); - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2, - { count: 2 } - ); - await page.waitForSelector( - `${editorSelector} .overlay:not(.enabled)` - ); - + await selectEditor(page, editorSelector, /* count = */ 2); await kbGoToEnd(page); await page.waitForFunction( sel => diff --git a/test/integration/highlight_editor_spec.mjs b/test/integration/highlight_editor_spec.mjs index 06e1d44e5..182755090 100644 --- a/test/integration/highlight_editor_spec.mjs +++ b/test/integration/highlight_editor_spec.mjs @@ -33,12 +33,12 @@ import { scrollIntoView, setCaretAt, switchToEditor, + unselectEditor, waitAndClick, waitForAnnotationModeChanged, waitForSelectedEditor, waitForSerialized, waitForTimeout, - waitForUnselectedEditor, } from "./test_utils.mjs"; import { fileURLToPath } from "url"; import fs from "fs"; @@ -1044,8 +1044,7 @@ describe("Highlight Editor", () => { const y = rect.y + rect.height / 2; await page.mouse.click(x, y, { count: 2, delay: 100 }); await page.waitForSelector(`${getEditorSelector(0)}`); - await page.keyboard.press("Escape"); - await waitForUnselectedEditor(page, getEditorSelector(0)); + await unselectEditor(page, getEditorSelector(0)); await setCaretAt( page, @@ -1795,8 +1794,7 @@ describe("Highlight Editor", () => { await page.mouse.click(x, y, { count: 2, delay: 100 }); await page.waitForSelector(editorSelector); await waitForSerialized(page, 1); - await page.keyboard.press("Escape"); - await waitForUnselectedEditor(page, editorSelector); + await unselectEditor(page, editorSelector); const clickHandle = await waitForPointerUp(page); y = rect.y - rect.height; @@ -1866,8 +1864,7 @@ describe("Highlight Editor", () => { await page.mouse.click(x, y, { count: 3, delay: 100 }); await page.waitForSelector(editorSelector); await waitForSerialized(page, 1); - await page.keyboard.press("Escape"); - await waitForUnselectedEditor(page, editorSelector); + await unselectEditor(page, editorSelector); const clickHandle = await waitForPointerUp(page); y = rect.y - 3 * rect.height; diff --git a/test/integration/ink_editor_spec.mjs b/test/integration/ink_editor_spec.mjs index 672f8ae21..a79098f7b 100644 --- a/test/integration/ink_editor_spec.mjs +++ b/test/integration/ink_editor_spec.mjs @@ -29,6 +29,7 @@ import { kbUndo, loadAndWait, scrollIntoView, + selectEditor, switchToEditor, waitForAnnotationModeChanged, waitForNoElement, @@ -719,11 +720,7 @@ describe("Ink Editor", () => { const pdfjsA = getEditorSelector(0); const editorRect = await getRect(page, pdfjsA); - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2 - ); - await waitForSelectedEditor(page, pdfjsA); + await selectEditor(page, pdfjsA); const red = "#ff0000"; page.evaluate(value => { @@ -815,11 +812,8 @@ describe("Ink Editor", () => { const serialized = await getSerialized(page); expect(serialized).withContext(`In ${browserName}`).toEqual([]); - const editorRect = await getRect(page, edgeB); - // Select the annotation we want to move. - await page.mouse.click(editorRect.x + 2, editorRect.y + 2); - await waitForSelectedEditor(page, edgeB); + await selectEditor(page, edgeB); await dragAndDrop(page, edgeB, [[100, 100]]); await waitForSerialized(page, 1); @@ -1067,12 +1061,7 @@ describe("Ink Editor", () => { await page.waitForSelector("#editorUndoBar", { hidden: true }); editorSelector = getEditorSelector(0); - const editorRect = await getRect(page, editorSelector); - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2 - ); - await waitForSelectedEditor(page, editorSelector); + await selectEditor(page, editorSelector); await dragAndDrop(page, editorSelector, [[30, 30]], /* steps = */ 10); const finalRect = await getRect(page, `${pageOneSelector} svg`); diff --git a/test/integration/stamp_editor_spec.mjs b/test/integration/stamp_editor_spec.mjs index edb01595e..7118534c9 100644 --- a/test/integration/stamp_editor_spec.mjs +++ b/test/integration/stamp_editor_spec.mjs @@ -38,8 +38,10 @@ import { paste, pasteFromClipboard, scrollIntoView, + selectEditor, serializeBitmapDimensions, switchToEditor, + unselectEditor, waitForAnnotationEditorLayer, waitForAnnotationModeChanged, waitForEntryInStorage, @@ -47,7 +49,6 @@ import { waitForSerialized, waitForStorageEntries, waitForTimeout, - waitForUnselectedEditor, } from "./test_utils.mjs"; import { fileURLToPath } from "url"; import fs from "fs"; @@ -524,9 +525,7 @@ describe("Stamp Editor", () => { await copyImage(page, "../images/firefox_logo.png", 0); const editorSelector = getEditorSelector(0); - - await page.click(editorSelector); - await waitForSelectedEditor(page, editorSelector); + await selectEditor(page, editorSelector); await page.waitForSelector( `${editorSelector} .resizer.topLeft[tabindex="-1"]` @@ -1057,8 +1056,7 @@ describe("Stamp Editor", () => { .toEqual("Review alt text"); // Unselect and select the editor and check that the badge is visible. - await page.keyboard.press("Escape"); - await waitForUnselectedEditor(page, editorSelector); + await unselectEditor(page, editorSelector); await page.waitForSelector(".editToolbar", { visible: false }); await page.waitForSelector(".noAltTextBadge", { visible: true }); @@ -1107,8 +1105,7 @@ describe("Stamp Editor", () => { .toEqual("Missing alt text"); // Unselect and select the editor and check that the badge is visible. - await page.keyboard.press("Escape"); - await waitForUnselectedEditor(page, editorSelector); + await unselectEditor(page, editorSelector); await page.waitForSelector(".editToolbar", { visible: false }); await page.waitForSelector(".noAltTextBadge", { visible: true }); await page.evaluate(() => { @@ -1494,11 +1491,8 @@ describe("Stamp Editor", () => { const serialized = await getSerialized(page); expect(serialized).withContext(`In ${browserName}`).toEqual([]); - const editorRect = await getRect(page, editorSelector); - // Select the annotation we want to move. - await page.mouse.click(editorRect.x + 2, editorRect.y + 2); - await waitForSelectedEditor(page, editorSelector); + await selectEditor(page, editorSelector); await dragAndDrop(page, editorSelector, [[100, 100]]); await waitForSerialized(page, 1); diff --git a/test/integration/test_utils.mjs b/test/integration/test_utils.mjs index 2b868ca89..ace187ddd 100644 --- a/test/integration/test_utils.mjs +++ b/test/integration/test_utils.mjs @@ -347,10 +347,25 @@ async function applyFunctionToEditor(page, editorId, func) { ); } +async function selectEditor(page, selector, count = 1) { + const editorRect = await getRect(page, selector); + await page.mouse.click( + editorRect.x + editorRect.width / 2, + editorRect.y + editorRect.height / 2, + { count } + ); + await waitForSelectedEditor(page, selector); +} + async function waitForSelectedEditor(page, selector) { return page.waitForSelector(`${selector}.selectedEditor`); } +async function unselectEditor(page, selector) { + await page.keyboard.press("Escape"); + await waitForUnselectedEditor(page, selector); +} + async function waitForUnselectedEditor(page, selector) { return page.waitForSelector(`${selector}:not(.selectedEditor)`); } @@ -868,9 +883,11 @@ export { paste, pasteFromClipboard, scrollIntoView, + selectEditor, serializeBitmapDimensions, setCaretAt, switchToEditor, + unselectEditor, waitAndClick, waitForAnnotationEditorLayer, waitForAnnotationModeChanged,