2026-04-02 22:54:38 +08:00
/ * *
* @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 (
2026-04-09 12:48:24 -04:00
( t ) = >
t . toolRequest . name === 'invoke_agent' &&
JSON . parse ( t . toolRequest . args ) . agent_name === 'browser_agent' ,
2026-04-02 22:54:38 +08:00
) ;
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 (
2026-04-09 12:48:24 -04:00
( t ) = >
t . toolRequest . name === 'invoke_agent' &&
JSON . parse ( t . toolRequest . args ) . agent_name === 'browser_agent' ,
2026-04-02 22:54:38 +08:00
) ;
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 (
2026-04-09 12:48:24 -04:00
( t ) = >
t . toolRequest . name === 'invoke_agent' &&
JSON . parse ( t . toolRequest . args ) . agent_name === 'browser_agent' ,
2026-04-02 22:54:38 +08:00
) ;
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 (
2026-04-09 12:48:24 -04:00
( t ) = >
t . toolRequest . name === 'invoke_agent' &&
JSON . parse ( t . toolRequest . args ) . agent_name === 'browser_agent' ,
2026-04-02 22:54:38 +08:00
) ;
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 (
2026-04-09 12:48:24 -04:00
( t ) = >
t . toolRequest . name === 'invoke_agent' &&
JSON . parse ( t . toolRequest . args ) . agent_name === 'browser_agent' ,
2026-04-02 22:54:38 +08:00
) ;
expect ( browserCalls . length ) . toBeGreaterThan ( 0 ) ;
} ) ;
} ) ;