隐性vs显性vs流利Wai

2024-07-03 04:23:31 发布

您现在位置:Python中文网/ 问答频道 /正文

隐式、显性、流畅的等待有什么区别?在

如果我们在隐式等待中设置10秒,在10秒之前,在3秒内只有元素被定位。在

那时候会发生什么?它将等待10秒或继续。在


Tags: 定位元素区别显性
1条回答
网友
1楼 · 发布于 2024-07-03 04:23:31

ImplicitWait

{{{a1}是一个实现,配置WebDriver实例,即{}的{{},以轮询HTML DOM在一定时间段内的一定时间内(中间的NANOSECONDSMICROSECONDSMILLISECONDS{{{{{}}<强>,HOURSDAYS时。默认设置是0这意味着driver当找到一个或多个元素的指令时,搜索开始,结果立即可用。在

在这种情况下,重新加载网页后,立即搜索可能会/可能找不到一个或多个元素。因此您的Automation Script可能面临以下任何一种异常:

  • NoSuchElementException
  • TimeoutException
  • ElementNotVisibleException
  • ElementNotSelectableException

因此我们引入ImplicitWait。通过引入ImplicitWaitdriver将轮询HTML DOM查找元素的配置时间量。到那时,您一直在寻找的一个或多个元素可能在HTML DOM中可用。在您的代码中,您已经将ImplicitWait设置为10秒,driver将轮询HTML DOM秒。在

  • Python

    driver.implicitly_wait(10)
    
  • Java

    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    

最后,一旦您设置了ImplicitWait,那么WebDriver实例,即driver就能够将此配置保留到其生命周期。但如果您需要将WebDriver实例的时间粗糙度(即driver更改为wait,则可以按如下方式重新配置:

  • Python

    driver.implicitly_wait(5)
    
  • Java

    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
    

如果在任何时候您想使ImplicitWait无效,您可以按如下方式重新配置它:

  • Python

    driver.implicitly_wait(0)
    
  • Java

    driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
    

Fluent Wait

^{}^{}接口的实现,通过它我们可以动态地配置timeoutpolling interval。可以定义FluentWait的实例来配置等待条件的最大时间量以及必须检查条件的频率。用户还可以配置wait,以便在等待某个元素时忽略特定类型的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

ExplicitWait俗称^{}^{}的一种特殊实现,用户可以通过它定义、配置和实现WebDriver实例,等待满足某个条件后再继续下一行代码。有一些方法可以帮助我们实现ExplicitWait,这些方法只需等待所需的时间。WebDriverWaitExpectedCondition结合是实现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();

说明:

ExplicitWait的这个实现在抛出一个TimeoutException之前最多等待10秒,或者如果它找到了元素,那么它将在0到10秒内返回。默认情况下,WebDriverWait每隔500毫秒调用ExpectedCondition,直到成功返回。成功ExpectedCondition函数类型的essful返回值是true或not null对象的Boolean值。在

预期条件:

自动化Testing Web/Mobile Applications的Web浏览器时,会遇到一些常见的情况。Java、C和Python绑定包含这些方便的方法,因此我们不必自己编写ExpectedCondition类,也不必为它们创建自己的实用程序包。一些Expected Conditions是:

  • alertIsPresent()
  • elementToBeClickable(locator)
  • elementToBeSelected(WebElement)
  • frameToBeAvailableAndSwitchToIt(locator)
  • invisibilityOf(element)

您可以在这里找到^{}支持的所有方法。在


此特定查询:

  • 当搜索单个元素时,驱动程序将轮询HTML DOM,直到找到该元素或配置的超时过期,然后抛出一个NoSuchElementException。在
  • 当搜索多个元素时,驱动程序将轮询HTML DOM,直到至少找到一个元素或配置的超时过期。在

因此,根据第一种情况,驾驶员只需等待3秒。在

相关问题 更多 >