何时使用隐式等待以及在哪里使用



我对Selenium Webdriver提供的隐式等待方法有些困惑。

  1. 何时使用隐式等待

    a-对于页面加载(使用driver.get时)或Ajax弹出加载,例如假设我在编辑框中输入某些内容并且正在发生一些查找或Ajax调用。

  2. 在哪里使用隐式等待

    应该在所有方法之后使用Ajax调用或页面加载发生,还是只使用一次就足够了(我只是从Selenium RC中获取参考,我们可以在其中使用Selenium.SetSpeed Method)。

谢谢阿伦

  1. 显式等待是您定义的代码,用于等待特定条件发生,然后再继续执行代码。最坏的情况是 Thread.sleep() ,它将条件设置为等待的确切时间段。提供了一些方便的方法,可帮助您编写仅根据需要等待的代码。 WebDriverWaitExpectedCondition相结合是实现这一目标的一种方式。示例如下:

    WebDriverWait wait = new WebDriverWait(driver, 10);
    WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));
    

但是,根据语言实现的不同,会有所不同。在此处查看有关ExpectedCondition的更多信息

  1. 隐式等待是告诉 WebDriver 在尝试查找一个或多个元素(如果它们不是立即可用)时轮询 DOM 一段时间。默认设置为 0。设置后,将为 WebDriver 对象实例的生存期设置隐式等待。下面是隐式等待的实现:

     driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    

这两个定义都来自硒hq和最完美的定义。

在工具QA中有一个很好的解释,如何以及何时使用它们。再加上隐式、显式和 FLUENT 等待之间的比较,值得一看。

  • 隐式等待和显式等待与我们在程序中使用的驱动程序实例相关。 首先关于显式等待我们可以使用显式等待特定条件/Web 元素来发生/单击,其生存期取决于创建的 Wait 对象。

例:

         WebDriverWait  explicit_wait_Example = new WebDriverWait(driver, 10);
         explicit_wait_Example.until(ExpectedConditions.elementToBeClickable(By_Locator)).click();
上面是使用显式等待的示例,直到这是

使用这种等待的最有效和最有效的方法之一。

  • 其次,当谈到隐式等待时,这种等待与生命相伴而生的驱动程序实例。只需声明一次,就可以在调用驱动程序实例的任何位置使用它。
  • 关于你提到的问题,无论是在Ajax电话之后还是在页面之后加载,所以我建议检查您创建了多少个驱动程序类的实例。 因为一旦你声明了一个驱动程序实例的隐式等待,你就不必再次声明该微粒驱动程序实例。
  • 当您
  • 确定时间时,程序中使用隐式等待由网页上的所有 Web 元素加载/可见和您发现时间作为变化因素之一的某些Web元素它正在加载,然后您可以使用显式等待。

对于 ajax 调用,我更喜欢显式等待。但是,如果您可以弄清楚 ajax 调用的最小时间戳是多少,则可以在 implicitlyWait 中提供。

隐式等待永久强制实施在驱动程序上。所以你不需要一次又一次地声明。它会影响驱动程序等待特定时间,直到它抛出NoSuchElementException。但是,如果您更多地使用 xpath,那么最好在隐式等待中提供更大的超时。

要补充的另一件事是,隐式等待只影响findElement和findElements函数。其他功能不受其影响。

最新更新