blob: cfca939a3c11c492c19d54d2c9994bc95ad9cc79 [file] [log] [blame]
//! Requires chromedriver running on port 4444:
//!
//! chromedriver --port=4444
//!
//! Run as follows:
//!
//! cargo run --example wikipedia
use thirtyfour::prelude::*;
#[tokio::main]
async fn main() -> color_eyre::Result<()> {
color_eyre::install()?;
let caps = DesiredCapabilities::chrome();
let driver = WebDriver::new("http://localhost:4444", &caps).await?;
// Navigate to https://wikipedia.org.
driver.get("https://wikipedia.org").await?;
let elem_form = driver.query(By::Id("search-form")).first().await?;
// Find element from element using multiple selectors.
// Each selector will be executed once per poll iteration.
// The first element to match will be returned.
let elem_text = elem_form
.query(By::Css("thiswont.match"))
.or(By::Id("searchInput"))
.desc("search input")
.first()
.await?;
// Type in the search terms.
elem_text.send_keys("selenium").await?;
// Click the search button. Optionally name the element to make error messages more readable.
let elem_button =
elem_form.query(By::Css("button[type='submit']")).desc("search button").first().await?;
elem_button.click().await?;
// Wait until the button no longer exists (two different ways).
elem_button.wait_until().error("Timed out waiting for button to become stale").stale().await?;
driver.query(By::Css("button[type='submit']")).nowait().not_exists().await?;
// Look for header to implicitly wait for the page to load.
driver.query(By::ClassName("firstHeading")).first().await?;
assert_eq!(driver.title().await?, "Selenium - Wikipedia");
// Always explicitly close the browser. There are no async destructors.
driver.quit().await?;
Ok(())
}