Version: 1.8.0

Emulation

Playwright allows overriding various parameters of the device where the browser is running:

  • viewport size, device scale factor, touch support
  • locale, timezone
  • color scheme
  • geolocation

Most of these parameters are configured during the browser context construction, but some of them such as viewport size can be changed for individual pages.


Devices#

Playwright comes with a registry of device parameters for selected mobile devices. It can be used to simulate browser behavior on a mobile device:

from playwright.sync_api import sync_playwright
def run(playwright):
pixel_2 = playwright.devices['Pixel 2']
browser = playwright.webkit.launch(headless=False)
context = browser.new_context(
**pixel_2,
)
with sync_playwright() as playwright:
run(playwright)

All pages created in the context above will share the same device parameters.

API reference#


User agent#

All pages created in the context above will share the user agent specified:

context = browser.new_context(
user_agent='My user agent'
)

API reference#


Viewport#

Create a context with custom viewport size:

# Create context with given viewport
context = browser.new_context(
viewport={ 'width': 1280, 'height': 1024 }
)
# Resize viewport for individual page
page.set_viewport_size(width=1600, height=1200)
# Emulate high-DPI
context = browser.new_context(
viewport={ 'width': 2560, 'height': 1440 },
device_scale_factor=2,

API reference#


Locale & timezone#

# Emulate locale and time
context = browser.new_context(
locale='de-DE',
timezone_id='Europe/Berlin',
)

API reference#


Permissions#

Allow all pages in the context to show system notifications:

context = browser.new_context(
permissions=['notifications'],
)

Grant all pages in the existing context access to current location:

context.grant_permissions(['geolocation'])

Grant notifications access from a specific domain:

context.grant_permissions(['notifications'], origin='https://skype.com')

Revoke all permissions:

context.clear_permissions()

API reference#


Geolocation#

Create a context with "geolocation" permissions granted:

context = browser.new_context(
geolocation={"longitude": 48.858455, "latitude": 2.294474},
permissions=["geolocation"]
)

Change the location later:

context.set_geolocation({"longitude": 29.979097, "latitude": 31.134256})

Note you can only change geolocation for all pages in the context.

API reference#


Color scheme and media#

Create a context with dark or light mode. Pages created in this context will follow this color scheme preference.

# Create context with dark mode
context = browser.new_context(
color_scheme='dark' # or 'light'
)
# Create page with dark mode
page = browser.new_page(
color_scheme='dark' # or 'light'
)
# Change color scheme for the page
page.emulate_media(color_scheme='dark')
# Change media for page
page.emulate_media(media='print')

API reference#