如何将内置的 ExpectedConditions 与 FluentWait 一起使用?
How to use built-in ExpectedConditions with FluentWait?
在 Selenium (Java) 中,我想将 ExpectedConditions 与 FluentWait 一起使用。我正在尝试以下不起作用的代码。它不是在等待元素出现在 DOM.
中
有人可以帮忙吗?
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(10, TimeUnit.SECONDS)
.pollingEvery(1, TimeUnit.SECONDS);
wait.until(ExpectedConditions.presenceOfElementLocated(By.id("mybutton")));
注意:我已经用 WebDriverWait 试过了,它是工作文件。我正在尝试使用 FluentWait,因为我想控制轮询超时。
是的,NarendraR 说的是正确的。当您为 FluentWait 创建对象时,使用相同的对象来写入 ExpectedConditions。
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver).withTimeout(10, TimeUnit.SECONDS).pollingEvery(1, TimeUnit.SECONDS);
wait.unitl(ExpectedConditions.presenceOfElementLocated(By.id("mybutton")));
一些背景知识:
流畅等待
Fluent Wait
is the implementation of the Wait
界面,用户可以动态配置其超时和轮询间隔。 FluentWait
实例定义等待条件的最长时间以及检查条件的频率。用户还可以配置等待在等待时忽略特定类型的异常,例如在页面上搜索元素时NoSuchElementExceptions
。
WebDriverWait
WebDriverWait
is the tailor-made version of FluentWait 使用 WebDriver 实例。
您可以在这两个 QA Implicit vs Explicit vs Fluent Wait
and Differences between impilicit, explicit and fluentwait
.
预期条件
ExpectedConditions
是定制的固定条件,通常在 webdriver 测试中很有用。
根据你的问题,你是 trying with FluentWait since you want to control polling timeout
,你仍然可以通过 WebDriverWait
实现相同的效果,如下所示:
WebDriverWait
有 3 个 构造函数 其中之一是 :
WebDriverWait(WebDriver driver, long timeOutInSeconds, long sleepInMillis)
详情:
public WebDriverWait(WebDriver driver, long timeOutInSeconds, long sleepInMillis)
This wait will ignore instances of NotFoundException that are encountered by default in the `until` condition, and immediately propagate all others. You can also add more to the ignore list by calling ignoring(exceptions to add).
Parameters:
driver - The WebDriver instance to pass to the expected conditions
timeOutInSeconds - The timeout in seconds when an expectation is called
sleepInMillis - The duration in milliseconds to sleep between polls (polling interval).
解决方案:
可以使用上面提到的WebDriverWait
的构造函数,仍然可以控制轮询间隔。
Note : To keep your program logic simple and understandable use WebDriverWait
instead of Fluent Wait
untill and unless absolute necessary.
琐事:
进一步了解Fluent Wait
可以关注讨论
在 Selenium (Java) 中,我想将 ExpectedConditions 与 FluentWait 一起使用。我正在尝试以下不起作用的代码。它不是在等待元素出现在 DOM.
中有人可以帮忙吗?
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(10, TimeUnit.SECONDS)
.pollingEvery(1, TimeUnit.SECONDS);
wait.until(ExpectedConditions.presenceOfElementLocated(By.id("mybutton")));
注意:我已经用 WebDriverWait 试过了,它是工作文件。我正在尝试使用 FluentWait,因为我想控制轮询超时。
是的,NarendraR 说的是正确的。当您为 FluentWait 创建对象时,使用相同的对象来写入 ExpectedConditions。
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver).withTimeout(10, TimeUnit.SECONDS).pollingEvery(1, TimeUnit.SECONDS);
wait.unitl(ExpectedConditions.presenceOfElementLocated(By.id("mybutton")));
一些背景知识:
流畅等待
Fluent Wait
is the implementation of the Wait
界面,用户可以动态配置其超时和轮询间隔。 FluentWait
实例定义等待条件的最长时间以及检查条件的频率。用户还可以配置等待在等待时忽略特定类型的异常,例如在页面上搜索元素时NoSuchElementExceptions
。
WebDriverWait
WebDriverWait
is the tailor-made version of FluentWait 使用 WebDriver 实例。
您可以在这两个 QA Implicit vs Explicit vs Fluent Wait
and Differences between impilicit, explicit and fluentwait
.
预期条件
ExpectedConditions
是定制的固定条件,通常在 webdriver 测试中很有用。
根据你的问题,你是 trying with FluentWait since you want to control polling timeout
,你仍然可以通过 WebDriverWait
实现相同的效果,如下所示:
WebDriverWait
有 3 个 构造函数 其中之一是 :WebDriverWait(WebDriver driver, long timeOutInSeconds, long sleepInMillis)
详情:
public WebDriverWait(WebDriver driver, long timeOutInSeconds, long sleepInMillis) This wait will ignore instances of NotFoundException that are encountered by default in the `until` condition, and immediately propagate all others. You can also add more to the ignore list by calling ignoring(exceptions to add). Parameters: driver - The WebDriver instance to pass to the expected conditions timeOutInSeconds - The timeout in seconds when an expectation is called sleepInMillis - The duration in milliseconds to sleep between polls (polling interval).
解决方案:
可以使用上面提到的WebDriverWait
的构造函数,仍然可以控制轮询间隔。
Note : To keep your program logic simple and understandable use
WebDriverWait
instead ofFluent Wait
untill and unless absolute necessary.
琐事:
进一步了解Fluent Wait
可以关注讨论