• Selenium Video Tutorials

Selenium - 同步



为了同步脚本执行和应用程序,我们需要在执行适当的操作后等待。让我们看看实现相同目标的方法。

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 将再次尝试最后一次搜索元素。成功后,它继续执行;失败后,它抛出异常。

这是一种全局等待,这意味着等待适用于整个驱动程序。因此,将此等待硬编码为较长时间段会影响执行时间。

WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("Enter an URL");
WebElement DynamicElement = driver.findElement(By.id("DynamicElement"));

流畅等待

FluentWait 实例定义了等待条件发生的最大时间量,以及检查对象条件存在的频率。

假设我们将等待 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"));
   }
});
selenium_user_interactions.htm
广告