/** * Copyright (c) Microsoft Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import fs from 'fs'; import { test, expect } from './fixtures.js'; test('test reopen browser', async ({ client, server }) => { await client.callTool({ name: 'browser_navigate', arguments: { url: server.HELLO_WORLD }, }); expect(await client.callTool({ name: 'browser_close', })).toContainTextContent('No open pages available'); expect(await client.callTool({ name: 'browser_navigate', arguments: { url: server.HELLO_WORLD }, })).toContainTextContent(`- generic [ref=e1]: Hello, world!`); }); test('executable path', async ({ startClient, server }) => { const client = await startClient({ args: [`--executable-path=bogus`] }); const response = await client.callTool({ name: 'browser_navigate', arguments: { url: server.HELLO_WORLD }, }); expect(response).toContainTextContent(`executable doesn't exist`); }); test('persistent context', async ({ startClient, server }) => { server.setContent('/', ` `, 'text/html'); const client = await startClient(); const response = await client.callTool({ name: 'browser_navigate', arguments: { url: server.PREFIX }, }); expect(response).toContainTextContent(`Storage: NO`); await new Promise(resolve => setTimeout(resolve, 3000)); await client.callTool({ name: 'browser_close', }); const client2 = await startClient(); const response2 = await client2.callTool({ name: 'browser_navigate', arguments: { url: server.PREFIX }, }); expect(response2).toContainTextContent(`Storage: YES`); }); test('isolated context', async ({ startClient, server }) => { server.setContent('/', ` `, 'text/html'); const client = await startClient({ args: [`--isolated`] }); const response = await client.callTool({ name: 'browser_navigate', arguments: { url: server.PREFIX }, }); expect(response).toContainTextContent(`Storage: NO`); await client.callTool({ name: 'browser_close', }); const client2 = await startClient({ args: [`--isolated`] }); const response2 = await client2.callTool({ name: 'browser_navigate', arguments: { url: server.PREFIX }, }); expect(response2).toContainTextContent(`Storage: NO`); }); test('isolated context with storage state', async ({ startClient, server, localOutputPath }) => { const storageStatePath = localOutputPath('storage-state.json'); await fs.promises.writeFile(storageStatePath, JSON.stringify({ origins: [ { origin: server.PREFIX, localStorage: [{ name: 'test', value: 'session-value' }], }, ], })); server.setContent('/', ` `, 'text/html'); const client = await startClient({ args: [ `--isolated`, `--storage-state=${storageStatePath}`, ] }); const response = await client.callTool({ name: 'browser_navigate', arguments: { url: server.PREFIX }, }); expect(response).toContainTextContent(`Storage: session-value`); });