Current section
Files
Jump to
Current section
Files
src/butterbee@action.erl
-module(butterbee@action).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/butterbee/action.gleam").
-export([perform/2, click_action/1, move_to_element/1, click/1, enter_keys_action/1, enter_keys/1]).
-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(
" The action module contains functions to perform actions on nodes.\n"
"\n"
" Perform actions by passing the functions in this module to either the \n"
" [`node.do`](https://hexdocs.pm/butterbee/butterbee/node.html#do) or \n"
" [`node.get`](https://hexdocs.pm/butterbee/butterbee/node.html#get) functions.\n"
"\n"
" ### Example\n"
"\n"
" This example performs a click on the node with the css selector `a.logo`:\n"
"\n"
" ```gleam\n"
" let example = butterbee.new([config.Firefox])\n"
" |> butterbee.goto(\"https://gleam.run/\")\n"
" |> get.node(by.css(\"a.logo\"))\n"
" |> node.do(action.click(key.LeftClick))\n"
" ```\n"
).
-file("src/butterbee/action.gleam", 175).
?DOC(false).
-spec perform(
butterbee@webdriver:web_driver(butterbidi@script@types@remote_value:node_remote_value()),
butterbidi@input@commands@perform_actions:perform_actions_parameters()
) -> {ok, butterbidi@definition:command_response()} |
{error, butterbee@internal@error:butterbee_error()}.
perform(Driver, Params) ->
butterbee@internal@retry:until_ok(
fun() ->
erlang:element(
2,
butterbee@internal@commands@input:perform_actions(
erlang:element(2, Driver),
Params
)
)
end
).
-file("src/butterbee/action.gleam", 125).
?DOC(false).
-spec click_action(integer()) -> list(butterbidi@input@commands@perform_actions:pointer_source_action()).
click_action(Mouse_button) ->
[butterbidi@input@commands@perform_actions:pointer_down_action(Mouse_button),
butterbidi@input@commands@perform_actions:pointer_up_action(
Mouse_button
)].
-file("src/butterbee/action.gleam", 107).
?DOC(false).
-spec move_to_element(binary()) -> list(butterbidi@input@commands@perform_actions:pointer_source_action()).
move_to_element(Shared_id) ->
[butterbidi@input@commands@perform_actions:pointer_move_action(
0,
0,
none,
butterbidi@input@commands@perform_actions:element_origin(
butterbidi@script@types@remote_reference:shared_reference_from_id(
Shared_id
)
)
)].
-file("src/butterbee/action.gleam", 34).
?DOC(" Performs a click on the given node\n").
-spec click(butterbee@key:mouse_button()) -> fun((butterbee@webdriver:web_driver(butterbidi@script@types@remote_value:node_remote_value())) -> butterbee@webdriver:web_driver(butterbidi@definition:command_response())).
click(Mouse_button) ->
fun(Driver) -> _pipe@4 = case erlang:element(5, Driver) of
{error, Error} ->
{error, Error};
{ok, Node_remote_value} ->
gleam@result:'try'(
begin
_pipe = erlang:element(3, Node_remote_value),
gleam@option:to_result(
_pipe,
node_does_not_have_shared_id
)
end,
fun(Shared_id) -> case erlang:element(3, Driver) of
none ->
{error, driver_does_not_have_context};
{some, Context} ->
Params = begin
_pipe@1 = butterbidi@input@commands@perform_actions:default(
Context
),
butterbidi@input@commands@perform_actions:with_actions(
_pipe@1,
[butterbidi@input@commands@perform_actions:with_pointer_actions(
<<"mouse action"/utf8>>,
begin
_pipe@2 = gleam@list:new(),
_pipe@3 = lists:append(
_pipe@2,
move_to_element(
Shared_id
)
),
lists:append(
_pipe@3,
click_action(
butterbee@key:mouse_button_to_int(
Mouse_button
)
)
)
end
)]
)
end,
butterbee@node:do(
Driver,
butterbee@node:scroll_into_view()
),
perform(Driver, Params)
end end
)
end,
butterbee@webdriver:map_state(_pipe@4, Driver) end.
-file("src/butterbee/action.gleam", 137).
?DOC(false).
-spec enter_keys_action(binary()) -> list(butterbidi@input@commands@perform_actions:key_source_action()).
enter_keys_action(Keys) ->
Keys@1 = gleam@string:split(Keys, <<""/utf8>>),
_pipe = gleam@list:map(
Keys@1,
fun(Key) ->
[butterbidi@input@commands@perform_actions:key_down_action(Key),
butterbidi@input@commands@perform_actions:key_up_action(Key)]
end
),
lists:append(_pipe).
-file("src/butterbee/action.gleam", 79).
?DOC(
" Simulates a user entering the given keys into the browser.\n"
"\n"
" NOTE: It is not recommended to use this function for entering text into text fields. \n"
" Use the [`node.set_value(value)`](https://hexdocs.pm/butterbee/butterbee/node.html#set_value) function instead.\n"
).
-spec enter_keys(binary()) -> fun((butterbee@webdriver:web_driver(butterbidi@script@types@remote_value:node_remote_value())) -> butterbee@webdriver:web_driver(butterbidi@definition:command_response())).
enter_keys(Keys) ->
fun(Driver) ->
_ = butterbee@webdriver:do(Driver, click(left_click)),
_pipe@2 = case erlang:element(3, Driver) of
none ->
{error, driver_does_not_have_context};
{some, Context} ->
Params = begin
_pipe = butterbidi@input@commands@perform_actions:default(
Context
),
butterbidi@input@commands@perform_actions:with_actions(
_pipe,
[butterbidi@input@commands@perform_actions:with_key_actions(
<<"entering "/utf8, Keys/binary>>,
begin
_pipe@1 = gleam@list:new(),
lists:append(
_pipe@1,
enter_keys_action(Keys)
)
end
)]
)
end,
perform(Driver, Params)
end,
butterbee@webdriver:map_state(_pipe@2, Driver)
end.