Close scratch iteration 009 grouped policy and VEX audit repairs
This commit is contained in:
@@ -191,6 +191,8 @@ async function findLinkForRoute(page, route, name, timeoutMs = 10_000) {
|
||||
|
||||
if (route === '/releases/environments' && name === 'Open Environment') {
|
||||
locator = page.locator('.actions').getByRole('link', { name }).first();
|
||||
} else if (route === '/security/posture' && name === 'Configure sources') {
|
||||
locator = page.locator('#main-content .panel').getByRole('link', { name }).first();
|
||||
} else if (route === '/ops/operations/jobengine' && name instanceof RegExp && String(name) === String(/Execution Quotas/i)) {
|
||||
locator = await findScopedLink(page, '[data-testid="jobengine-quotas-card"]', name);
|
||||
} else if (route === '/ops/operations/offline-kit' && name === 'Bundles') {
|
||||
@@ -209,7 +211,44 @@ async function findLinkForRoute(page, route, name, timeoutMs = 10_000) {
|
||||
return null;
|
||||
}
|
||||
|
||||
async function findButton(page, name, timeoutMs = 10_000) {
|
||||
async function findButton(page, route, name, timeoutMs = 10_000) {
|
||||
const deadline = Date.now() + timeoutMs;
|
||||
const scopes = [];
|
||||
if (route === '/releases/versions' && name === 'Create Hotfix Run') {
|
||||
scopes.push(page.locator('#main-content .header-actions').first());
|
||||
}
|
||||
scopes.push(page.locator('#main-content').first(), page.locator('body'));
|
||||
|
||||
while (Date.now() < deadline) {
|
||||
for (const scope of scopes) {
|
||||
for (const role of ['button', 'tab']) {
|
||||
const button = scope.getByRole(role, { name }).first();
|
||||
if (await button.count()) {
|
||||
return button;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
await page.waitForTimeout(250);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
async function waitForPath(page, expectedPath, timeoutMs = 10_000) {
|
||||
const deadline = Date.now() + timeoutMs;
|
||||
while (Date.now() < deadline) {
|
||||
if (normalizeUrl(page.url()).includes(expectedPath)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
await page.waitForTimeout(250);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
async function findButtonLegacy(page, name, timeoutMs = 10_000) {
|
||||
const deadline = Date.now() + timeoutMs;
|
||||
while (Date.now() < deadline) {
|
||||
for (const role of ['button', 'tab']) {
|
||||
@@ -269,6 +308,9 @@ async function runLinkCheck(page, route, name, expectedPath) {
|
||||
}
|
||||
|
||||
await link.click({ timeout: 10_000 });
|
||||
if (expectedPath) {
|
||||
await waitForPath(page, expectedPath, 10_000);
|
||||
}
|
||||
await settle(page);
|
||||
const snapshot = await captureSnapshot(page, action);
|
||||
const finalUrl = normalizeUrl(snapshot.url);
|
||||
@@ -294,7 +336,7 @@ async function runButtonCheck(page, route, name, expectedPath = null) {
|
||||
const action = `${route} -> button:${name}`;
|
||||
try {
|
||||
await navigate(page, route);
|
||||
const button = await findButton(page, name);
|
||||
const button = await findButton(page, route, name).catch(() => null) ?? await findButtonLegacy(page, name);
|
||||
if (!button) {
|
||||
return { action, ok: false, reason: 'missing-button', snapshot: await captureSnapshot(page, action) };
|
||||
}
|
||||
@@ -313,6 +355,9 @@ async function runButtonCheck(page, route, name, expectedPath = null) {
|
||||
}
|
||||
|
||||
await button.click({ timeout: 10_000 });
|
||||
if (expectedPath) {
|
||||
await waitForPath(page, expectedPath, 10_000);
|
||||
}
|
||||
await settle(page);
|
||||
const snapshot = await captureSnapshot(page, action);
|
||||
const finalUrl = normalizeUrl(snapshot.url);
|
||||
|
||||
Reference in New Issue
Block a user