browser_use/dom/
mod.rs

1//! DOM extraction and manipulation module
2//!
3//! This module provides functionality for extracting and working with the DOM structure
4//! of web pages. It includes:
5//! - ElementNode: Representation of DOM elements
6//! - DomTree: Complete DOM tree with indexing for interactive elements
7//! - SelectorMap: Mapping of indices to element selectors
8
9pub 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
21/// Extract the DOM tree from a browser tab
22pub fn extract_dom(tab: &Arc<Tab>) -> Result<DomTree> {
23    DomTree::from_tab(tab)
24}
25
26/// Extract and simplify the DOM tree
27pub 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}