/home/runner/work/chrme/chrme/_build/test/cover/eunit/chrme_dom.html

1 -module(chrme_dom).
2 -export([get_document/1, query_selector/3, get_outer_html/2, set_attribute_value/4,
3 remove_node/2, register_document_updated_handler/2, unregister_document_updated_handler/2]).
4
5 %% Get the root document node
6 -spec get_document(Name :: chrme_session:name()) -> {ok, map()} | {error, term()}.
7 get_document(Name) ->
8
:-(
case chrme_cdp:call(Name, <<"DOM.getDocument">>, #{}) of
9 {ok, Resp} ->
10
:-(
Root = maps:get(<<"root">>, Resp),
11
:-(
{ok, Root};
12
:-(
Err -> Err
13 end.
14
15 %% Find a child node matching selector
16 -spec query_selector(Name :: chrme_session:name(), NodeId :: integer(), Selector0 :: klsn:binstr()) -> {ok, integer()} | {error, term()}.
17 query_selector(Name, NodeId, Selector0) ->
18
:-(
Sel = chrme_util:to_binary(Selector0),
19
:-(
case chrme_cdp:call(Name, <<"DOM.querySelector">>, #{nodeId => NodeId, selector => Sel}) of
20 {ok, Resp} ->
21
:-(
{ok, maps:get(<<"nodeId">>, Resp)};
22
:-(
Err -> Err
23 end.
24
25 %% Get outer HTML of a node
26 -spec get_outer_html(Name :: chrme_session:name(), NodeId :: integer()) -> {ok, binary()} | {error, term()}.
27 get_outer_html(Name, NodeId) ->
28
:-(
case chrme_cdp:call(Name, <<"DOM.getOuterHTML">>, #{nodeId => NodeId}) of
29 {ok, Resp} ->
30
:-(
{ok, maps:get(<<"outerHTML">>, Resp)};
31
:-(
Err -> Err
32 end.
33
34 %% Set an attribute value on an element
35 -spec set_attribute_value(Name :: chrme_session:name(), NodeId :: integer(), AttrName0 :: klsn:binstr(), AttrValue0 :: klsn:binstr()) -> {ok, map()} | {error, term()}.
36 set_attribute_value(Name, NodeId, AttrName0, AttrValue0) ->
37
:-(
NameBin = chrme_util:to_binary(AttrName0),
38
:-(
ValBin = chrme_util:to_binary(AttrValue0),
39
:-(
chrme_cdp:call(Name, <<"DOM.setAttributeValue">>,
40 #{nodeId => NodeId, name => NameBin, value => ValBin}).
41
42 %% Remove a node from the document
43 -spec remove_node(Name :: chrme_session:name(), NodeId :: integer()) -> {ok, map()} | {error, term()}.
44 remove_node(Name, NodeId) ->
45
:-(
chrme_cdp:call(Name, <<"DOM.removeNode">>, #{nodeId => NodeId}).
46
47 %% Subscribe to documentUpdated events
48 -spec register_document_updated_handler(Name :: chrme_session:name(), Fun :: fun(() -> any())) -> reference().
49 register_document_updated_handler(Name, Fun) ->
50
:-(
Ref = make_ref(),
51
:-(
CallbackName = {chrme_dom, register_document_updated_handler, Name, Ref},
52
:-(
CallbackFun = fun
53
:-(
(stop) -> false;
54 (Msg = #{<<"method">> := <<"DOM.documentUpdated">>, <<"params">> := Params}) ->
55
:-(
Fun(Params),
56
:-(
true;
57
:-(
(_) -> false
58 end,
59
:-(
chrme_ws_apic:add_callback(Name, {CallbackName, CallbackFun}),
60
:-(
Ref.
61
62 -spec unregister_document_updated_handler(Name :: chrme_session:name(), Ref :: reference()) -> ok.
63 unregister_document_updated_handler(Name, Ref) ->
64
:-(
CallbackName = {chrme_dom, register_document_updated_handler, Name, Ref},
65
:-(
chrme_ws_apic:remove_callback(Name, CallbackName),
66
:-(
ok.
Line Hits Source