15个版本 (5个破坏性更新)
0.7.0 |
|
---|---|
0.6.1 | 2021年3月27日 |
0.6.0 | 2021年1月12日 |
0.5.3 | 2020年12月29日 |
0.4.2 | 2020年11月30日 |
#11 in #geckodriver
每月下载量31次
75KB
1.5K SLoC
为thirtyfour crate提供高级元素查询/轮询接口。
这些接口目前是实验性的,一旦稳定,可能会合并到主thirtyfour
crate中。
如果您能通过测试并提供反馈,将不胜感激。
使用方法
ElementQuery
首先,导入以下内容
use thirtyfour_query::{ElementPoller, ElementQueryable};
然后,设置默认轮询行为
// Disable implicit timeout in order to use new query interface.
driver.set_implicit_wait_timeout(Duration::new(0, 0)).await?;
let poller = ElementPoller::TimeoutWithInterval(Duration::new(20, 0), Duration::from_millis(500));
driver.config_mut().set("ElementPoller", poller)?;
其他ElementPoller选项也可用,例如NoWait和NumTriesWithInterval。根据需要,可以在每个查询的基础上覆盖这些选项。
现在,使用查询接口可以执行以下操作
let elem_text =
driver.query(By::Css("thiswont.match")).or(By::Id("searchInput")).first().await?;
这将在每个轮询迭代中执行两次查询,并返回第一个匹配的结果。您也可以像这样对匹配臂进行过滤
driver.query(By::Css("thiswont.match")).with_text("testing")
.or(By::Id("searchInput")).with_class("search").and_not_enabled()
.first().await?;
要获取所有匹配的元素而不是第一个元素,只需将first()改为all(),您将得到一个Vec。
ElementQuery还允许用户使用自定义谓词,这些谓词接受一个&WebElement
参数并返回一个WebDriverResult<bool>
。
ElementWaiter
首先,导入以下内容
use thirtyfour_query::{ElementPoller, ElementWaitable};
接下来,设置默认轮询行为(与ElementQuery相同 - 两者使用相同的轮询设置)
// Disable implicit timeout in order to use new query interface.
driver.set_implicit_wait_timeout(Duration::new(0, 0)).await?;
let poller = ElementPoller::TimeoutWithInterval(Duration::new(20, 0), Duration::from_millis(500));
driver.config_mut().set("ElementPoller", poller)?;
现在可以执行以下操作
elem.wait_until().displayed().await?;
// You can optionally provide a nicer error message like this.
elem.wait_until().error("Timed out waiting for element to disappear").not_displayed().await?;
elem.wait_until().enabled().await?;
elem.wait_until().clickable().await?;
等等。请参阅ElementWaiter
文档以获取可用谓词的完整列表。
ElementWaiter 还允许用户使用自定义谓词,这些谓词接受一个 &WebElement
参数并返回一个 WebDriverResult<bool>
。
在 thirtyfour_query::conditions
模块中,还提供了一系列预定义的谓词,以便于使用。
use thirtyfour_query::conditions;
elem.wait_until().conditions(vec![
conditions::element_is_displayed(true),
conditions::element_is_clickable(true)
]).await?;
查看 conditions
模块以获取可用谓词的完整列表。注意:谓词要求您指定是否忽略错误。
这些谓词(或您自己的)也可以作为过滤器提供给 ElementQuery
。
许可协议
本作品双重许可,适用于 MIT 或 Apache 2.0。如果您使用本作品,可以选择任一许可协议。
SPDX-许可-标识符: MIT 或Apache-2.0
依赖项
~8–24MB
~338K SLoC