在Python和Java的Selenium中,可以等待URL更改为特定值. crate thirtyfour
中是否有类似的Rust 功能?
Java示例:
new WebDriverWait(driver, 20).Until(ExpectedConditions.UrlToBe("my-url"));
现在,我写了这个等待函数:
use tokio::time;
use tokio::time::{Duration, Instant};
use anyhow::{bail, Context, Result};
use thirtyfour::{prelude::*, Key};
async fn wait_for_url(driver: &WebDriver, url: &str, timeout: &Duration) -> Result<()> {
let start = Instant::now();
loop {
time::sleep(Duration::from_millis(500)).await;
let current_url = driver.current_url().await?;
if current_url.as_str() == url {
return Ok(());
}
if &(time::Instant::now() - start) > timeout {
bail!("Timeout waiting for {url}. Current url is {current_url}");
}
}
}