# newWindow

Open new window or tab in browser (defaults to a new window if not specified). This command is the equivalent function to `window.open()`. This command does not work in mobile environments.

**Note:** When calling this command you automatically switch to the new window or tab.

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

```
await browser.newWindow(url, { type, windowName, windowFeatures })
```

## Parameters[​](#parameters "Direct link to Parameters")

| Name                                     | Type               | Details                                                           |
| ---------------------------------------- | ------------------ | ----------------------------------------------------------------- |
| `url`                                    | `string`           | website URL to open                                               |
| `options`<br />*optional*                | `NewWindowOptions` | newWindow command options                                         |
| `options.type`<br />*optional*           | `string`           | type of new window: 'tab' or 'window'                             |
| `options.windowName`<br />*optional*     | `String`           | name of the new window                                            |
| `options.windowFeatures`<br />*optional* | `String`           | features of opened window (e.g. size, position, scrollbars, etc.) |

## Examples[​](#examples "Direct link to Examples")

newWindowSync.js

```
it('should open a new window', async () => {
    await browser.url('https://google.com')
    console.log(await browser.getTitle()) // outputs: "Google"

    const result = await browser.newWindow('https://webdriver.io', {
        windowName: 'WebdriverIO window',
        windowFeature: 'width=420,height=230,resizable,scrollbars=yes,status=1',
    })
    console.log(await browser.getTitle()) // outputs: "WebdriverIO · Next-gen browser and mobile automation test framework for Node.js"
    console.log(result.type) // outputs: "window"
    const handles = await browser.getWindowHandles()
    await browser.switchToWindow(handles[1])
    await browser.closeWindow()
    await browser.switchToWindow(handles[0])
    console.log(await browser.getTitle()) // outputs: "Google"
});
```

newTabSync.js

```
  it('should open a new tab', async () => {
      await browser.url('https://google.com')
      console.log(await browser.getTitle()) // outputs: "Google"

      await browser.newWindow('https://webdriver.io', {
          type:'tab',
          windowName: 'WebdriverIO window',
          windowFeature: 'width=420,height=230,resizable,scrollbars=yes,status=1',
      })
      console.log(await browser.getTitle()) // outputs: "WebdriverIO · Next-gen browser and mobile automation test framework for Node.js"
      console.log(result.type) // outputs: "tab"
      const handles = await browser.getWindowHandles()
      await browser.switchToWindow(handles[1])
      await browser.closeWindow()
      await browser.switchToWindow(handles[0])
      console.log(await browser.getTitle()) // outputs: "Google"
 });
```

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

* **\<Object>** **`return`:** An object containing the window handle and the type of new window `{handle: string, type: string}` handle - The ID of the window handle of the new tab or window, type - The type of the new window, either 'tab' or 'window'

## Throws[​](#throws "Direct link to Throws")

* **Error**: If `url` is invalid, if the command is used on mobile, or `type` is not 'tab' or 'window'.
