Packages
playwright
1.44.0-alpha.4
1.49.1-alpha.2
1.49.1-alpha.1
1.44.0-alpha.4
1.44.0-alpha.3
1.44.0-alpha.2
1.44.0-alpha.1
1.18.0-alpha.1
0.1.17-preview-7
0.1.17-preview-6
0.1.17-preview-5
0.1.17-preview-4
0.1.17-preview-3
0.1.17-preview-2
0.1.17-preview-1
0.1.16-preview-3
0.1.16-preview-2
0.1.16-preview-1
0.1.1-preview
0.1.0-preview
Playwright is an Elixir library to automate Chromium, Firefox and WebKit browsers with a single API. Playwright delivers automation that is ever-green, capable, reliable and fast.
Current section
Files
Jump to
Current section
Files
lib/playwright/sdk/transport/driver.ex
defmodule Playwright.SDK.Transport.Driver do
@moduledoc false
# A transport for negotiating messages with the embedded Playwright `driver`
# CLI.
alias Playwright.SDK.Transport.DriverMessage
defstruct([
:port,
:remaining,
:buffer
])
# module API
# ----------------------------------------------------------------------------
def setup(config) do
cli = Map.get(config, :driver_path, default_cli())
cmd = "run-driver"
port = Port.open({:spawn, "#{cli} #{cmd}"}, [:binary])
%__MODULE__{
port: port,
remaining: 0,
buffer: ""
}
end
def post(message, %{port: port}) do
length = byte_size(message)
padding = <<length::utf32-little>>
Port.command(port, padding <> message)
end
def parse({_port, {:data, data}}, %{buffer: buffer, remaining: remaining}) do
%{
frames: frames,
buffer: buffer,
remaining: remaining
} = DriverMessage.parse(data, remaining, buffer, [])
{frames, %{buffer: buffer, remaining: remaining}}
end
# private
# ----------------------------------------------------------------------------
defp default_cli do
Path.join(:code.priv_dir(:playwright), "static/driver.js")
end
end