Crate playwright_rs

Crate playwright_rs 

Source
Expand description

playwright: High-level Rust bindings for Microsoft Playwright

This crate provides the public API for browser automation using Playwright.

§Examples

§Basic Navigation and Interaction

use playwright_rs::{Playwright, SelectOption};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let playwright = Playwright::launch().await?;
    let browser = playwright.chromium().launch().await?;
    let page = browser.new_page().await?;

    // Navigate using data URL for self-contained test
    let _ = page.goto(
        "data:text/html,<html><body>\
            <h1 id='title'>Welcome</h1>\
            <button id='btn' onclick='this.textContent=\"Clicked\"'>Click me</button>\
        </body></html>",
        None
    ).await;

    // Query elements with locators
    let heading = page.locator("#title").await;
    let text = heading.text_content().await?;
    assert_eq!(text, Some("Welcome".to_string()));

    // Click button and verify result
    let button = page.locator("#btn").await;
    button.click(None).await?;
    let button_text = button.text_content().await?;
    assert_eq!(button_text, Some("Clicked".to_string()));

    browser.close().await?;
    Ok(())
}

§Form Interaction

use playwright_rs::{Playwright, SelectOption};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let playwright = Playwright::launch().await?;
    let browser = playwright.chromium().launch().await?;
    let page = browser.new_page().await?;

    // Create form with data URL
    let _ = page.goto(
        "data:text/html,<html><body>\
            <input type='text' id='name' />\
            <input type='checkbox' id='agree' />\
            <select id='country'>\
                <option value='us'>USA</option>\
                <option value='uk'>UK</option>\
                <option value='ca'>Canada</option>\
            </select>\
        </body></html>",
        None
    ).await;

    // Fill text input
    let name = page.locator("#name").await;
    name.fill("John Doe", None).await?;
    assert_eq!(name.input_value(None).await?, "John Doe");

    // Check checkbox
    let checkbox = page.locator("#agree").await;
    checkbox.set_checked(true, None).await?;
    assert!(checkbox.is_checked().await?);

    // Select option
    let select = page.locator("#country").await;
    select.select_option("uk", None).await?;
    assert_eq!(select.input_value(None).await?, "uk");

    browser.close().await?;
    Ok(())
}

§Element Screenshots

use playwright_rs::Playwright;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let playwright = Playwright::launch().await?;
    let browser = playwright.chromium().launch().await?;
    let page = browser.new_page().await?;

    // Create element to screenshot
    let _ = page.goto(
        "data:text/html,<html><body>\
            <div id='box' style='width:100px;height:100px;background:blue'></div>\
        </body></html>",
        None
    ).await;

    // Take screenshot of specific element
    let element = page.locator("#box").await;
    let screenshot = element.screenshot(None).await?;
    assert!(!screenshot.is_empty());

    browser.close().await?;
    Ok(())
}

§Assertions (expect API)

use playwright_rs::{expect, Playwright};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let playwright = Playwright::launch().await?;
    let browser = playwright.chromium().launch().await?;
    let page = browser.new_page().await?;

    let _ = page.goto(
        "data:text/html,<html><body>\
            <button id='enabled'>Enabled</button>\
            <button id='disabled' disabled>Disabled</button>\
            <input type='checkbox' id='checked' checked />\
        </body></html>",
        None
    ).await;

    // Assert button states with auto-retry
    let enabled_btn = page.locator("#enabled").await;
    expect(enabled_btn.clone()).to_be_enabled().await?;

    let disabled_btn = page.locator("#disabled").await;
    expect(disabled_btn).to_be_disabled().await?;

    // Assert checkbox state
    let checkbox = page.locator("#checked").await;
    expect(checkbox).to_be_checked().await?;

    browser.close().await?;
    Ok(())
}

Re-exports§

pub use protocol::Browser;
pub use protocol::BrowserContext;
pub use protocol::BrowserType;
pub use protocol::Page;
pub use protocol::Playwright;
pub use protocol::Response;
pub use protocol::ElementHandle;
pub use protocol::Locator;
pub use protocol::GotoOptions;
pub use protocol::WaitUntil;
pub use protocol::CheckOptions;
pub use protocol::ClickOptions;
pub use protocol::FillOptions;
pub use protocol::HoverOptions;
pub use protocol::PressOptions;
pub use protocol::SelectOptions;
pub use protocol::FilePayload;
pub use protocol::SelectOption;
pub use protocol::ScreenshotClip;
pub use protocol::ScreenshotOptions;
pub use protocol::ScreenshotType;
pub use protocol::BrowserContextOptions;
pub use protocol::Cookie;
pub use protocol::Geolocation;
pub use protocol::LocalStorageItem;
pub use protocol::Origin;
pub use protocol::StorageState;
pub use protocol::Viewport;
pub use protocol::FulfillOptions;
pub use protocol::Route;
pub use api::LaunchOptions;

Modules§

api
protocol

Enums§

Error
Errors that can occur when using playwright-core

Constants§

DEFAULT_TIMEOUT_MS
Default timeout in milliseconds for Playwright operations.

Functions§

expect
Creates an expectation for a locator with auto-retry behavior.

Type Aliases§

Result
Result type alias for playwright-core operations