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
- Async / await support
- Synchronous support
- Create new browser session via Selenium Standalone or Grid
- Automatically close browser session on drop
- All W3C WebDriver and WebElement methods supported
- Find elements (via all common selectors)
- Send keys to elements, including key-combinations
- Execute Javascript
- Action Chains
- Cookies
- Switch to frame/window/element/alert
- Alert support
- Capture / Save screenshot of browser or individual element
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.
java -jar selenium-server-standalone-3.141.59.jar
Async example:
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?;
driver.get("https://wikipedia.org").await?;
let elem_form = driver.find_element(By::Id("search-form")).await?;
let elem_text = elem_form.find_element(By::Id("searchInput")).await?;
elem_text.send_keys("selenium").await?;
let elem_button = elem_form.find_element(By::Css("button[type='submit']")).await?;
elem_button.click().await?;
driver.find_element(By::ClassName("firstHeading")).await?;
assert_eq!(driver.title().await?, "Selenium - Wikipedia");
Ok(())
}
Sync example:
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)?;
driver.get("https://wikipedia.org")?;
let elem_form = driver.find_element(By::Id("search-form"))?;
let elem_text = elem_form.find_element(By::Id("searchInput"))?;
elem_text.send_keys("selenium")?;
let elem_button = elem_form.find_element(By::Css("button[type='submit']"))?;
elem_button.click()?;
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