这非常令人沮丧。无论我到哪里,人们总是告诉我使用明确,隐含和流畅的等待。这些等待使您可以根据元素暂停。但是,光顾我们并删除工具和选项并不是一个好主意。在我目前的特定泡菜中,我有一个按钮,如果有人点击它太快就会消失。但是,它现在也被设计为立即出现。所以你必须等到它出现,然后等待足够的时间来经过,然后才点击按钮。有了这些建议,我觉得这是不可能的。在这种情况下,必须使用静态暂停或睡眠。出于某种原因,我甚至无法使用线程休眠,因为它似乎已经在Java 8本身或其他东西中被弃用。
隐式等待:
driver.manage().timeouts().implicitlyWait(TimeOut, TimeUnit.SECONDS);
显式等待:
WebDriverWait wait = new WebDriverWait(WebDriverRefrence,TimeOut);
可能通过术语静态等待和静态暂停你的意思是Thread.sleep()
,它在许多方面仍然有用。
然而,在通过Selenium执行测试时,诱导睡眠不是解决问题的优雅解决方案,因为诱导Thread.sleep(1000);
会降低整体测试执行性能。你可以在Selenium needs a sleep before going to the next page找到详细的讨论。
如果你需要诱导等待Implicit Waits是一个很好的开始。你可以在Using implicit wait in selenium找到详细的讨论。然而,由于当前的Web应用程序是通过JavaScript,Angular,ReactJS等构建的,因此Explicit Waits将是前进的方向。
所以,向前迈进你可以向Explicit Waits过渡。你可以在Replace implicit wait with explicit wait (selenium webdriver & java)找到详细的讨论。
在这一点上,实现Fluent Wait将更容易,你可以在Implicit vs Explicit vs Fluent Wait找到详细的讨论。