testing_library_dom/
get_node_text.rs

1use wasm_bindgen::JsCast;
2use web_sys::{Element, HtmlInputElement, Node};
3
4use crate::util::node_list_to_vec;
5
6pub fn get_node_text(node: &Node) -> String {
7    if node
8        .dyn_ref::<Element>()
9        .map(|element| {
10            element
11                .matches("input[type=submit], input[type=button], input[type=reset]")
12                .is_ok_and(|value| value)
13        })
14        .unwrap_or(false)
15    {
16        node.unchecked_ref::<HtmlInputElement>().value()
17    } else {
18        node_list_to_vec::<Node>(node.child_nodes())
19            .into_iter()
20            .filter_map(|child| {
21                (child.node_type() == Node::TEXT_NODE)
22                    .then(|| child.text_content())
23                    .flatten()
24            })
25            .collect::<Vec<_>>()
26            .join("")
27    }
28}