basic_navigation/
basic_navigation.rs

1//! Basic navigation example demonstrating `Viewpoint`'s browser automation.
2//!
3//! This example launches a headless Chromium browser, navigates to a URL,
4//! and demonstrates different wait states.
5//!
6//! # Running
7//!
8//! Make sure Chromium is installed and accessible, then run:
9//!
10//! ```sh
11//! cargo run --example basic_navigation
12//! ```
13
14use std::time::Duration;
15
16use viewpoint_core::{Browser, DocumentLoadState};
17
18#[tokio::main]
19async fn main() -> Result<(), Box<dyn std::error::Error>> {
20    println!("Launching browser...");
21
22    // Launch a headless browser
23    let browser = Browser::launch()
24        .headless(true)
25        .timeout(Duration::from_secs(30))
26        .launch()
27        .await?;
28
29    println!("Browser launched successfully!");
30
31    // Create a new browser context (isolated environment)
32    let context = browser.new_context().await?;
33    println!("Created browser context: {}", context.id());
34
35    // Create a new page
36    let page = context.new_page().await?;
37    println!("Created page with target: {}", page.target_id());
38
39    // Navigate to a URL with default wait (Load event)
40    println!("\nNavigating to example.com...");
41    let response = page.goto("https://example.com").goto().await?;
42    println!("Navigation complete! URL: {}", response.url());
43
44    // Navigate with DomContentLoaded wait (faster)
45    println!("\nNavigating to httpbin.org with DomContentLoaded wait...");
46    let response = page
47        .goto("https://httpbin.org/html")
48        .wait_until(DocumentLoadState::DomContentLoaded)
49        .timeout(Duration::from_secs(15))
50        .goto()
51        .await?;
52    println!("Navigation complete! URL: {}", response.url());
53
54    // Navigate with custom referer
55    println!("\nNavigating with custom referer...");
56    let response = page
57        .goto("https://httpbin.org/headers")
58        .referer("https://google.com")
59        .wait_until(DocumentLoadState::Load)
60        .goto()
61        .await?;
62    println!("Navigation complete! URL: {}", response.url());
63
64    // Close the browser
65    println!("\nClosing browser...");
66    browser.close().await?;
67    println!("Done!");
68
69    Ok(())
70}