1pub mod element;
10pub mod selector_map;
11pub mod tree;
12
13pub use element::{BoundingBox, ElementNode};
14pub use selector_map::{ElementSelector, SelectorMap};
15pub use tree::DomTree;
16
17use crate::error::Result;
18use headless_chrome::Tab;
19use std::sync::Arc;
20
21pub fn extract_dom(tab: &Arc<Tab>) -> Result<DomTree> {
23 DomTree::from_tab(tab)
24}
25
26pub fn extract_simplified_dom(tab: &Arc<Tab>) -> Result<DomTree> {
28 let mut tree = DomTree::from_tab(tab)?;
29 tree.simplify();
30 Ok(tree)
31}
32
33#[cfg(test)]
34mod tests {
35 use super::*;
36
37 #[test]
38 fn test_element_node_export() {
39 let element = ElementNode::new("div");
40 assert_eq!(element.tag_name, "div");
41 }
42
43 #[test]
44 fn test_selector_map_export() {
45 let map = SelectorMap::new();
46 assert!(map.is_empty());
47 }
48
49 #[test]
50 fn test_dom_tree_export() {
51 let root = ElementNode::new("body");
52 let tree = DomTree::new(root);
53 assert_eq!(tree.root.tag_name, "body");
54 }
55}