@@ -136,6 +136,12 @@ export const navigatePage = defineTool({
136136 initScript : zod . string ( ) . optional ( ) . describe (
137137 `(optional) A JavaScript function to be executed by the tool on new document for every page load before any other scripts.
138138 ` ) ,
139+ initScript : zod
140+ . string ( )
141+ . optional ( )
142+ . describe (
143+ '(optional) A JavaScript function to be executed by the tool on new document for every page load before any other scripts.' ,
144+ ) ,
139145 ...timeoutSchema ,
140146 } ,
141147 handler : async ( request , response , context ) => {
@@ -164,8 +170,66 @@ export const navigatePage = defineTool({
164170 }
165171 // We are not going to report the dialog like regular dialogs.
166172 context . clearDialog ( ) ;
173+ if ( request . params . initScript ) {
174+ await page . evaluateOnNewDocument ( request . params . initScript ) ;
175+ }
176+
177+ await context . waitForEventsAfterAction ( async ( ) => {
178+ switch ( request . params . type ) {
179+ case 'url' :
180+ if ( ! request . params . url ) {
181+ throw new Error ( 'A URL is required for navigation of type=url.' ) ;
182+ }
183+ try {
184+ await page . goto ( request . params . url , options ) ;
185+ response . appendResponseLine (
186+ `Successfully navigated to ${ request . params . url } .` ,
187+ ) ;
188+ } catch ( error ) {
189+ response . appendResponseLine (
190+ `Unable to navigate in the selected page: ${ error . message } .` ,
191+ ) ;
192+ }
193+ break ;
194+ case 'back' :
195+ try {
196+ await page . goBack ( options ) ;
197+ response . appendResponseLine (
198+ `Successfully navigated back to ${ page . url ( ) } .` ,
199+ ) ;
200+ } catch ( error ) {
201+ response . appendResponseLine (
202+ `Unable to navigate back in the selected page: ${ error . message } .` ,
203+ ) ;
204+ }
205+ break ;
206+ case 'forward' :
207+ try {
208+ await page . goForward ( options ) ;
209+ response . appendResponseLine (
210+ `Successfully navigated forward to ${ page . url ( ) } .` ,
211+ ) ;
212+ } catch ( error ) {
213+ response . appendResponseLine (
214+ `Unable to navigate forward in the selected page: ${ error . message } .` ,
215+ ) ;
216+ }
217+ break ;
218+ case 'reload' :
219+ try {
220+ await page . reload ( {
221+ ...options ,
222+ ignoreCache : request . params . ignoreCache ,
223+ } ) ;
224+ response . appendResponseLine ( `Successfully reloaded the page.` ) ;
225+ } catch ( error ) {
226+ response . appendResponseLine (
227+ `Unable to reload the selected page: ${ error . message } .` ,
228+ ) ;
229+ }
230+ break ;
167231 }
168- } ;
232+ } ) ;
169233
170234 if ( request . params . initScript ) {
171235 await page . evaluateOnNewDocument ( request . params . initScript ) ;
0 commit comments