在我们的Selenium自动化测试中,我们隐式和显式等待。按照JimEvan的想法,不要混为一谈。因此计划删除隐式等待。
对于我们的测试,每当我们与元素交互时,我们都会使用ignoring显式等待其可见,可点击等NoSuchElementException。这就是为什么我不认为它会NoSuchElementException立即抛出。
NoSuchElementException
这样可以确保删除隐式等待不会影响我的测试。除此之外,我想知道它是否有可能破坏测试。根据您的经验,我想了解它的影响,因此要求在此分享您的观点。
你看对了。@JimEvans在讨论中明确指出:
问题的部分原因是隐式等待通常(但可能并非总是如此!)在WebDriver系统的“远程”侧实现。这意味着它们被“嵌入”到IEDriverServer.exe,chromedriver.exe,安装在匿名Firefox配置文件中的WebDriver Firefox扩展以及Java远程WebDriver服务器(selenium-server- standalone.jar)。显式等待专门在“本地”语言绑定中实现。使用RemoteWebDriver时,事情变得更加复杂,因为您可能同时使用了系统的本地端和远程端。
因此,与元素交互时,显式等待是任务。
现在,按照WebDriverWait的构造函数:
public WebDriverWait(WebDriver driver, long timeOutInSeconds)
NotFoundException
WebDriverWait(WebDriver driver, long timeOutInSeconds, long sleepInMillis)
因此,WebDriverWait()默认情况下会忽略NotFoundException,并且直接已知的子类为:
WebDriverWait()
NoAlertPresentException
NoSuchContextException
NoSuchCookieException
NoSuchFrameException
NoSuchWindowException
从WebDriverWait.java的源代码中:
/** * Wait will ignore instances of NotFoundException that are encountered (thrown) by default in * the 'until' condition, and immediately propagate all others. You can add more to the ignore * list by calling ignoring(exceptions to add). * * @param driver The WebDriver instance to pass to the expected conditions * @param timeOutInSeconds The timeout in seconds when an expectation is called * @param sleepInMillis The duration in milliseconds to sleep between polls. * @see WebDriverWait#ignoring(java.lang.Class) */
因此,在使用 WebDriverWait时, 您将不会遇到 NoSuchElementException 。如果在 WebDriverWait 到期之前没有返回所需的元素,您将面临timeoutException 。