chore: make tab indexes 0-based (#674)

Fixes https://github.com/microsoft/playwright-mcp/issues/570
This commit is contained in:
Pavel Feldman 2025-07-16 09:55:08 -07:00 committed by GitHub
parent a5a57df105
commit da818d113a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 20 additions and 20 deletions

View File

@ -101,7 +101,7 @@ export class Context {
} }
async selectTab(index: number) { async selectTab(index: number) {
this._currentTab = this._tabs[index - 1]; this._currentTab = this._tabs[index];
await this._currentTab.page.bringToFront(); await this._currentTab.page.bringToFront();
} }
@ -121,13 +121,13 @@ export class Context {
const title = await tab.title(); const title = await tab.title();
const url = tab.page.url(); const url = tab.page.url();
const current = tab === this._currentTab ? ' (current)' : ''; const current = tab === this._currentTab ? ' (current)' : '';
lines.push(`- ${i + 1}:${current} [${title}] (${url})`); lines.push(`- ${i}:${current} [${title}] (${url})`);
} }
return lines.join('\n'); return lines.join('\n');
} }
async closeTab(index: number | undefined) { async closeTab(index: number | undefined) {
const tab = index === undefined ? this._currentTab : this._tabs[index - 1]; const tab = index === undefined ? this._currentTab : this._tabs[index];
await tab?.page.close(); await tab?.page.close();
return await this.listTabsMarkdown(); return await this.listTabsMarkdown();
} }

View File

@ -31,7 +31,7 @@ test('list initial tabs', async ({ client }) => {
expect(await client.callTool({ expect(await client.callTool({
name: 'browser_tab_list', name: 'browser_tab_list',
})).toHaveTextContent(`### Open tabs })).toHaveTextContent(`### Open tabs
- 1: (current) [] (about:blank)`); - 0: (current) [] (about:blank)`);
}); });
test('list first tab', async ({ client }) => { test('list first tab', async ({ client }) => {
@ -39,8 +39,8 @@ test('list first tab', async ({ client }) => {
expect(await client.callTool({ expect(await client.callTool({
name: 'browser_tab_list', name: 'browser_tab_list',
})).toHaveTextContent(`### Open tabs })).toHaveTextContent(`### Open tabs
- 1: [] (about:blank) - 0: [] (about:blank)
- 2: (current) [Tab one] (data:text/html,<title>Tab one</title><body>Body one</body>)`); - 1: (current) [Tab one] (data:text/html,<title>Tab one</title><body>Body one</body>)`);
}); });
test('create new tab', async ({ client }) => { test('create new tab', async ({ client }) => {
@ -51,8 +51,8 @@ test('create new tab', async ({ client }) => {
\`\`\` \`\`\`
### Open tabs ### Open tabs
- 1: [] (about:blank) - 0: [] (about:blank)
- 2: (current) [Tab one] (data:text/html,<title>Tab one</title><body>Body one</body>) - 1: (current) [Tab one] (data:text/html,<title>Tab one</title><body>Body one</body>)
### Current tab ### Current tab
- Page URL: data:text/html,<title>Tab one</title><body>Body one</body> - Page URL: data:text/html,<title>Tab one</title><body>Body one</body>
@ -69,9 +69,9 @@ test('create new tab', async ({ client }) => {
\`\`\` \`\`\`
### Open tabs ### Open tabs
- 1: [] (about:blank) - 0: [] (about:blank)
- 2: [Tab one] (data:text/html,<title>Tab one</title><body>Body one</body>) - 1: [Tab one] (data:text/html,<title>Tab one</title><body>Body one</body>)
- 3: (current) [Tab two] (data:text/html,<title>Tab two</title><body>Body two</body>) - 2: (current) [Tab two] (data:text/html,<title>Tab two</title><body>Body two</body>)
### Current tab ### Current tab
- Page URL: data:text/html,<title>Tab two</title><body>Body two</body> - Page URL: data:text/html,<title>Tab two</title><body>Body two</body>
@ -88,18 +88,18 @@ test('select tab', async ({ client }) => {
expect(await client.callTool({ expect(await client.callTool({
name: 'browser_tab_select', name: 'browser_tab_select',
arguments: { arguments: {
index: 2, index: 1,
}, },
})).toHaveTextContent(` })).toHaveTextContent(`
- Ran Playwright code: - Ran Playwright code:
\`\`\`js \`\`\`js
// <internal code to select tab 2> // <internal code to select tab 1>
\`\`\` \`\`\`
### Open tabs ### Open tabs
- 1: [] (about:blank) - 0: [] (about:blank)
- 2: (current) [Tab one] (data:text/html,<title>Tab one</title><body>Body one</body>) - 1: (current) [Tab one] (data:text/html,<title>Tab one</title><body>Body one</body>)
- 3: [Tab two] (data:text/html,<title>Tab two</title><body>Body two</body>) - 2: [Tab two] (data:text/html,<title>Tab two</title><body>Body two</body>)
### Current tab ### Current tab
- Page URL: data:text/html,<title>Tab one</title><body>Body one</body> - Page URL: data:text/html,<title>Tab one</title><body>Body one</body>
@ -116,17 +116,17 @@ test('close tab', async ({ client }) => {
expect(await client.callTool({ expect(await client.callTool({
name: 'browser_tab_close', name: 'browser_tab_close',
arguments: { arguments: {
index: 3, index: 2,
}, },
})).toHaveTextContent(` })).toHaveTextContent(`
- Ran Playwright code: - Ran Playwright code:
\`\`\`js \`\`\`js
// <internal code to close tab 3> // <internal code to close tab 2>
\`\`\` \`\`\`
### Open tabs ### Open tabs
- 1: [] (about:blank) - 0: [] (about:blank)
- 2: (current) [Tab one] (data:text/html,<title>Tab one</title><body>Body one</body>) - 1: (current) [Tab one] (data:text/html,<title>Tab one</title><body>Body one</body>)
### Current tab ### Current tab
- Page URL: data:text/html,<title>Tab one</title><body>Body one</body> - Page URL: data:text/html,<title>Tab one</title><body>Body one</body>