【发布时间】:2016-09-21 23:54:26
【问题描述】:
其他人已经问过这个问题,并且有一些答案,但他们没有一刻澄清。如果没有立即找到元素,隐式等待将等待指定的时间,然后在等待指定的时间后运行错误。这是否意味着隐式等待在第一秒检查元素,然后等待指定的时间并在最后一秒再次检查?
我知道显式等待每 500 毫秒轮询一次 DOM。如果测试需要更长的时间,隐式等待的实际用途是什么?
【问题讨论】:
标签: python selenium selenium-webdriver
其他人已经问过这个问题,并且有一些答案,但他们没有一刻澄清。如果没有立即找到元素,隐式等待将等待指定的时间,然后在等待指定的时间后运行错误。这是否意味着隐式等待在第一秒检查元素,然后等待指定的时间并在最后一秒再次检查?
我知道显式等待每 500 毫秒轮询一次 DOM。如果测试需要更长的时间,隐式等待的实际用途是什么?
【问题讨论】:
标签: python selenium selenium-webdriver
隐式等待是 selenium 内部的。您在初始化时设置一次。然后,每次网络驱动程序尝试查找一个元素时,它都会不断地(通过一些轮询)查找该 elmemt,直到“隐式等待”计时器到期。如果找到该元素,则它将继续执行,否则将引发 NoSuchElement 异常。所以它会在第一秒找到它,它会从等待循环中出来,否则如果它在最后一秒没有找到元素,它会抛出异常。
显式等待 用于需要等待某个条件为真的场景。例如元素的可见性。它的范围仅限于该特定调用。
您可以寻找Selenium documentation了解更多详情和示例
【讨论】:
在隐式等待的情况下,驱动程序会等待直到元素出现在 DOM 中,但同时它不保证元素可用。元素可能无法使用(例如按钮单击),或者元素当时可能没有定义形状。
就我们使用 selenium 而言,我们对页面上的所有元素都不感兴趣。所有元素甚至可能没有形状。但是 DOM 中所有元素的存在对于其他元素正常工作很重要。所以含蓄的等待。
在处理任何元素时,我们使用显式等待 (WebDriverwait) 或 FluentWait。
【讨论】: