Skip to main content

BrowserType

Struct BrowserType 

Source
pub struct BrowserType { /* private fields */ }
Expand description

BrowserType represents a browser engine (Chromium, Firefox, or WebKit).

Each Playwright instance provides three BrowserType objects accessible via:

  • playwright.chromium()
  • playwright.firefox()
  • playwright.webkit()

BrowserType provides three main modes:

  1. Launch: Creates a new browser instance
  2. Launch Persistent Context: Creates browser + context with persistent storage
  3. Connect: Connects to an existing remote browser instance

§Example

let playwright = Playwright::launch().await?;
let chromium = playwright.chromium();

// Verify browser type info
assert_eq!(chromium.name(), "chromium");
assert!(!chromium.executable_path().is_empty());

// === Standard Launch ===
// Launch with default options
let browser1 = chromium.launch().await?;
assert_eq!(browser1.name(), "chromium");
assert!(!browser1.version().is_empty());
browser1.close().await?;

// === Remote Connection ===
// Connect to a remote browser (e.g., started with `npx playwright launch-server`)
// let browser3 = chromium.connect("ws://localhost:3000", None).await?;
// browser3.close().await?;

// === CDP Connection (Chromium only) ===
// Connect to a Chrome instance with remote debugging enabled
// let browser4 = chromium.connect_over_cdp("http://localhost:9222", None).await?;
// browser4.close().await?;

// === Persistent Context Launch ===
// Launch with persistent storage (cookies, local storage, etc.)
let context = chromium
    .launch_persistent_context("/tmp/user-data")
    .await?;
let page = context.new_page().await?;
page.goto("https://example.com", None).await?;
context.close().await?; // Closes browser too

// === App Mode (Standalone Window) ===
// Launch as a standalone application window
let app_options = BrowserContextOptions::builder()
    .args(vec!["--app=https://example.com".to_string()])
    .headless(true) // Set to true for CI, but app mode is typically headed
    .build();

let app_context = chromium
    .launch_persistent_context_with_options("/tmp/app-data", app_options)
    .await?;
// Browser opens directly to URL without address bar
app_context.close().await?;

See: https://playwright.dev/docs/api/class-browsertype

Implementations§

Source§

impl BrowserType

Source

pub fn new( parent: ParentOrConnection, type_name: String, guid: Arc<str>, initializer: Value, ) -> Result<Self>

Creates a new BrowserType object from protocol initialization.

Called by the object factory when server sends create message.

§Arguments
  • parent - Parent (Connection for root objects, or another ChannelOwner)
  • type_name - Protocol type name (“BrowserType”)
  • guid - Unique GUID from server (e.g., “browserType@chromium”)
  • initializer - Initial state with name and executablePath
Source

pub fn name(&self) -> &str

Returns the browser name (“chromium”, “firefox”, or “webkit”).

Source

pub fn executable_path(&self) -> &str

Returns the path to the browser executable.

Source

pub async fn launch(&self) -> Result<Browser>

Launches a browser instance with default options.

This is equivalent to calling launch_with_options(LaunchOptions::default()).

§Errors

Returns error if:

  • Browser executable not found
  • Launch timeout (default 30s)
  • Browser process fails to start

See: https://playwright.dev/docs/api/class-browsertype#browser-type-launch

Source

pub async fn launch_with_options( &self, options: LaunchOptions, ) -> Result<Browser>

Launches a browser instance with custom options.

§Arguments
  • options - Launch options (headless, args, etc.)
§Errors

Returns error if:

  • Browser executable not found
  • Launch timeout
  • Invalid options
  • Browser process fails to start

See: https://playwright.dev/docs/api/class-browsertype#browser-type-launch

Source

pub async fn launch_persistent_context( &self, user_data_dir: impl Into<String>, ) -> Result<BrowserContext>

Launches a browser with persistent storage using default options.

Returns a persistent browser context. Closing this context will automatically close the browser.

This method is useful for:

  • Preserving authentication state across sessions
  • Testing with real user profiles
  • Creating standalone applications with app mode
  • Simulating real user behavior with cookies and storage
§Arguments
  • user_data_dir - Path to a user data directory (stores cookies, local storage)
§Errors

Returns error if:

  • Browser executable not found
  • Launch timeout (default 30s)
  • Browser process fails to start
  • User data directory cannot be created

See: https://playwright.dev/docs/api/class-browsertype#browser-type-launch-persistent-context

Source

pub async fn launch_persistent_context_with_options( &self, user_data_dir: impl Into<String>, options: BrowserContextOptions, ) -> Result<BrowserContext>

Launches a browser with persistent storage and custom options.

Returns a persistent browser context with the specified configuration. Closing this context will automatically close the browser.

This method accepts both launch options (headless, args, etc.) and context options (viewport, locale, etc.) in a single BrowserContextOptions struct.

§Arguments
  • user_data_dir - Path to a user data directory (stores cookies, local storage)
  • options - Combined launch and context options
§Errors

Returns error if:

  • Browser executable not found
  • Launch timeout
  • Invalid options
  • Browser process fails to start
  • User data directory cannot be created

See: https://playwright.dev/docs/api/class-browsertype#browser-type-launch-persistent-context

Source

pub async fn connect( &self, ws_endpoint: &str, options: Option<ConnectOptions>, ) -> Result<Browser>

Connects to an existing browser instance.

§Arguments
  • ws_endpoint - A WebSocket endpoint to connect to.
  • options - Connection options.
§Errors

Returns error if connection fails or handshake fails.

Source

pub async fn connect_over_cdp( &self, endpoint_url: &str, options: Option<ConnectOverCdpOptions>, ) -> Result<Browser>

Connects to a browser over the Chrome DevTools Protocol.

This method is only supported for Chromium. It connects to an existing Chrome instance that exposes a CDP endpoint (e.g., --remote-debugging-port), or to CDP-compatible services like browserless.

Unlike connect(), which uses Playwright’s proprietary WebSocket protocol, this method connects directly via CDP. The Playwright server manages the CDP connection internally.

§Arguments
  • endpoint_url - A CDP endpoint URL (e.g., http://localhost:9222 or ws://localhost:9222/devtools/browser/...)
  • options - Optional connection options.
§Errors

Returns error if:

  • Called on a non-Chromium browser type
  • Connection to the CDP endpoint fails
  • Connection timeout

See: https://playwright.dev/docs/api/class-browsertype#browser-type-connect-over-cdp

Trait Implementations§

Source§

impl Debug for BrowserType

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more