要執(zhí)行腳本,我們需要進行適當?shù)牟僮骱?,等待應用程序之間的同步。來看看以達到同樣的方式。
Thread.sleep代碼是一個靜態(tài)的等待,不是在腳本中使用,因為它是無需睡眠狀態(tài)的一個很好的方法。
Thread.Sleep(1000); //Will wait for 1 second.
一個明確的等待,等待某個條件進一步處理之前發(fā)生。它主要用于當我們想要點擊或采取行動的對象,一旦它是可見的。
WebDriver driver = new FirefoxDriver(); driver.get("Enter an URL"S); WebElement DynamicElement = (new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(By.id("DynamicElement")));
隱式等待的情況下,如果網(wǎng)絡驅動器找不到,因為它的不可用性的立即的對象。webdriver將等待指定的隱含的等待時間,也不會嘗試在指定時間內(nèi)找到的元素了。一旦指定的時間限制被超越,webdriver將嘗試再次搜索該元素的最后一面。如果成功,將繼續(xù)進行執(zhí)行,但如果失敗,它會拋出異常。這是一種全局的等待,這意味著這種等待是適用于整個驅動程序。因此,硬編碼這種等待更長的時間時期將阻礙該腳本執(zhí)行時間。
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可以出現(xiàn)在5秒或者甚至它可以采取90秒。在這種情況下,我們定義的時間等待的狀態(tài)的最大數(shù)量,以及與該查詢的對象狀態(tài)的是否存在等的頻率。
讓我們假定,我們將60秒可用一個元素在網(wǎng)頁上,但每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")); } } );