在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}");
        }
    }
}

推荐答案

我在thirtyfour中找不到一个函数可以做你想要的事情,而你所做的本质上就是Python版本背后所做的事情(即使民意调查时间相同),所以我认为这是你应该做的事情.

Rust相关问答推荐

WebDriver等待三十四?(Rust Se)

阻止websocket中断的中断中断的终端(操作系统错误4)

为什么我的梅森素数代码的指数越大,速度就越快?

Arrow RecordBatch as Polars DataFrame

像这样的铁 rust 图案除了‘选项’之外,还有其他 Select 吗?

JSON5中的变量类型(serde)

零拷贝按步骤引用一段字节

如何将实现多个特征的 struct 传递给接受这些特征为&;mut?

减少指示ProgressBar在Rust中的开销

是否可以使用Serde/Rust全局处理无效的JSON值?

类型生命周期绑定的目的是什么?

如何迭代存储在 struct 中的字符串向量而不移动它们?

需要哪些编译器优化来优化此递归调用?

相当于 Rust 中 C++ 的 std::istringstream

部署Rust发布二进制文件的先决条件

为什么带有生命周期指定的方法不能被调用两次?

为什么分配对变量的引用使我无法返回它

tokio async rust 的 yield 是什么意思?

覆盖类型的要求到底是什么?为什么单个元素元组满足它?

Rust 生命周期:不能在方法内重新borrow 可变字段