Synchronization 同步
同步
要执行脚本,我们需要进行适当的操作后,等待应用程序之间的同步。来看看以达到同样的方式。
THREAD.SLEEP
Thread.sleep代码是一个静态的等待,不是在脚本中使用,因为它是无需睡眠状态的一个很好的方法。
Thread.Sleep(1000); //Will wait for 1 second.
显式等待
一个明确的等待,等待某个条件进一步处理之前发生。它主要用于当我们想要点击或采取行动的对象,一旦它是可见的。
WebDriver driver = new FirefoxDriver(); driver.get("Enter an URL"S); WebElement DynamicElement = (new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(By.id("DynamicElement")));
隐式等待
隐式等待的情况下,如果网络驱动器找不到,因为它的不可用性的立即的对象。webdriver将等待指定的隐含的等待时间,也不会尝试在指定时间内找到的元素了。一旦指定的时间限制被超越,webdriver将尝试再次搜索该元素的最后一面。如果成功,将继续进行执行,但如果失败,它会抛出异常。这是一种全局的等待,这意味着这种等待是适用于整个驱动程序。因此,硬编码这种等待更长的时间时期将阻碍该脚本执行时间。
WebDriver driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get("Enter an URL"); WebElement DynamicElement = driver.findElement(By.id("DynamicElement"));
流利等待
FluentWait用于当webelement可以出现在5秒或者甚至它可以采取90秒。在这种情况下,我们定义的时间等待的状态的最大数量,以及与该查询的对象状态的是否存在等的频率。
让我们假定,我们将60秒可用一个元素在网页上,但每10秒检查一次它的存在。
Wait wait = new FluentWait(driver) .withTimeout(60, SECONDS) .pollingEvery(10, SECONDS) .ignoring(NoSuchElementException.class); WebElement dynamicelement = wait.until(new Function<webdriver,webElement>() { public WebElement apply(WebDriver driver) { return driver.findElement(By.id("dynamicelement")); } } );