0

我对硒的隐含等待有疑问?我们知道隐式等待是动态等待,这意味着如果我们提到等待 10 秒以加载任何元素,但如果元素在 4 秒内加载,则驱动程序退出等待。

所以,问题是驱动程序如何知道元素在 4 秒内加载并让我们从等待中出来?我们没有提到隐式等待中的任何条件,例如查找任何元素的可见性然后出来,那么隐式等待究竟是如何调用来退出等待的?

4

2 回答 2

0

无法使用Selenium动态处理隐式等待。在他的史诗评论中,Jim Evans [Maintainer - DotNet client / IEDriverServer] 提到,implicitlyWaits通常(总是可能不会)在WebDriver系统remote一侧实现。这意味着ImplicitWait包含WebDriver变体中,即GeckoDriverIEDriverServerChromeDriver、安装到匿名 Firefox 配置文件 ( Selenium RC ) 中的WebDriver Firefox 扩展和 Java 远程 WebDriver 服务器 (selenium-server-standalone.jar)。

一旦你设置了implicitly_waitWebDriver实例将能够携带这个配置直到它的生命周期。要设置等待时间的时间跨度,您可以:

  • 蟒蛇

    driver.implicitly_wait(5)
    
  • 爪哇

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

    driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
    

如果您想在任何时候删除ImplicitWait它,您可以按如下方式实现:

  • 蟒蛇

    driver.implicitly_wait(0)
    
  • 爪哇

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

    driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(0);
    
于 2020-02-14T16:03:10.490 回答
0

隐式等待发生在驱动程序级别,显式等待发生在编程级别。大多数人都没有意识到这一点。

隐式等待仅检查它是否存在,因此您不必像显式等待那样指定任何条件。但是我已经提出了在 Chrome 中包含隐式等待可见性的票(请参见此处https://bugs.chromium.org/p/chromedriver/issues/detail?id=2016)和 Firefox,Chrome 已经合并了该更改但火狐还没有。我要求他们包含它,因为 Firefox Legacy 驱动程序等待元素的存在和可见性,所以我希望在这里也一样。

于 2020-02-13T11:22:08.483 回答