# getPuppeteer

Get the [Puppeteer Browser instance](https://pptr.dev/#?product=Puppeteer\&version=v5.1.0\&show=api-class-browser) to run commands with Puppeteer. Note that all Puppeteer commands are asynchronous by default so in order to interchange between sync and async execution make sure to wrap your Puppeteer calls within a `browser.call` commands as shown in the example.

info

Note that using Puppeteer requires support for Chrome DevTools protocol and e.g. can not be used when running automated tests in the cloud. Chrome DevTools protocol is not installed by default, use `npm install puppeteer-core` to install it. Find out more in the [Automation Protocols](/docs/automationProtocols.md) section.

info

Note: Puppeteer is currently **not** supported when running [component tests](/docs/component-testing.md).

## Usage[​](#usage "Direct link to Usage")

```
await browser.getPuppeteer()
```

## Example[​](#example "Direct link to Example")

getPuppeteer.test.js

```
it('should allow me to use Puppeteer', async () => {
    // WebDriver command
    await browser.url('https://webdriver.io')

    const puppeteerBrowser = await browser.getPuppeteer()
    // switch to Puppeteer
    const metrics = await browser.call(async () => {
        const pages = await puppeteerBrowser.pages()
        pages[0].setGeolocation({ latitude: 59.95, longitude: 30.31667 })
        return pages[0].metrics()
    })

    console.log(metrics.LayoutCount) // returns LayoutCount value
})
```

## Returns[​](#returns "Direct link to Returns")

* **\<PuppeteerBrowser>** **`return`:** initiated puppeteer instance connected to the browser
