Current section
Files
Jump to
Current section
Files
src/butterbee@page_module@select_element.erl
-module(butterbee@page_module@select_element).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/butterbee/page_module/select_element.gleam").
-export([define/1, perform_action/3, option/1, selected_text/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/page_module/select_element\n"
"\n"
" pub fn pokemon_dropdown(\n"
" driver: WebDriver(state),\n"
" action: fn(_) -> WebDriver(new_state),\n"
" ) {\n"
" select_element.define(field: by.css(\"select#pokemon\"))\n"
" |> select_element.perform_action(driver, action)\n"
" }\n"
"\n"
" // Select an option by its visible text\n"
" driver\n"
" |> form_page.pokemon_dropdown(select_element.option(\"Charmander\"))\n"
"\n"
" // Get the currently selected option's text\n"
" driver\n"
" |> form_page.pokemon_dropdown(select_element.selected_text())\n"
" ```\n"
"\n"
" For a more complete example, see the [`page module`](https://hexdocs.pm/butterbee/page-modules) guide.\n"
).
-file("src/butterbee/page_module/select_element.gleam", 34).
-spec define(butterbidi@browsing_context@types@locator:locator()) -> butterbidi@browsing_context@types@locator:locator().
define(Locator) ->
Locator.
-file("src/butterbee/page_module/select_element.gleam", 38).
-spec perform_action(
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(WWL))
) -> butterbee@webdriver:web_driver(WWL).
perform_action(Locator, Driver, Action) ->
_pipe = butterbee@get:node(Driver, Locator),
Action(_pipe).
-file("src/butterbee/page_module/select_element.gleam", 47).
-spec option(binary()) -> fun((butterbee@webdriver:web_driver(butterbidi@script@types@remote_value:node_remote_value())) -> butterbee@webdriver:web_driver(butterbidi@script@types@remote_value:node_remote_value())).
option(Option) ->
Function = <<"function setSelectByInnerText(innerTextValue) {
if (!this || this.tagName !== 'SELECT') {
throw new TypeError('Function must be called on a <select> element');
}
for (let i = 0; i < this.options.length; i++) {
if (this.options[i].innerText === innerTextValue) {
this.selectedIndex = i;
return; // Stop once the match is found
}
}
throw new Error(`No option with innerText \"${innerTextValue}\" found`);
}"/utf8>>,
fun(Driver) ->
_ = begin
_pipe = Driver,
_pipe@1 = butterbee@webdriver:with_state(
_pipe,
(case erlang:element(5, Driver) of
{error, Error} ->
{error, Error};
{ok, Node} ->
{ok, butterbidi@script@types@local_value:node(Node)}
end)
),
butterbee@internal@function:on_value(
_pipe@1,
[butterbidi@script@types@local_value:string(Option)],
Function
)
end,
Driver
end.
-file("src/butterbee/page_module/select_element.gleam", 84).
-spec selected_text() -> fun((butterbee@webdriver:web_driver(butterbidi@script@types@remote_value:node_remote_value())) -> butterbee@webdriver:web_driver(binary())).
selected_text() ->
fun(Driver) -> _pipe = Driver,
_pipe@1 = butterbee@internal@function:on_node(
_pipe,
[],
<<"function() { return this.options[this.selectedIndex].text; }"/utf8>>
),
_pipe@2 = butterbee@internal@function:result_to_string(_pipe@1),
butterbee@webdriver:map_state(_pipe@2, Driver) end.