[−][src]Crate thirtyfour
Thirtyfour is a Selenium library for Rust, for automated website UI testing.
It supports the full W3C WebDriver spec. Tested with Chrome and Firefox although any W3C-compatible WebDriver should work.
Both sync and async 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
Examples
The following examples assume you have a selenium server running at localhost:4444, and a demo web app running at http://webappdemo
You can set these up using docker-compose, as follows:
docker-compose up -d --build
The included web app demo is purely for demonstration / unit testing purposes and is not required in order to use this library in other projects.
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?; // Navigate to URL. driver.get("http://webappdemo").await?; // Navigate to page, by chaining futures together and awaiting the result. driver.find_element(By::Id("pagetextinput")).await?.click().await?; // Find element. let elem_div = driver.find_element(By::Css("div[data-section='section-input']")).await?; // Find element from element. let elem_text = elem_div.find_element(By::Name("input1")).await?; // Type in the search terms. elem_text.send_keys("selenium").await?; // Click the button. let elem_button = elem_div.find_element(By::Tag("button")).await?; elem_button.click().await?; // Get text value of element. let elem_result = driver.find_element(By::Name("input-result")).await?; assert_eq!(elem_result.text().await?, "selenium"); 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)?; // Navigate to URL. driver.get("http://webappdemo")?; // Navigate to page. driver.find_element(By::Id("pagetextinput"))?.click()?; // Find element. let elem_div = driver.find_element(By::Css("div[data-section='section-input']"))?; // Find element from element. let elem_text = elem_div.find_element(By::Name("input1"))?; // Type in the search terms. elem_text.send_keys("selenium")?; // Click the button. let elem_button = elem_div.find_element(By::Tag("button"))?; elem_button.click()?; // Get text value of element. let elem_result = driver.find_element(By::Name("input-result"))?; assert_eq!(elem_result.text()?, "selenium"); Ok(()) }
Re-exports
pub use common::capabilities::chrome::ChromeCapabilities; |
pub use common::capabilities::desiredcapabilities::*; |
pub use common::capabilities::edge::EdgeCapabilities; |
pub use common::capabilities::firefox::FirefoxCapabilities; |
pub use common::capabilities::ie::InternetExplorerCapabilities; |
pub use common::capabilities::opera::OperaCapabilities; |
pub use common::capabilities::safari::SafariCapabilities; |
pub use common::command::By; |
pub use common::cookie::Cookie; |
pub use common::keys::Keys; |
pub use common::keys::TypingData; |
pub use common::scriptargs::ScriptArgs; |
pub use common::types::*; |
Modules
action_chain | |
common | |
error | |
sync |
Structs
Alert | Struct for managing alerts. |
RemoteConnectionAsync | Asynchronous remote connection with the Remote WebDriver server. |
ScriptRet | Helper struct for getting return values from scripts. See the examples for WebDriver::execute_script() and WebDriver::execute_async_script(). |
SwitchTo | Struct for switching between frames/windows/alerts. |
WebDriver | The WebDriver struct encapsulates an async Selenium WebDriver browser session. For the sync driver, see sync::WebDriver. |
WebElement | The WebElement struct encapsulates a single element on a page. |