selenium-webdriver - 需要一个字段作为 Rust 特征的一部分

标签 selenium-webdriver struct rust traits pageobjects

是否有可能要求结构具有特定字段作为特征的一部分?我正在使用 thirfour_sync crate 在 Rust 中进行一些 Web 自动化。我想为将实现它们的页面对象编写一些具有默认实现的特征。基本上,我知道一个事实,即每个要实现此特征的结构都会有一个名为“驱动程序”的字段,该字段包含对 WebDriver 结构的引用。我想在我的特征的默认实现中使用这个驱动字段。

error[E0609]: no field `driver` on type `&Self`
  --> src\base_order_details.rs:13:30
   |
10 | / pub trait BaseOrderDetails {
11 | |
12 | |     fn oid(&self) -> WebDriverResult<String> {
13 | |         let oid_title = self.driver.find_element(By::XPath("//*[text()=\"Order ID:\"]"))?;
   | |                              ^^^^^^
...  |

有没有办法让编译器知道任何实现这个特性的东西都会有一个 &WebDriver 类型的现场驱动程序?

最佳答案

我在起草问题时找到了问题的答案。不,您不能从特征访问字段。作为解决方案,我向特征添加了一个 get_driver 方法并在默认实现中使用它,因此用户可以简单地实现 get_driver 方法并默认其余部分。

pub trait BaseOrderDetails {

    fn get_driver(&self) -> &WebDriver;

    fn oid(&self) -> WebDriverResult<String> {
        let oid_title = self.get_driver().find_element(By::XPath("//*[text()=\"Order ID:\"]"))?;

        // do some other stuff

我在 Rust Book 关于特征的章节中找到了这个解决方案,在默认实现下:https://doc.rust-lang.org/book/ch10-02-traits.html

关于selenium-webdriver - 需要一个字段作为 Rust 特征的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68171921/

相关文章:

javascript - 无法使用 watir webdriver 填充 iframe 中的只读文本框

c - 困惑解决程序在运行时崩溃

c++ - 对 vector 中的较高值和较低值进行排序

rust - 精明的一生理解移动关键字

node.js - "Hello world"从 Chrome 而非 curl 测量时,Rust 网络服务器比 Node 慢

php - Selenium 与 PHP firefox 浏览器问题

java - 在 Java 中使用 Selenium 2 将鼠标悬停在 WebElement 上

java - Selenium : Handling Loading screens obscuring the web elements.(Java)

c# - 静态成员导致结构布局中的循环

rust - 结果<bool, T> 模式匹配