Merge pull request #20864 from calixteman/fix_intermittent_reorg

Try to fix few intermittents bug in reorganize_pages_spec integration tests
This commit is contained in:
Tim van der Meij 2026-03-17 20:16:56 +01:00 committed by GitHub
commit 18a2f60469
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 65 additions and 28 deletions

View File

@ -260,7 +260,10 @@ describe("Reorganize Pages View", () => {
await waitForThumbnailVisible(page, 1);
const rect2 = await getRect(page, getThumbnailSelector(2));
const rect4 = await getRect(page, getThumbnailSelector(4));
await page.click(`.thumbnail:has(${getThumbnailSelector(1)}) input`);
await waitAndClick(
page,
`.thumbnail:has(${getThumbnailSelector(1)}) input`
);
const handlePagesEdited = await waitForPagesEdited(page);
await dragAndDrop(
@ -288,10 +291,11 @@ describe("Reorganize Pages View", () => {
const rect1 = await getRect(page, getThumbnailSelector(1));
const rect2 = await getRect(page, getThumbnailSelector(2));
await (await page.$(".thumbnail[page-number='14'")).scrollIntoView();
await page.waitForSelector(getThumbnailSelector(14), {
visible: true,
});
await page.click(`.thumbnail:has(${getThumbnailSelector(14)}) input`);
await waitAndClick(
page,
`.thumbnail:has(${getThumbnailSelector(14)}) input`
);
await (await page.$(".thumbnail[page-number='1'")).scrollIntoView();
await page.waitForSelector(getThumbnailSelector(1), {
visible: true,
@ -323,7 +327,7 @@ describe("Reorganize Pages View", () => {
const rect1 = await getRect(page, getThumbnailSelector(1));
const rect2 = await getRect(page, getThumbnailSelector(2));
await page.click(getThumbnailSelector(2));
await waitAndClick(page, getThumbnailSelector(2));
await page.waitForSelector(
`${getThumbnailSelector(2)}[aria-current="page"]`
);
@ -367,11 +371,8 @@ describe("Reorganize Pages View", () => {
it("should check if the search is working after moving pages", async () => {
await Promise.all(
pages.map(async ([browserName, page]) => {
await page.click("#viewFindButton");
await page.waitForSelector(":has(> #findHighlightAll)", {
visible: true,
});
await page.click(":has(> #findHighlightAll)");
await waitAndClick(page, "#viewFindButton");
await waitAndClick(page, ":has(> #findHighlightAll)");
await page.waitForSelector("#findInput", { visible: true });
await page.type("#findInput", "1");
@ -482,7 +483,7 @@ describe("Reorganize Pages View", () => {
await waitForThumbnailVisible(page, 1);
await movePages(page, [2], 10);
await scrollIntoView(page, getAnnotationSelector("107R"));
await page.click(getAnnotationSelector("107R"));
await waitAndClick(page, getAnnotationSelector("107R"));
const currentPage = await page.$eval(
"#pageNumber",
el => el.valueAsNumber
@ -498,11 +499,11 @@ describe("Reorganize Pages View", () => {
await waitForThumbnailVisible(page, 1);
await movePages(page, [2, 4], 10);
await page.click("#viewsManagerSelectorButton");
await page.click("#outlinesViewMenu");
await waitAndClick(page, "#viewsManagerSelectorButton");
await waitAndClick(page, "#outlinesViewMenu");
await page.waitForSelector("#outlinesView", { visible: true });
await page.click("#outlinesView .treeItem:nth-child(2)");
await waitAndClick(page, "#outlinesView .treeItem:nth-child(2)");
const currentPage = await page.$eval(
"#pageNumber",
@ -539,12 +540,8 @@ describe("Reorganize Pages View", () => {
await Promise.all(
pages.map(async ([browserName, page]) => {
await page.waitForSelector("#outlinesView", { visible: true });
await page.waitForSelector("#viewsManagerSelectorButton", {
visible: true,
});
await page.click("#viewsManagerSelectorButton");
await page.waitForSelector("#thumbnailsViewMenu", { visible: true });
await page.click("#thumbnailsViewMenu");
await waitAndClick(page, "#viewsManagerSelectorButton");
await waitAndClick(page, "#thumbnailsViewMenu");
const thumbSelector =
"#thumbnailsView .thumbnailImageContainer > img";
@ -1702,8 +1699,9 @@ describe("Reorganize Pages View", () => {
await page.waitForSelector("button.thumbnailPasteButton", {
hidden: true,
});
const pasteButtons = await page.$$("button.thumbnailPasteButton");
expect(pasteButtons.length).withContext(`In ${browserName}`).toBe(0);
await page.waitForFunction(
() => !document.querySelector("button.thumbnailPasteButton")
);
})
);
});
@ -1751,7 +1749,7 @@ describe("Reorganize Pages View", () => {
);
});
await page.click("#viewsManagerStatusActionButton");
await waitAndClick(page, "#viewsManagerStatusActionButton");
await waitAndClick(page, "#viewsManagerStatusActionExport");
const pagesData = await awaitPromise(handleExport);
expect(pagesData)

View File

@ -650,13 +650,50 @@ async function scrollIntoView(page, selector) {
sel => [
new Promise(resolve => {
const container = document.getElementById("viewerContainer");
if (container.scrollHeight <= container.clientHeight) {
const element = document.querySelector(sel);
if (!container || !element) {
resolve();
return;
}
container.addEventListener("scrollend", resolve, { once: true });
const element = document.querySelector(sel);
if (
container.scrollHeight <= container.clientHeight &&
container.scrollWidth <= container.clientWidth
) {
resolve();
return;
}
const beforeTop = container.scrollTop;
const beforeLeft = container.scrollLeft;
let settled = false;
let timeoutId = null;
const finish = () => {
if (settled) {
return;
}
settled = true;
if (timeoutId !== null) {
clearTimeout(timeoutId);
}
container.removeEventListener("scrollend", finish);
resolve();
};
container.addEventListener("scrollend", finish, { once: true });
element.scrollIntoView({ behavior: "instant", block: "start" });
if (
container.scrollTop === beforeTop &&
container.scrollLeft === beforeLeft
) {
finish();
return;
}
// Some browsers occasionally miss `scrollend`, so keep a short
// fallback to avoid hanging.
timeoutId = setTimeout(finish, 250);
}),
],
selector

View File

@ -721,7 +721,9 @@ class PDFThumbnailViewer {
const newPageNumber = currentPageNumber || 1;
this.linkService.goToPage(newPageNumber);
const thumbnailView = this._thumbnails[newPageNumber - 1];
thumbnailView.imageContainer.focus();
if (!this.container.contains(document.activeElement)) {
thumbnailView.imageContainer.focus();
}
}, 0);
}