Packages

Shared browser automation contract and pool implementation for Elixir browser backends

Current section

Files

Jump to
browse lib browse browser.ex
Raw

lib/browse/browser.ex

defmodule Browse.Browser do
@moduledoc """
Shared browser capability contract implemented by concrete engines.
Implementations expose browser operations without leaking transport details
such as CDP, WebDriver BiDi, or engine-specific RPC handles.
"""
@type state :: term()
@type locator :: term()
@type script :: String.t()
@type url :: String.t()
@type result(value) :: {:ok, value} | {:error, term()}
@callback init(keyword()) :: {:ok, state()} | {:error, term()}
@callback terminate(term(), state()) :: :ok
@callback navigate(state(), url(), keyword()) :: :ok | {:error, term()}
@callback current_url(state()) :: result(url())
@callback content(state()) :: result(String.t())
@callback evaluate(state(), script(), keyword()) :: result(term())
@callback capture_screenshot(state(), keyword()) :: result(binary())
@callback print_to_pdf(state(), keyword()) :: result(binary())
@callback click(state(), locator(), keyword()) :: :ok | {:error, term()}
@callback fill(state(), locator(), String.t(), keyword()) :: :ok | {:error, term()}
@callback wait_for(state(), locator(), keyword()) :: :ok | {:error, term()}
@callback go_back(state(), keyword()) :: :ok | {:error, term()}
@callback go_forward(state(), keyword()) :: :ok | {:error, term()}
@callback reload(state(), keyword()) :: :ok | {:error, term()}
@callback title(state()) :: result(String.t())
@callback select_option(state(), locator(), String.t(), keyword()) :: :ok | {:error, term()}
@callback hover(state(), locator(), keyword()) :: :ok | {:error, term()}
@callback get_text(state(), locator(), keyword()) :: result(String.t())
@callback get_attribute(state(), locator(), String.t(), keyword()) :: result(String.t() | nil)
@callback get_cookies(state(), keyword()) :: result(list(map()))
@callback set_cookie(state(), map(), keyword()) :: :ok | {:error, term()}
@callback clear_cookies(state(), keyword()) :: :ok | {:error, term()}
end