lib/playwright.ex

defmodule Playwright do
  @moduledoc """
  `Playwright` module provides functions to launch a `Playwright.Browser`.

  The following is a typical example of using `Playwright` to drive automation.

  ## Example

      alias Playwright.{Browser, Page, Response}

      browser = Playwright.launch(:chromium)

      assert Browser.new_page(browser)
      |> Page.goto("http://example.com")
      |> Response.ok()

      Browser.close(browser)
  """

  use Playwright.Runner.ChannelOwner

  @typedoc """
  The web client type used for `launch` and `connect` functions.
  """
  @type client :: :chromium | :firefox | :webkit

  @doc """
  Launch an instance of `Playwright.Browser` of the default client type (:chromium).
  """
  def launch() do
    launch(:chromium)
  end

  @doc """
  Launch an instance of `Playwright.Browser` given a client type.
  """
  @spec launch(client) :: Playwright.Browser.t()
  def launch(client) when client in [:chromium, :firefox, :webkit] do
    {_connection, browser} = Playwright.BrowserType.launch()
    browser
  end
end