Playwriter.Browser.Session (Playwriter v0.1.0)

Copy Markdown View Source

Manages a browser session lifecycle.

A session owns:

  • A transport connection
  • A browser instance
  • Multiple browser contexts
  • Pages within those contexts

Example

{:ok, session} = Session.start_link(mode: :local, headless: true)
{:ok, page} = Session.new_page(session)
:ok = Session.goto(session, page, "https://example.com")
{:ok, html} = Session.content(session, page)
:ok = Session.close(session)

Summary

Functions

Returns a specification to start this module under a supervisor.

Close the entire session.

Get page HTML content.

Create a new browser context.

Create a new page in the default context.

Start a new browser session.

Types

page_info()

@type page_info() :: %{
  page_guid: String.t(),
  frame_guid: String.t(),
  context_guid: String.t()
}

Functions

child_spec(init_arg)

Returns a specification to start this module under a supervisor.

See Supervisor.

click(session, page_id, selector, opts \\ [])

@spec click(GenServer.server(), String.t(), String.t(), keyword()) ::
  :ok | {:error, term()}

Click an element.

Options

  • :timeout - Click timeout in ms (default: 30000)

close(session)

@spec close(GenServer.server()) :: :ok

Close the entire session.

close_page(session, page_id)

@spec close_page(GenServer.server(), String.t()) :: :ok | {:error, term()}

Close a page.

content(session, page_id)

@spec content(GenServer.server(), String.t()) :: {:ok, String.t()} | {:error, term()}

Get page HTML content.

fill(session, page_id, selector, value, opts \\ [])

@spec fill(GenServer.server(), String.t(), String.t(), String.t(), keyword()) ::
  :ok | {:error, term()}

Fill an input field.

Options

  • :timeout - Fill timeout in ms (default: 30000)

goto(session, page_id, url, opts \\ [])

@spec goto(GenServer.server(), String.t(), String.t(), keyword()) ::
  :ok | {:error, term()}

Navigate to a URL.

Options

  • :timeout - Navigation timeout in ms (default: 30000)
  • :wait_until - When to consider navigation complete (:load, :domcontentloaded, :networkidle)

new_context(session, opts \\ [])

@spec new_context(
  GenServer.server(),
  keyword()
) :: {:ok, String.t()} | {:error, term()}

Create a new browser context.

Options

  • :viewport - Viewport dimensions %{width: 1920, height: 1080}
  • :user_agent - Custom user agent string
  • :locale - User locale (e.g., "en-US")
  • :color_scheme - Color scheme preference (:light, :dark)

new_page(session, opts \\ [])

@spec new_page(
  GenServer.server(),
  keyword()
) :: {:ok, String.t()} | {:error, term()}

Create a new page in the default context.

Returns a page_id that can be used with other Session functions.

screenshot(session, page_id, opts \\ [])

@spec screenshot(GenServer.server(), String.t(), keyword()) ::
  {:ok, binary()} | {:error, term()}

Take a screenshot.

Options

  • :full_page - Capture full scrollable page (default: false)
  • :omit_background - Omit background for transparent screenshots (default: false)

start_link(opts \\ [])

@spec start_link(keyword()) :: {:ok, pid()} | {:error, term()}

Start a new browser session.

Options

  • :mode - :local, :remote, or :auto (default: :auto)
  • :ws_endpoint - WebSocket URL for remote mode
  • :headless - Run browser in headless mode (default: true)
  • :browser_type - :chromium, :firefox, or :webkit (default: :chromium)
  • :name - Optional name for the GenServer