2017-07-06 169 views
0

我有一些测试和使用硒来运行它们。当搜索什么和在哪里使用隐式等待时,我看到了一个混合的评论。它应该仅在初始化测试时使用,还是应该在您希望隐式等待元素被发现时使用?隐含的等待硒

driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(20); 

回答

1

隐含的等待只能在初始化driver(如果有的话)时才使用。显式等待在调试时更容易跟踪,并且设计得更加细化,例如在Page Object之内。

在您的driver上设置隐含等待时间会对您的等待时间产生全局影响,同时保持设置相对于消费者或未来维护者隐藏起来。这可能会产生问题,特别是在通过WebDriverWait与明确的等待时间配对时。您的等待时间可能会意外增加。

下面是一个明确的等待的例子:

var webDriverWait = new WebDriverWait(driver, TimeSpan.FromSeconds(5)); 

webDriverWait.Until(ExpectedConditions.ElementExists(By.Id("testId")); 

两个和何时使用它们之间的优劣更透彻的对比可以发现here

+0

谢谢你的解释和答案。我应该在哪里放这个代码'var webDriverWait = new WebDriverWait(driver,TimeSpan.FromSeconds(5));' –

+0

这取决于。如果使用页面对象,如果您希望指定的时间在使用的任何地方都是统一的,那么它可以创建为与UI交互的单一方法(例如,LoginPage.Login())或类内部(例如LoginPage)在页面中。理想情况下,您希望在代码中具有特定的意义。 – Jordan

+0

如果您需要更多关于隐式和显式等待的详细信息 - 这些答案很好 - https://stackoverflow.com/a/15174978/631417,https://stackoverflow.com/a/28067495/631417 – Jordan