test(e2e): use accessible message action locators

This commit is contained in:
Danny Avila 2026-07-31 10:08:41 -04:00 committed by Marco Beretta
parent 364eb282a8
commit c1c3d67837
No known key found for this signature in database
GPG key ID: D918033D8E74CC11
4 changed files with 21 additions and 9 deletions

View file

@ -179,7 +179,9 @@ test.describe('core chat loop', () => {
const firstAssistantMessage = messagesView(page).locator('.message-render').nth(1);
await firstAssistantMessage.hover();
const regenerateButton = firstAssistantMessage.locator('button[title="Regenerate"]').last();
const regenerateButton = firstAssistantMessage
.getByRole('button', { name: 'Regenerate', exact: true })
.last();
await expect(regenerateButton).toBeVisible();
const [regenerateResponse] = await Promise.all([
@ -215,7 +217,9 @@ test.describe('core chat loop', () => {
// turn does not belong to.
const firstAssistant = messagesView(page).locator('.message-render').nth(1);
await firstAssistant.hover();
const regenInitial = firstAssistant.locator('button[title="Regenerate"]').last();
const regenInitial = firstAssistant
.getByRole('button', { name: 'Regenerate', exact: true })
.last();
await expect(regenInitial).toBeVisible();
[response] = await Promise.all([
page.waitForResponse(isAgentsStream, { timeout: 30000 }),
@ -235,7 +239,9 @@ test.describe('core chat loop', () => {
// original thread; the view must stay put.
const latestAssistant = messagesView(page).locator('.message-render').last();
await latestAssistant.hover();
const regenLatest = latestAssistant.locator('button[title="Regenerate"]').last();
const regenLatest = latestAssistant
.getByRole('button', { name: 'Regenerate', exact: true })
.last();
await expect(regenLatest).toBeVisible();
[response] = await Promise.all([
page.waitForResponse(isAgentsStream, { timeout: 30000 }),
@ -276,7 +282,9 @@ test.describe('core chat loop', () => {
// forks a fresh root branch that does not contain the later turns.
const earlyAssistant = messagesView(page).locator('.message-render').nth(1);
await earlyAssistant.hover();
const regenEarly = earlyAssistant.locator('button[title="Regenerate"]').last();
const regenEarly = earlyAssistant
.getByRole('button', { name: 'Regenerate', exact: true })
.last();
await expect(regenEarly).toBeVisible();
let [response] = await Promise.all([
page.waitForResponse(isAgentsStream, { timeout: 30000 }),
@ -299,7 +307,7 @@ test.describe('core chat loop', () => {
// long original thread; it must stay intact.
const lateAssistant = messagesView(page).locator('.message-render').last();
await lateAssistant.hover();
const regenLate = lateAssistant.locator('button[title="Regenerate"]').last();
const regenLate = lateAssistant.getByRole('button', { name: 'Regenerate', exact: true }).last();
await expect(regenLate).toBeVisible();
[response] = await Promise.all([
page.waitForResponse(isAgentsStream, { timeout: 30000 }),

View file

@ -586,7 +586,7 @@ async function clickMessageTitleButton(page: Page, messageTextValue: string, tit
const render = messageRender(page, messageTextValue);
await render.scrollIntoViewIfNeeded();
await render.hover();
await render.locator(`button[title="${title}"]`).last().click();
await render.getByRole('button', { name: title, exact: true }).last().click();
}
async function clickSibling(page: Page, messageTextValue: string, direction: 'Previous' | 'Next') {

View file

@ -146,7 +146,7 @@ test.describe('thread fold regressions', () => {
.filter({ hasText: firstReply })
.last();
await render.hover();
await render.locator('button[title="Regenerate"]').last().click();
await render.getByRole('button', { name: 'Regenerate', exact: true }).last().click();
await expect(messagesView(page).getByText(regeneratedReply)).toBeVisible({ timeout: 30000 });
await expect(siblingCounter(page)).toHaveText('2 / 2');

View file

@ -124,7 +124,9 @@ test.describe('context usage gauge', () => {
/** Regenerate to create a sibling branch (B). */
const assistantMessage = messagesView(page).locator('.message-render').nth(1);
await assistantMessage.hover();
const regenerateButton = assistantMessage.locator('button[title="Regenerate"]').last();
const regenerateButton = assistantMessage
.getByRole('button', { name: 'Regenerate', exact: true })
.last();
await expect(regenerateButton).toBeVisible();
const [regen] = await Promise.all([
page.waitForResponse(isAgentsStream, { timeout: 30000 }),
@ -166,7 +168,9 @@ test.describe('context usage gauge', () => {
* chat.spec.ts's branch test). */
const assistantMessage = messagesView(page).locator('.message-render').nth(1);
await assistantMessage.hover();
const regenerateButton = assistantMessage.locator('button[title="Regenerate"]').last();
const regenerateButton = assistantMessage
.getByRole('button', { name: 'Regenerate', exact: true })
.last();
await expect(regenerateButton).toBeVisible();
const [regen] = await Promise.all([
page.waitForResponse(isAgentsStream, { timeout: 30000 }),