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")); } } );