为了账号安全,请及时绑定邮箱和手机立即绑定

Selenium 中的 FluentWait 如何实现 until() 方法

Selenium 中的 FluentWait 如何实现 until() 方法

明月笑刀无情 2022-06-08 17:05:12
selenium 文档中方法的语法until()如下:public <V> V until(java.util.function.Function<? super T,V> isTrue)相同的用法是这样的:WebDriver wait = new WebDriver(driver, 20);WebElement loginButton = wait.until(ExpectedConditions.elementToBeClickable(By.id("lgn-btn")));我无法理解该until()方法的语法和用法。我想知道语法是如何实现的。是的,我知道泛型,我们用它来了解编译时的错误,以便我们可以在运行时避免 ClassCastException。另外,我知道我们用来实现行为参数化的功能接口。我没有得到的是 和 之间的等价java.util.function.Function<? super T,V> isTrue)性ExpectedConditions.elementToBeClickable(By.id("id))。表达java.util.function.Function<? super T,V> isTrue是什么意思?
查看完整描述

1 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

您的问题中提到了四个不同的主题,您可以在下面找到详细信息:

java.util.function

java.util.function包包括为lambda 表达式和方法引用提供目标类型的功能接口。

几个例子是:

  • BiConsumer<T,U>: 表示接受两个输入参数并且不返回结果的操作。

  • BiFunction<T,U,R>: 表示一个接受两个参数并产生结果的函数。

  • BinaryOperator<T>: 表示对两个相同类型的操作数的操作,产生与操作数相同类型的结果。

  • BiPredicate<T,U>:表示两个参数的谓词(布尔值函数)。

  • Consumer<T>:表示接受单个输入参数且不返回结果的操作。

  • Function<T,R>: 表示接受一个参数并产生结果的函数。


类 FluentWait

该类public class FluentWait<T>扩展java.lang.Object并实现Wait<T>,这意味着它是Wait接口的实现,可以动态配置其超时和轮询间隔。每个 FluentWait 实例定义等待条件的最长时间,以及检查条件的频率。此外,用户可以将等待配置为在等待时忽略特定类型的异常,例如在页面上搜索元素时的NoSuchElementExceptions 。

修饰符之一是:

Modifier and Type       Method and Description

-----------------       ----------------------

<V> V                   until(java.util.function.Function<? super T,V> isTrue)


Specified by:

    until in interface Wait<T>

Type Parameters:

    V - The function's expected return type.

Parameters:

    isTrue - the parameter to pass to the ExpectedCondition

Returns:

    The function's return value if the function returned something different from null or false before the timeout expired.

Throws:

    TimeoutException - If the timeout expires.

此实现重复将此实例的输入值应用于给定函数,直到发生以下情况之一:

  • 该函数既不返回 null 也不返回 false

  • 该函数抛出一个未被忽略的异常

  • 超时到期

  • 当前线程被中断


接口预期条件

public interface ExpectedCondition<T>接口扩展com.google.common.base.Function<WebDriver,T>了对预期评估为既不为空也不为假的条件建模。示例包括确定网页是否已加载或元素是否可见。

请注意,它是ExpectedConditions幂等的。它们将由 循环调用,WebDriverWait并且对被测应用程序状态的任何修改都可能产生意想不到的副作用。


类预期条件

ExpectedConditions类是罐装的ExpectedCondition s,通常在 webdriver 测试中很有用。

几个使用示例:

  • elementToBeClickable()

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("element_css")));
  • visibilityOfElementLocated()

    new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("element_css")));
  • frameToBeAvailableAndSwitchToIt()

    new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("element_css")));
  • visibilityOfAllElementsLocatedBy()

    new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("element_css")));
  • attributeContains()

    new WebDriverWait(driver, 20).until(ExpectedConditions.attributeContains(driver.findElement(my_element), "src", "https"));



查看完整回答
反对 回复 2022-06-08
  • 1 回答
  • 0 关注
  • 157 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信