Complete platform management workflows
This commit is contained in:
@@ -117,7 +117,7 @@ async function main() {
|
||||
{
|
||||
name: "服务器管理",
|
||||
hash: "#/servers",
|
||||
markers: ["服务器管理", server.name, server.id, "创建服务器", "全部", "离线"]
|
||||
markers: ["服务器管理", server.name, server.id, "创建服务器", "全部", "离线", "运行操作"]
|
||||
},
|
||||
{
|
||||
name: "插件市场",
|
||||
@@ -126,7 +126,8 @@ async function main() {
|
||||
"插件市场",
|
||||
"平台 API",
|
||||
marketplacePlugin.id,
|
||||
marketplacePlugin.manifestRef,
|
||||
marketplacePlugin.name,
|
||||
"Development plugin",
|
||||
"process.install",
|
||||
"process.start",
|
||||
"process.stop",
|
||||
@@ -144,7 +145,7 @@ async function main() {
|
||||
{
|
||||
name: "AI 提供商管理",
|
||||
hash: "#/aiProviders",
|
||||
markers: ["AI 提供商管理", "已连接", aiProvider.name, aiProvider.apiKeyRef, "密钥引用"]
|
||||
markers: ["AI 提供商管理", "平台 API", aiProvider.name, aiProvider.apiKeyRef, "密钥引用"]
|
||||
},
|
||||
{
|
||||
name: "服务器详情",
|
||||
@@ -152,6 +153,10 @@ async function main() {
|
||||
markers: [
|
||||
server.name,
|
||||
`${server.id} · 插件 ${server.pluginId}@${server.pluginVersion} · 节点 ${server.runEndpointId}`,
|
||||
"运行分发",
|
||||
"run 包",
|
||||
"客户端管理器",
|
||||
"依赖",
|
||||
"启动",
|
||||
"停止",
|
||||
"日志",
|
||||
@@ -166,6 +171,14 @@ async function main() {
|
||||
for (const route of routeChecks) {
|
||||
const state = await verifyBrowserRoute(chrome, route.hash, route.markers, route.name);
|
||||
evidence.routes.push(state);
|
||||
if (route.name === "服务器管理") {
|
||||
const runtimeMenu = await verifyServerQuickRuntimeMenu(chrome, route.name);
|
||||
evidence.routes.push({
|
||||
name: "服务器管理 / 运行操作菜单",
|
||||
url: await chrome.url(),
|
||||
...runtimeMenu
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const pluginControls = await clickAndVerify(chrome, "插件控制", ["Logs 桥接执行", "server.logs.read", "server.artifacts.read", "读取"]);
|
||||
@@ -295,6 +308,20 @@ async function verifyResponsiveThemeWalkthroughs(chrome, routeChecks, server) {
|
||||
layout,
|
||||
textSample: state.textSample
|
||||
});
|
||||
if (route.name === "服务器管理") {
|
||||
const runtimeMenu = await verifyServerQuickRuntimeMenu(chrome, `${scenario.name} / 服务器管理`);
|
||||
const runtimeMenuLayout = await chrome.layoutSnapshot();
|
||||
assertNoVisibleLayoutIssues(runtimeMenuLayout, `${scenario.name} / 服务器管理 / 运行操作菜单`);
|
||||
routeEvidence.push({
|
||||
name: "服务器管理 / 运行操作菜单",
|
||||
url: await chrome.url(),
|
||||
requiredMarkers: runtimeMenu.requiredMarkers,
|
||||
fallbackScan: runtimeMenu.fallbackScan,
|
||||
forbiddenFragmentScan: runtimeMenu.forbiddenFragmentScan,
|
||||
layout: runtimeMenuLayout,
|
||||
textSample: runtimeMenu.textSample
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
await chrome.evaluate(() => {
|
||||
@@ -372,6 +399,31 @@ async function clickAndVerify(chrome, buttonText, markers) {
|
||||
};
|
||||
}
|
||||
|
||||
async function verifyServerQuickRuntimeMenu(chrome, label) {
|
||||
const markers = ["生成 run", "下载 run", "推送更新", "生成客户端", "依赖检查", "依赖安装", "实时日志", "历史日志"];
|
||||
await chrome.evaluate(() => {
|
||||
const summary = Array.from(document.querySelectorAll("summary")).find((item) => item.textContent?.includes("运行操作"));
|
||||
if (!(summary instanceof HTMLElement)) {
|
||||
throw new Error("runtime action menu summary not found");
|
||||
}
|
||||
const details = summary.closest("details");
|
||||
if (!(details instanceof HTMLDetailsElement)) {
|
||||
throw new Error("runtime action menu container not found");
|
||||
}
|
||||
details.open = true;
|
||||
});
|
||||
await chrome.waitForText(markers, `${label} runtime action menu`);
|
||||
const visibleText = await chrome.visibleText();
|
||||
assertMarkers(visibleText, markers, `${label} runtime action menu`);
|
||||
scanText(visibleText, `${label} runtime action menu`);
|
||||
return {
|
||||
requiredMarkers: markers,
|
||||
fallbackScan: "passed",
|
||||
forbiddenFragmentScan: "passed",
|
||||
textSample: visibleText.slice(0, 1200)
|
||||
};
|
||||
}
|
||||
|
||||
async function ensureAiProvider(headers) {
|
||||
const providers = await getJson("/ai-providers", headers);
|
||||
if (providers.items.some((item) => item.id === "ai.openai")) {
|
||||
|
||||
Reference in New Issue
Block a user