隐式,明确,流利等待有什么区别?
如果我们在隐式等待中设置10秒,在10秒之前设置,则在3秒内只能找到元素。
那个时候会发生什么?它将等待10秒或继续进行。
答案 0 :(得分:0)
ImplicitWait
强> ImplicitWait
是一个实施,用于配置 WebDriver
实例,即driver
以轮询 HTML DOM
一段时间( NANOSECONDS
, MICROSECONDS
, MILLISECONDS
,的中间点SECONDS
, MINUTES
, HOURS
或 DAYS
)时试图找到一个或多个元素,如果它们不是立即可用的。默认设置为 0 ,这意味着driver
在找到查找元素的指令时,搜索开始,结果立即可用。
在这种情况下,在重新加载网页之后,可能会立即搜索/找不到一个或多个元素。因此,Automation Script
可能面临以下任何例外:
NoSuchElementException
强> TimeoutException
强> ElementNotVisibleException
强> ElementNotSelectableException
强> 因此我们引入 ImplicitWait
。通过引入 ImplicitWait
,driver
将轮询 HTML DOM
了解配置的一段时间内的元素。到那时,HTML DOM
可能会提供您一直在寻找的元素。与您的代码一样,您已将 ImplicitWait
设置为 10 秒的值,driver
将轮询 {{1} 10 秒。
<强>的Python 强>:
HTML DOM
<强>爪哇强>:
driver.implicitly_wait(10)
最后,设置 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
后, ImplicitWait
实例即 WebDriver
能够携带这种配置直到它的生命周期。但是,如果您需要更改 driver
实例的粗略时间,即 WebDriver
更改为 driver
然后你可以按如下方式重新配置它:
<强>的Python 强>:
wait
<强>爪哇强>:
driver.implicitly_wait(5)
如果您想在任何时候取消 driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
,请按以下步骤重新配置:
<强>的Python 强>:
ImplicitWait
<强>爪哇强>:
driver.implicitly_wait(0)
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
强> Fluent Wait
是Wait
界面的实现,我们可以通过该界面配置 Fluent Wait
和 timeout
在飞行中。可以定义polling interval
的实例来配置等待条件的最大时间量以及必须检查条件的频率。用户还可以在等待页面上的 FluentWait
等元素时将等待配置为忽略特定类型的 exceptions
。
<强> NoSuchElementExceptions
强>
Usage
// Waiting 30 seconds for an element to be present on the page, checking
// for its presence once every 5 seconds.
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(30, SECONDS)
.pollingEvery(5, SECONDS)
.ignoring(NoSuchElementException.class);
WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(By.id("foo"));
}
});
强> ExplicitWait
通常称为WebDriverWait
,是FluentWait
的专门实现,用户可以通过该实现为 {{1}定义,配置和实施在继续下一行代码之前等待某个条件得到满足的实例实例。有一些方法可以帮助我们实施只需要等待的 ExplicitWait
。 WebDriver
与 ExplicitWait
相结合,可以实现 WebDriverWait
。
ExpectedCondition
ExplicitWait
的这种实现在投掷 import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
.
.
.
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("element_xpath")));
element.click();
之前等待最多10秒,或者如果它找到该元素,那么它将在0内返回到10秒。默认情况下, ExplicitWait
会每隔500毫秒调用 TimeoutException
,直到成功返回。 WebDriverWait
函数类型的成功返回值是 ExpectedCondition
值true或非null对象。
在为ExpectedCondition
自动化Web浏览器时,经常会遇到一些情况。 Java,C#和Python绑定包括那些方便的方法,因此我们不必自己编写 Boolean
类,也不必为它们创建自己的实用程序包。一些 Testing Web/Mobile Applications
是:
ExpectedCondition
强> Expected Conditions
强> alertIsPresent()
强> elementToBeClickable(locator)
强> elementToBeSelected(WebElement)
强> 您可以在此处找到Expected Conditions
支持的所有方法。
frameToBeAvailableAndSwitchToIt(locator)
,直到找到元素或配置的超时时间到期,然后再抛出 invisibilityOf(element)
< / strong>即可。 HTML DOM
,直到找到至少一个元素或配置的超时已过期。因此,根据第一种情况,驾驶员将只等待 3秒。
答案 1 :(得分:0)
如果将“隐式等待”设置为10秒,而将10秒设置为“隐式等待”,则3秒钟之内只能找到元素。
那个时间它将继续进行,而不是等待设置的时间。
答案 2 :(得分:0)
隐式等待将告诉Web驱动程序在引发“ NoSuchElementException”之前等待一定的时间。默认设置为0。一旦设置了时间,Web驱动程序将在等待该时间之前引发异常。如果给定10秒钟的等待时间,但在3秒钟时识别出元素,则3秒钟后将转到下一步。
显式等待是您定义的代码,用于在继续执行代码之前等待特定条件发生。显式等待将告诉Web驱动程序在引发NoSuchElementException异常之前等待某些条件,如visibleOfElementLocated和最长时间。您可以参考-https://configureselenium.blogspot.com/2019/07/implicit-explicit-fluent-wait-in.html