fix: expand workbench session rail in web probe
This commit is contained in:
@@ -1188,12 +1188,21 @@ async function workbenchReadinessSnapshot(targetPage) {
|
||||
const style = window.getComputedStyle(element);
|
||||
return rect.width > 0 && rect.height > 0 && style.visibility !== "hidden" && style.display !== "none";
|
||||
};
|
||||
const sessionCreate = document.querySelector("#session-create");
|
||||
const sessionRail = document.querySelector("#session-sidebar");
|
||||
const sessionCollapseToggle = document.querySelector("#session-collapse-toggle");
|
||||
return {
|
||||
url: window.location.href,
|
||||
path: window.location.pathname,
|
||||
readyState: document.readyState,
|
||||
workbenchShellVisible: visible(document.querySelector("#workspace, .workbench-route")),
|
||||
sessionCreateVisible: visible(document.querySelector("#session-create")),
|
||||
sessionCreatePresent: Boolean(sessionCreate),
|
||||
sessionCreateVisible: visible(sessionCreate),
|
||||
sessionRailPresent: Boolean(sessionRail),
|
||||
sessionRailCollapsed: sessionRail ? sessionRail.getAttribute("data-collapsed") === "true" || sessionRail.classList.contains("is-collapsed") : null,
|
||||
sessionCollapseTogglePresent: Boolean(sessionCollapseToggle),
|
||||
sessionCollapseToggleVisible: visible(sessionCollapseToggle),
|
||||
sessionCollapseToggleExpanded: sessionCollapseToggle ? sessionCollapseToggle.getAttribute("aria-expanded") : null,
|
||||
commandInputPresent: visible(document.querySelector("#command-input")),
|
||||
activeTabPresent: visible(document.querySelector(".session-tab[data-active='true'], .session-tab[aria-selected='true']")),
|
||||
warningPresent: visible(document.querySelector(".composer-warning")),
|
||||
@@ -1280,6 +1289,37 @@ function requestFailureSummary(request) {
|
||||
};
|
||||
}
|
||||
|
||||
async function ensureSessionRailExpanded() {
|
||||
const before = await workbenchReadinessSnapshot(page);
|
||||
if (before?.sessionCreateVisible === true) {
|
||||
return { ok: true, action: "already-visible", before, after: before, valuesRedacted: true };
|
||||
}
|
||||
const toggle = page.locator("#session-collapse-toggle").first();
|
||||
const toggleVisible = await toggle.isVisible({ timeout: 2000 }).catch(() => false);
|
||||
if (before?.sessionRailCollapsed !== true || !toggleVisible) {
|
||||
return { ok: false, action: "not-expanded", reason: before?.sessionRailCollapsed === true ? "collapse-toggle-not-visible" : "session-rail-not-collapsed", before, after: before, valuesRedacted: true };
|
||||
}
|
||||
await toggle.click();
|
||||
await page.waitForFunction(() => {
|
||||
const visible = (element) => {
|
||||
if (!element) return false;
|
||||
const rect = element.getBoundingClientRect();
|
||||
const style = window.getComputedStyle(element);
|
||||
return rect.width > 0 && rect.height > 0 && style.visibility !== "hidden" && style.display !== "none";
|
||||
};
|
||||
const rail = document.querySelector("#session-sidebar");
|
||||
return Boolean(visible(document.querySelector("#session-create")) || (rail && rail.getAttribute("data-collapsed") === "false"));
|
||||
}, null, { timeout: 5000 }).catch(() => null);
|
||||
const after = await workbenchReadinessSnapshot(page);
|
||||
return {
|
||||
ok: after?.sessionCreateVisible === true,
|
||||
action: "expanded-session-rail",
|
||||
before,
|
||||
after,
|
||||
valuesRedacted: true
|
||||
};
|
||||
}
|
||||
|
||||
async function clickAndWaitForAgentSessionCreate(create) {
|
||||
let removeRequestFailedListener = () => {};
|
||||
const requestFailedPromise = new Promise((resolve) => {
|
||||
@@ -1316,9 +1356,17 @@ async function createSessionFromUi() {
|
||||
const attempts = [];
|
||||
let createResponse = null;
|
||||
for (let attempt = 1; attempt <= 2; attempt += 1) {
|
||||
const readinessBeforeClick = await workbenchReadinessSnapshot(page);
|
||||
const railExpansion = await ensureSessionRailExpanded();
|
||||
const readinessBeforeClick = railExpansion.after || await workbenchReadinessSnapshot(page);
|
||||
const create = page.locator("#session-create").first();
|
||||
await create.waitFor({ state: "visible", timeout: 15000 });
|
||||
try {
|
||||
await create.waitFor({ state: "visible", timeout: 15000 });
|
||||
} catch (error) {
|
||||
const readinessAfterWait = await workbenchReadinessSnapshot(page);
|
||||
const createError = new Error("newSession session create button is not visible");
|
||||
createError.details = { beforeUrl, afterUrl: currentPageUrl(), before, attempts, attempt, readinessBeforeClick, readinessAfterWait, railExpansion, waitError: errorSummary(error), pageId, valuesRedacted: true };
|
||||
throw createError;
|
||||
}
|
||||
const createButtonState = await create.evaluate((element) => {
|
||||
const rect = element.getBoundingClientRect();
|
||||
const style = window.getComputedStyle(element);
|
||||
@@ -1335,7 +1383,7 @@ async function createSessionFromUi() {
|
||||
const outcome = await clickAndWaitForAgentSessionCreate(create);
|
||||
if (outcome?.kind === "response") {
|
||||
createResponse = outcome.response;
|
||||
attempts.push({ attempt, outcome: "response", readinessBeforeClick, createButtonState, valuesRedacted: true });
|
||||
attempts.push({ attempt, outcome: "response", readinessBeforeClick, railExpansion, createButtonState, valuesRedacted: true });
|
||||
break;
|
||||
}
|
||||
const afterAttempt = await workbenchSessionSnapshot();
|
||||
@@ -1343,6 +1391,7 @@ async function createSessionFromUi() {
|
||||
attempt,
|
||||
outcome: outcome?.kind || "unknown",
|
||||
readinessBeforeClick,
|
||||
railExpansion,
|
||||
createButtonState,
|
||||
waitError: outcome?.waitError || null,
|
||||
requestFailure: outcome?.requestFailure || null,
|
||||
|
||||
Reference in New Issue
Block a user