【发布时间】:2017-07-26 19:12:04
【问题描述】:
我知道,根据一些意见,在完美的情况下,我不应该使用隐式等待。但是我的用户界面很慢;在所有可能发生渲染的地方添加显式等待将是一项相当大的努力。 20 秒的标准隐式等待,在驱动程序初始化时设置,完美覆盖 80% 的等待。
但是我需要处理剩下的 20%。有时我需要等待一个元素消失 - 在这种情况下,隐式等待意味着额外的 20 秒。有时我需要检查一个元素是否存在,但不要等待它整整 20 秒(因为该元素在正常执行流程中通常不存在)。
所以,我自然要暂时禁用隐式等待:
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
new WebDriverWait(driver, MY_TIMEOUT)).until(ExpectedConditions.WHATEVER_I_NEED);
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
但这会稳定吗?或者改变隐式等待(在这种情况下,从 20 到 0 再回到 20)有点危险?
【问题讨论】:
-
对此完全有效。更重要的是避免混淆隐式和显式等待的正确方法。等待的混合导致一些难以调试的问题,等待时间长。问题是您可能会忘记关闭并开启隐式等待。最好编写一个实用函数,通过传递显式等待条件来包装此逻辑,并在您的代码库中使用它。
-
@Grasshopper 你能把这个变成答案吗?
标签: java selenium selenium-webdriver wait