The Browser class represents a browser instance running on a mobile device. It provides methods for managing pages (tabs) within the browser.
Page operations
browser.newPage()
Creates a new page (tab) in the browser.
browser.newPage(): Promise<Page>
Returns: Promise<Page> - New page instance
Example:
const browser = await client.launch()
const page = await browser.newPage()
await page.goto('https://example.com')
browser.pages()
Lists all pages currently open in the browser.
browser.pages(): Promise<Page[]>
Returns: Promise<Page[]> - Array of page instances
Example:
const pages = await browser.pages()
console.log(`${pages.length} pages open`)
for (const page of pages) {
const url = await page.url()
console.log('Page URL:', url)
}
Browser management
browser.close()
Closes the browser and all its pages.
browser.close(): Promise<void>
Returns: Promise<void>
Example:
await browser.close()
console.log('Browser closed')
Always close browsers when done to free up device resources. Closing a browser automatically closes all its pages.
Properties
browser.handle
The unique handle identifier for this browser instance. Use this handle to reconnect to the browser later.
Example:
const browser = await client.launch()
console.log('Browser handle:', browser.handle)
// Save handle for later reconnection
const handle = browser.handle
// Later, reconnect to the same browser
const sameBrowser = await client.connect(handle)
Complete examples
Basic browser usage
const client = await uplink.client.connect(sessionUrl)
const browser = await client.launch()
try {
// Create a page and navigate
const page = await browser.newPage()
await page.goto('https://example.com')
console.log('Page loaded successfully')
await page.close()
} finally {
// Always close the browser
await browser.close()
}
Multiple pages
const browser = await client.launch()
// Open multiple pages
const page1 = await browser.newPage()
const page2 = await browser.newPage()
const page3 = await browser.newPage()
// Navigate in parallel
await Promise.all([
page1.goto('https://example.com'),
page2.goto('https://google.com'),
page3.goto('https://github.com')
])
// Get page titles
const titles = await Promise.all([
page1.evaluate(() => document.title),
page2.evaluate(() => document.title),
page3.evaluate(() => document.title)
])
console.log('Page titles:', titles)
// Close all pages
const pages = await browser.pages()
await Promise.all(pages.map(p => p.close()))
await browser.close()
Switching between pages
const browser = await client.launch()
const page1 = await browser.newPage()
const page2 = await browser.newPage()
await page1.goto('https://example.com')
await page2.goto('https://google.com')
// Show page1 (bring to foreground)
await page1.show()
console.log('Showing page 1')
// Wait a bit
await new Promise(resolve => setTimeout(resolve, 2000))
// Switch to page2
await page2.show()
console.log('Showing page 2')
await browser.close()
Browser reconnection
const client = await uplink.client.connect(sessionUrl)
// Launch and save handle
const browser = await client.launch()
const handle = browser.handle
console.log('Browser handle:', handle)
const page = await browser.newPage()
await page.goto('https://example.com')
// Later, reconnect to the same browser
const reconnectedBrowser = await client.connect(handle)
// Browser state is preserved
const pages = await reconnectedBrowser.pages()
console.log(`Reconnected browser has ${pages.length} page(s)`)
const existingPage = pages[0]
const url = await existingPage.url()
console.log('Page still on:', url)
await reconnectedBrowser.close()
Managing multiple browsers
const device = await client.worker()
// Launch multiple browsers on the same device
const browsers = await Promise.all([
device.launch(),
device.launch(),
device.launch()
])
console.log(`Launched ${browsers.length} browsers`)
// Use each browser independently
await Promise.all(browsers.map(async (browser, index) => {
const page = await browser.newPage()
await page.goto(`https://example.com/test${index}`)
console.log(`Browser ${index} navigated`)
}))
// List all browsers on device
const allBrowsers = await device.browsers()
console.log(`${allBrowsers.length} total browsers on device`)
// Close all browsers
await Promise.all(browsers.map(b => b.close()))
Cleanup pattern
async function withBrowser(callback) {
const browser = await client.launch()
try {
await callback(browser)
} finally {
// Ensure browser is always closed
await browser.close()
}
}
// Usage
await withBrowser(async (browser) => {
const page = await browser.newPage()
await page.goto('https://example.com')
// Your automation here
})