Skip to main content

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::HeaderEntry;
pub use protocol::Page;
pub use protocol::Playwright;
pub use protocol::Response;
pub use protocol::Request;
pub use protocol::ResourceTiming;
pub use protocol::AriaRole;
pub use protocol::BoundingBox;
pub use protocol::ElementHandle;
pub use protocol::FilterOptions;
pub use protocol::GetByRoleOptions;
pub use protocol::Locator;
pub use protocol::GotoOptions;
pub use protocol::WaitUntil;
pub use protocol::CheckOptions;
pub use protocol::ClickOptions;
pub use protocol::DragToOptions;
pub use protocol::FillOptions;
pub use protocol::HoverOptions;
pub use protocol::PressOptions;
pub use protocol::PressSequentiallyOptions;
pub use protocol::SelectOptions;
pub use protocol::TapOptions;
pub use protocol::WaitForOptions;
pub use protocol::WaitForState;
pub use protocol::Position;
pub use protocol::FilePayload;
pub use protocol::SelectOption;
pub use protocol::ScreenshotClip;
pub use protocol::ScreenshotOptions;
pub use protocol::ScreenshotType;
pub use protocol::AddScriptTagOptions;
pub use protocol::ColorScheme;
pub use protocol::EmulateMediaOptions;
pub use protocol::ForcedColors;
pub use protocol::Media;
pub use protocol::PdfMargin;
pub use protocol::PdfOptions;
pub use protocol::ReducedMotion;
pub use protocol::BrowserContextOptions;
pub use protocol::Cookie;
pub use protocol::Geolocation;
pub use protocol::LocalStorageItem;
pub use protocol::Origin;
pub use protocol::RecordHar;
pub use protocol::RecordVideo;
pub use protocol::StorageState;
pub use protocol::Viewport;
pub use protocol::FetchOptions;
pub use protocol::FetchResponse;
pub use protocol::FulfillOptions;
pub use protocol::Route;
pub use protocol::UnrouteBehavior;
pub use api::ConnectOverCdpOptions;
pub use api::LaunchOptions;

Modules§

api
protocol

Structs§

PageExpectation
Page-level expectation for screenshot assertions.
ScreenshotAssertionOptions
Options for screenshot assertions
ScreenshotAssertionOptionsBuilder
Builder for ScreenshotAssertionOptions

Enums§

Animations
Animation control for screenshots
Error
Errors that can occur when using playwright-core

Constants§

DEFAULT_TIMEOUT_MS
Default timeout in milliseconds for Playwright operations.
PLAYWRIGHT_VERSION
Playwright server version bundled with this crate.

Functions§

expect
Creates an expectation for a locator with auto-retry behavior.
expect_page
Creates a page-level expectation for screenshot assertions.

Type Aliases§

Result
Result type alias for playwright-core operations