Skip to main content
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.
browser.handle: string
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
})