mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-04-03 09:50:40 -07:00
162 lines
4.3 KiB
TypeScript
162 lines
4.3 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2026 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
import { TestRig, assertModelHasOutput } from './test-helper.js';
|
|
import { dirname, join } from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
const __filename = fileURLToPath(import.meta.url);
|
|
const __dirname = dirname(__filename);
|
|
|
|
describe('browser-agent-localhost', () => {
|
|
let rig: TestRig;
|
|
|
|
const browserSettings = {
|
|
agents: {
|
|
overrides: {
|
|
browser_agent: {
|
|
enabled: true,
|
|
},
|
|
},
|
|
browser: {
|
|
headless: true,
|
|
sessionMode: 'isolated' as const,
|
|
},
|
|
},
|
|
};
|
|
|
|
beforeEach(() => {
|
|
rig = new TestRig();
|
|
});
|
|
|
|
afterEach(async () => {
|
|
await rig.cleanup();
|
|
});
|
|
|
|
it('should navigate to localhost fixture and read page content', async () => {
|
|
rig.setup('localhost-navigate', {
|
|
fakeResponsesPath: join(
|
|
__dirname,
|
|
'browser-agent-localhost.navigate.responses',
|
|
),
|
|
settings: browserSettings,
|
|
});
|
|
|
|
const result = await rig.run({
|
|
args: 'Navigate to http://127.0.0.1:18923/index.html and tell me the page title and list all links.',
|
|
});
|
|
|
|
assertModelHasOutput(result);
|
|
|
|
const toolLogs = rig.readToolLogs();
|
|
const browserAgentCall = toolLogs.find(
|
|
(t) => t.toolRequest.name === 'browser_agent',
|
|
);
|
|
expect(
|
|
browserAgentCall,
|
|
'Expected browser_agent to be called',
|
|
).toBeDefined();
|
|
});
|
|
|
|
it('should fill out and submit a form on localhost', async () => {
|
|
rig.setup('localhost-form', {
|
|
fakeResponsesPath: join(
|
|
__dirname,
|
|
'browser-agent-localhost.form.responses',
|
|
),
|
|
settings: browserSettings,
|
|
});
|
|
|
|
const result = await rig.run({
|
|
args: "Navigate to http://127.0.0.1:18923/form.html, fill in name='Test User', email='test@example.com', message='Hello World', and submit the form.",
|
|
});
|
|
|
|
assertModelHasOutput(result);
|
|
|
|
const toolLogs = rig.readToolLogs();
|
|
const browserAgentCall = toolLogs.find(
|
|
(t) => t.toolRequest.name === 'browser_agent',
|
|
);
|
|
expect(
|
|
browserAgentCall,
|
|
'Expected browser_agent to be called',
|
|
).toBeDefined();
|
|
});
|
|
|
|
it('should navigate through a multi-step flow', async () => {
|
|
rig.setup('localhost-multistep', {
|
|
fakeResponsesPath: join(
|
|
__dirname,
|
|
'browser-agent-localhost.multistep.responses',
|
|
),
|
|
settings: browserSettings,
|
|
});
|
|
|
|
const result = await rig.run({
|
|
args: "Go to http://127.0.0.1:18923/multi-step/step1.html, fill in 'testuser' as username, click Next, then click Finish on step 2. Report the result.",
|
|
});
|
|
|
|
assertModelHasOutput(result);
|
|
|
|
const toolLogs = rig.readToolLogs();
|
|
const browserAgentCall = toolLogs.find(
|
|
(t) => t.toolRequest.name === 'browser_agent',
|
|
);
|
|
expect(
|
|
browserAgentCall,
|
|
'Expected browser_agent to be called',
|
|
).toBeDefined();
|
|
});
|
|
|
|
it('should handle dynamically loaded content', async () => {
|
|
rig.setup('localhost-dynamic', {
|
|
fakeResponsesPath: join(
|
|
__dirname,
|
|
'browser-agent-localhost.dynamic.responses',
|
|
),
|
|
settings: browserSettings,
|
|
});
|
|
|
|
const result = await rig.run({
|
|
args: 'Navigate to http://127.0.0.1:18923/dynamic.html, wait for content to load, and tell me what items appear.',
|
|
});
|
|
|
|
assertModelHasOutput(result);
|
|
|
|
const toolLogs = rig.readToolLogs();
|
|
const browserAgentCall = toolLogs.find(
|
|
(t) => t.toolRequest.name === 'browser_agent',
|
|
);
|
|
expect(
|
|
browserAgentCall,
|
|
'Expected browser_agent to be called',
|
|
).toBeDefined();
|
|
});
|
|
|
|
it('should take a screenshot of localhost page', async () => {
|
|
rig.setup('localhost-screenshot', {
|
|
fakeResponsesPath: join(
|
|
__dirname,
|
|
'browser-agent-localhost.screenshot.responses',
|
|
),
|
|
settings: browserSettings,
|
|
});
|
|
|
|
const result = await rig.run({
|
|
args: 'Navigate to http://127.0.0.1:18923/index.html and take a screenshot.',
|
|
});
|
|
|
|
assertModelHasOutput(result);
|
|
|
|
const toolLogs = rig.readToolLogs();
|
|
const browserCalls = toolLogs.filter(
|
|
(t) => t.toolRequest.name === 'browser_agent',
|
|
);
|
|
expect(browserCalls.length).toBeGreaterThan(0);
|
|
});
|
|
});
|