use thirtyfour::prelude::*;
use thirtyfour_query::{ElementPoller, ElementQueryable, ElementWaitable};
use tokio::time::Duration;
#[tokio::main]
async fn main() -> color_eyre::Result<()> {
color_eyre::install()?;
let caps = DesiredCapabilities::chrome();
let mut driver = WebDriver::new("http://localhost:4444", &caps).await?;
driver.set_implicit_wait_timeout(Duration::new(0, 0)).await?;
let poller =
ElementPoller::TimeoutWithInterval(Duration::new(20, 0), Duration::from_millis(1000));
driver.config_mut().set("ElementPoller", poller)?;
driver.get("https://wikipedia.org").await?;
let elem_form = driver.query(By::Id("search-form")).first().await?;
let elem_text = elem_form
.query(By::Css("thiswont.match"))
.or(By::Id("searchInput"))
.desc("search input")
.first()
.await?;
elem_text.send_keys("selenium").await?;
let elem_button =
elem_form.query(By::Css("button[type='submit']")).desc("search button").first().await?;
elem_button.click().await?;
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?;
driver.query(By::ClassName("firstHeading")).first().await?;
assert_eq!(driver.title().await?, "Selenium - Wikipedia");
Ok(())
}