feat: 收口 Rust Web 3000 主链
This commit is contained in:
@@ -4,7 +4,7 @@ const BASE_URL = (process.env.MNOTE_UI_BASE_URL || "http://127.0.0.1:3000").repl
|
||||
const DOCUMENT_UI_BASE_URL = (
|
||||
process.env.MNOTE_TREE_SMOKE_DOCUMENT_BASE_URL ||
|
||||
process.env.MNOTE_LEGACY_UI_BASE_URL ||
|
||||
"http://127.0.0.1:3100"
|
||||
BASE_URL
|
||||
).replace(/\/+$/, "");
|
||||
const MNOTE_WEB_BASE_URL = (process.env.MNOTE_WEB_SMOKE_BASE_URL || "").replace(/\/+$/, "");
|
||||
const REQUEST_TIMEOUT_MS = Number(process.env.MNOTE_SMOKE_TIMEOUT_MS || 20_000);
|
||||
@@ -109,6 +109,7 @@ async function renameDocument(requestContext, workspaceId, documentId, title) {
|
||||
workspaceId,
|
||||
documentId,
|
||||
title,
|
||||
commandName: "page.head.updateTitle",
|
||||
},
|
||||
});
|
||||
}
|
||||
@@ -339,9 +340,26 @@ async function cleanupDocuments(requestContext, createdIds) {
|
||||
async function openDocument(page, workspaceId, documentId) {
|
||||
const url = `${DOCUMENT_UI_BASE_URL}/documents/${documentId}?workspaceId=${encodeURIComponent(workspaceId)}`;
|
||||
const hasSidebarControls = async () => {
|
||||
const pageTab = page.locator('[data-mnote-sidebar-tree-tab="page"]').first();
|
||||
const filetreeTab = page.locator('[data-mnote-sidebar-tree-tab="filetree"]').first();
|
||||
const groupButton = page.getByRole("button", { name: "分组" });
|
||||
const fileButton = page.getByRole("button", { name: "文件" });
|
||||
return (await isVisible(groupButton)) || (await isVisible(fileButton));
|
||||
if ((await isVisible(pageTab)) || (await isVisible(filetreeTab))) {
|
||||
return true;
|
||||
}
|
||||
if ((await isVisible(groupButton)) || (await isVisible(fileButton))) {
|
||||
return true;
|
||||
}
|
||||
return await page.evaluate(() => {
|
||||
const pageShell = document.querySelector('[data-testid="wolai-sidebar-page-tree-shell"]');
|
||||
const legacyShell = document.querySelector('[data-testid="sidebar-page-tree-shell"]');
|
||||
return [pageShell, legacyShell].some((node) => {
|
||||
if (!(node instanceof HTMLElement)) return false;
|
||||
const style = window.getComputedStyle(node);
|
||||
const rect = node.getBoundingClientRect();
|
||||
return !node.hidden && style.display !== "none" && style.visibility !== "hidden" && rect.width > 0 && rect.height > 0;
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
const gotoDocument = async () => {
|
||||
@@ -379,13 +397,20 @@ async function openDocument(page, workspaceId, documentId) {
|
||||
}
|
||||
|
||||
async function openSectionView(page) {
|
||||
const button = page.getByRole("button", { name: "分组" });
|
||||
await button.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS });
|
||||
const waitForHost = () =>
|
||||
page.waitForFunction(
|
||||
() => {
|
||||
const pageHost = document.querySelector('[data-testid="sidebar-page-tree-shell"]');
|
||||
return pageHost instanceof HTMLElement && pageHost.getClientRects().length > 0;
|
||||
const pagePanel = document.querySelector('[data-mnote-sidebar-tree-panel="page"]');
|
||||
const pageRoot = document.getElementById("sidebar-tree-root");
|
||||
const legacyHost = document.querySelector('[data-testid="sidebar-page-tree-shell"]');
|
||||
const isVisible = (node) =>
|
||||
node instanceof HTMLElement &&
|
||||
!node.hidden &&
|
||||
window.getComputedStyle(node).display !== "none" &&
|
||||
window.getComputedStyle(node).visibility !== "hidden" &&
|
||||
node.getClientRects().length > 0;
|
||||
if (isVisible(legacyHost)) return true;
|
||||
return isVisible(pageRoot) && (!pagePanel || isVisible(pagePanel));
|
||||
},
|
||||
undefined,
|
||||
{ timeout: UI_TIMEOUT_MS },
|
||||
@@ -399,7 +424,23 @@ async function openSectionView(page) {
|
||||
}
|
||||
|
||||
for (let attempt = 0; attempt < 2; attempt += 1) {
|
||||
await clickButtonByExactText(page, "分组");
|
||||
const switched = await page.evaluate(() => {
|
||||
const selectors = [
|
||||
'[data-mnote-sidebar-tree-tab="page"]',
|
||||
'button[aria-label="分组"]',
|
||||
];
|
||||
for (const selector of selectors) {
|
||||
const node = document.querySelector(selector);
|
||||
if (node instanceof HTMLElement) {
|
||||
node.click();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
});
|
||||
if (!switched) {
|
||||
throw new Error("未找到页面树切换入口");
|
||||
}
|
||||
try {
|
||||
await waitForHost();
|
||||
return;
|
||||
@@ -412,13 +453,20 @@ async function openSectionView(page) {
|
||||
}
|
||||
|
||||
async function openFilesystemView(page) {
|
||||
const button = page.getByRole("button", { name: "文件" });
|
||||
await button.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS });
|
||||
const waitForHost = () =>
|
||||
page.waitForFunction(
|
||||
() => {
|
||||
const fileHost = document.querySelector('[data-testid="sidebar-file-tree-shell"]');
|
||||
return fileHost instanceof HTMLElement && fileHost.getClientRects().length > 0;
|
||||
const filePanel = document.querySelector('[data-mnote-sidebar-tree-panel="filetree"]');
|
||||
const fileRoot = document.getElementById("sidebar-file-tree-root");
|
||||
const legacyHost = document.querySelector('[data-testid="sidebar-file-tree-shell"]');
|
||||
const isVisible = (node) =>
|
||||
node instanceof HTMLElement &&
|
||||
!node.hidden &&
|
||||
window.getComputedStyle(node).display !== "none" &&
|
||||
window.getComputedStyle(node).visibility !== "hidden" &&
|
||||
node.getClientRects().length > 0;
|
||||
if (isVisible(legacyHost)) return true;
|
||||
return isVisible(fileRoot) && (!filePanel || isVisible(filePanel));
|
||||
},
|
||||
undefined,
|
||||
{ timeout: UI_TIMEOUT_MS },
|
||||
@@ -432,7 +480,23 @@ async function openFilesystemView(page) {
|
||||
}
|
||||
|
||||
for (let attempt = 0; attempt < 2; attempt += 1) {
|
||||
await clickButtonByExactText(page, "文件");
|
||||
const switched = await page.evaluate(() => {
|
||||
const selectors = [
|
||||
'[data-mnote-sidebar-tree-tab="filetree"]',
|
||||
'button[aria-label="文件"]',
|
||||
];
|
||||
for (const selector of selectors) {
|
||||
const node = document.querySelector(selector);
|
||||
if (node instanceof HTMLElement) {
|
||||
node.click();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
});
|
||||
if (!switched) {
|
||||
throw new Error("未找到文件树切换入口");
|
||||
}
|
||||
try {
|
||||
await waitForHost();
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user