Crates.io Documentation Build Status

Thirtyfour is a full-featured Selenium library for Rust, inspired by the Python Selenium library.

It supports the W3C WebDriver spec. Tested with Chrome and Firefox although any W3C-compatible WebDriver should work.

Both synchronous and async / await APIs are provided (see examples below).

Features

Why 'thirtyfour' ?

It is named after the atomic number for the Selenium chemical element (Se).

Examples

The following examples assume you have a selenium server running at localhost:4444.

i.e.

ignore java -jar selenium-server-standalone-3.141.59.jar

Async example:

```rust use thirtyfour::error::WebDriverResult; use thirtyfour::{By, DesiredCapabilities, WebDriver}; use tokio;

[tokio::main]

async fn main() -> WebDriverResult<()> { let caps = DesiredCapabilities::chrome(); let driver = WebDriver::new("http://localhost:4444/wd/hub", &caps).await?;

 // Navigate to https://wikipedia.org.
 driver.get("https://wikipedia.org").await?;
 let elem_form = driver.find_element(By::Id("search-form")).await?;

 // Find element from element.
 let elem_text = elem_form.find_element(By::Id("searchInput")).await?;

 // Type in the search terms.
 elem_text.send_keys("selenium").await?;

 // Click the search button.
 let elem_button = elem_form.find_element(By::Css("button[type='submit']")).await?;
 elem_button.click().await?;

 // Look for header to implicitly wait for the page to load.
 driver.find_element(By::ClassName("firstHeading")).await?;
 assert_eq!(driver.title().await?, "Selenium - Wikipedia");

 Ok(())

} ```

Sync example:

```rust use thirtyfour::error::WebDriverResult; use thirtyfour::{By, DesiredCapabilities, sync::WebDriver};

fn main() -> WebDriverResult<()> { let caps = DesiredCapabilities::chrome(); let driver = WebDriver::new("http://localhost:4444/wd/hub", &caps)?;

 // Navigate to https://wikipedia.org.
 driver.get("https://wikipedia.org")?;
 let elem_form = driver.find_element(By::Id("search-form"))?;

 // Find element from element.
 let elem_text = elem_form.find_element(By::Id("searchInput"))?;

 // Type in the search terms.
 elem_text.send_keys("selenium")?;

 // Click the search button.
 let elem_button = elem_form.find_element(By::Css("button[type='submit']"))?;
 elem_button.click()?;

 // Look for header to implicitly wait for the page to load.
 driver.find_element(By::ClassName("firstHeading"))?;
 assert_eq!(driver.title()?, "Selenium - Wikipedia");

 Ok(())

} ```

LICENSE

This work is dual-licensed under MIT or Apache 2.0. You can choose either license if you use this work.

SPDX-License-Identifier: MIT OR Apache-2.0