我对硒的隐含等待有疑问?正如我们知道的,隐式等待是动态等待,这意味着如果我们提到等待10秒才能加载任何元素,但如果元素在4秒内加载,那么driver就会退出等待。
所以,问题是,驱动程序是如何知道该元素在4秒内加载的,并让我们从等待中出来的?我们在隐式等待中没有提到任何条件,比如寻找任何元素的可见性,然后出来,那么隐式等待是如何调用才能走出等待的呢?
发布于 2020-02-13 19:22:08
隐式等待发生在驱动程序级别,显式等待发生在编程级别。大多数人都没有意识到这一点。
隐式等待只检查它是否存在,因此您不必像显式等待那样指定任何条件。但我已经提出了一项议案,希望在Chrome (参见这里的https://bugs.chromium.org/p/chromedriver/issues/detail?id=2016)和火狐浏览器中也包含隐含的等待可见性,Chrome已经纳入了这一变化,但火狐仍然没有。我要求他们包括它,因为火狐传统驱动程序等待元素的存在和可见性,所以我希望在这里也有同样的变化。
发布于 2020-02-15 00:03:10
不能使用Selenium动态处理Implicit Wait。在他的史诗comment Jim Evans Maintainer - DotNet client / IEDriverServer中提到,implicitlyWaits通常(总是可能不会)在WebDriver系统的remote端实现。这意味着ImplicitWait是在中对WebDriver变体进行烘焙的,即GeckoDriver、IEDriverServer、ChromeDriver、安装到匿名Firefox (Selenium RC)中的Java扩展以及WebDriver远程WebDriver服务器(selenium-WebDriver-Standalone.jar)。
一旦您设置了implicitly_wait,WebDriver实例将能够携带此配置直到其生命周期。要设置等待时间的时间跨度,您可以:
driver.implicitly_wait(5)
driver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
如果您在任何时候想要删除ImplicitWait,您可以按如下方式实现:
driver.implicitly_wait(0)
TimeUnit.SECONDS);
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(0);
https://stackoverflow.com/questions/60205018
复制相似问题