Packages

A webdriver bidi client written in Gleam, for Gleam.

Current section

Files

Jump to
butterbee src butterbee@element.erl
Raw

src/butterbee@element.erl

-module(butterbee@element).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/butterbee/element.gleam").
-export([define/1, define_list/2, define_table/4, perform/3, perform_on_list/4, perform_on_table/4]).
-export_type([node_list/0, node_table/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(
" Define elements for page module using this module.\n"
"\n"
" Example:\n"
"\n"
" ```gleam\n"
" import butterbee\n"
" import butterbee/by\n"
" import butterbee/element.{type NodeList, type NodeTable}\n"
" import butterbee/webdriver.{type WebDriver}\n"
"\n"
" pub fn submit_button(\n"
" driver: WebDriver(state),\n"
" action: fn(_) -> WebDriver(new_state),\n"
" ) {\n"
" element.define(field: by.css(\"button#submit\"))\n"
" |> element.perform(driver, action)\n"
" }\n"
"\n"
" pub fn team_list(\n"
" driver: WebDriver(state),\n"
" on_element: NodeList,\n"
" action: fn(_) -> WebDriver(new_state),\n"
" ) {\n"
" element.define_list(\n"
" list: by.css(\"ul#team\"),\n"
" list_item: by.css(\"li\"),\n"
" )\n"
" |> element.perform_on_list(driver, on_element, action)\n"
" }\n"
"\n"
" pub fn pokemon_dropdown(\n"
" driver: WebDriver(state),\n"
" action: fn(_) -> WebDriver(new_state),\n"
" ) {\n"
" element.define(field: by.css(\"select#pokemon\"))\n"
" |> element.perform_action(driver, action)\n"
" }\n"
"\n"
" pub fn pokedex_table(\n"
" driver: WebDriver(state),\n"
" on_element: NodeTable,\n"
" action: fn(_) -> WebDriver(new_state),\n"
" ) {\n"
" element.define_table(\n"
" table: by.css(\"table#pokedex\"),\n"
" table_row: by.css(\"tr\"),\n"
" table_cell: by.css(\"td\"),\n"
" table_width: 3,\n"
" )\n"
" |> element.perform_on_table(driver, on_element, action)\n"
" }\n"
" ```\n"
"\n"
" For a more complete example, see the [`page module`](https://hexdocs.pm/butterbee/page-modules.html) guide.\n"
).
-type node_list() :: list | {item, integer()}.
-type node_table() :: table | {row, integer()} | {cell, integer(), integer()}.
-file("src/butterbee/element.gleam", 72).
?DOC(" Define an element for a page module.\n").
-spec define(butterbidi@browsing_context@types@locator:locator()) -> butterbidi@browsing_context@types@locator:locator().
define(Locator) ->
Locator.
-file("src/butterbee/element.gleam", 77).
?DOC(" Define a list for a page module.\n").
-spec define_list(
butterbidi@browsing_context@types@locator:locator(),
butterbidi@browsing_context@types@locator:locator()
) -> {butterbidi@browsing_context@types@locator:locator(),
butterbidi@browsing_context@types@locator:locator()}.
define_list(List_locator, List_item_locator) ->
{List_locator, List_item_locator}.
-file("src/butterbee/element.gleam", 85).
?DOC(" Define a table for a page module.\n").
-spec define_table(
butterbidi@browsing_context@types@locator:locator(),
butterbidi@browsing_context@types@locator:locator(),
butterbidi@browsing_context@types@locator:locator(),
integer()
) -> {butterbidi@browsing_context@types@locator:locator(),
butterbidi@browsing_context@types@locator:locator(),
butterbidi@browsing_context@types@locator:locator(),
integer()}.
define_table(Table_locator, Table_row_locator, Table_cell_locator, Table_width) ->
{Table_locator, Table_row_locator, Table_cell_locator, Table_width}.
-file("src/butterbee/element.gleam", 95).
?DOC(" Perform an action on the defined element.\n").
-spec perform(
butterbidi@browsing_context@types@locator:locator(),
butterbee@webdriver:web_driver(any()),
fun((butterbee@webdriver:web_driver(butterbidi@script@types@remote_value:node_remote_value())) -> butterbee@webdriver:web_driver(WIM))
) -> butterbee@webdriver:web_driver(WIM).
perform(Locator, Driver, Action) ->
_pipe = butterbee@get:node(Driver, Locator),
Action(_pipe).
-file("src/butterbee/element.gleam", 105).
?DOC(" Perform an action on the defined list.\n").
-spec perform_on_list(
{butterbidi@browsing_context@types@locator:locator(),
butterbidi@browsing_context@types@locator:locator()},
butterbee@webdriver:web_driver(any()),
node_list(),
fun((butterbee@webdriver:web_driver(butterbidi@script@types@remote_value:node_remote_value())) -> butterbee@webdriver:web_driver(WIS))
) -> butterbee@webdriver:web_driver(WIS).
perform_on_list(Locator, Driver, On_element, Action) ->
{List_locator, List_item_locator} = Locator,
_pipe@3 = case On_element of
list ->
butterbee@get:node(Driver, List_locator);
{item, Row} ->
_pipe = Driver,
_pipe@1 = butterbee@get:node(_pipe, List_locator),
_pipe@2 = butterbee@get:nodes_from_node(_pipe@1, List_item_locator),
butterbee@get:node_from_nodes(_pipe@2, Row)
end,
Action(_pipe@3).
-file("src/butterbee/element.gleam", 126).
?DOC(" Perform an action on the defined table.\n").
-spec perform_on_table(
{butterbidi@browsing_context@types@locator:locator(),
butterbidi@browsing_context@types@locator:locator(),
butterbidi@browsing_context@types@locator:locator(),
integer()},
butterbee@webdriver:web_driver(any()),
node_table(),
fun((butterbee@webdriver:web_driver(butterbidi@script@types@remote_value:node_remote_value())) -> butterbee@webdriver:web_driver(WIY))
) -> butterbee@webdriver:web_driver(WIY).
perform_on_table(Locator, Driver, On_element, Action) ->
{Table_locator, Table_row_locator, Table_cell_locator, Table_width} = Locator,
_pipe@6 = case On_element of
table ->
butterbee@get:node(Driver, Table_locator);
{row, Row} ->
_pipe = Driver,
_pipe@1 = butterbee@get:node(_pipe, Table_locator),
_pipe@2 = butterbee@get:nodes_from_node(_pipe@1, Table_row_locator),
butterbee@get:node_from_nodes(_pipe@2, Row);
{cell, Row@1, Column} ->
Cell = (Row@1 * Table_width) + Column,
_pipe@3 = Driver,
_pipe@4 = butterbee@get:node(_pipe@3, Table_locator),
_pipe@5 = butterbee@get:nodes_from_node(_pipe@4, Table_cell_locator),
butterbee@get:node_from_nodes(_pipe@5, Cell)
end,
Action(_pipe@6).