何时使用隐式等待和使用位置

时间:2014-12-23 10:41:21

标签: selenium selenium-webdriver

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

  1. 何时使用隐式等待

    a-用于页面加载(当使用driver.get时)或用于Ajax PopUp加载比如说我在Edit Box中进行了一些操作,并且正在进行一些查找或Ajax调用。

  2. 使用隐式等待的位置

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

  3. 谢谢, 阿伦

3 个答案:

答案 0 :(得分:6)

  1. 显式等待是您定义的代码,用于在继续执行代码之前等待某个条件发生。最糟糕的情况是Thread.sleep(),它将条件设置为等待的确切时间段。提供了一些便捷方法,可帮助您编写仅在需要时等待的代码。 WebDriverWaitExpectedCondition结合使用是一种可以实现的方法。示例如下:

    WebDriverWait wait = new WebDriverWait(driver, 10);
    WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));
    
  2. 但是,根据语言实现的不同而有所不同。有关ExpectedCondition

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

       driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
      
    2. 这两个定义都来自seleniumhq和最完美的定义。

      toolsQA如何以及何时使用它们有一个很好的解释。加上隐式,显式和FLUENT 之间的比较值得一看。

答案 1 :(得分:0)

  • 隐式等待显式等待与我们在程序中使用的驱动程序实例相关。首先是明确的 等我们可以使用显式等待特定条件/ Web元素 发生/点击,它的生命取决于创建的Wait对象。

示例:

         WebDriverWait  explicit_wait_Example = new WebDriverWait(driver, 10);
         explicit_wait_Example.until(ExpectedConditions.elementToBeClickable(By_Locator)).click();

上面是使用显式等待的示例,直到哪一种是使用这种等待的最有效和最有效的方法之一。

  • 第二,当涉及到隐含等待时,这种等待与生命有关 驱动程序实例。只需声明一次即可使用 它在任何调用驱动程序实例的地方。
  • 关于您提到的问题,无论是在Ajax调用还是页面之后 加载,所以我建议检查你创建了多少个实例 司机班。因为一旦你声明隐含等待一个 驱动程序实例然后你不必再为此声明 微粒驱动器实例。
  • 当您确定时间时,程序中会使用隐式等待 由网页上的所有网页元素加载/显示和 某些网络元素,你发现时间是一个变化因素 它的加载然后你可以使用显式等待。

答案 2 :(得分:0)

对于ajax调用,我更喜欢显式等待。但是如果你能弄清楚ajax调用的最小时间戳是什么,你可以隐式地提供等等。

Implicitwait会永久强制执行。所以你不需要一次又一次地宣布。它会影响驱动程序等待特定时间直到它抛出NoSuchElementException。但是如果你更多地使用xpaths,那么在隐式等待中提供更大的超时会更好。

要添加的另一件事,implictlyWait仅影响findElement和findElements函数。其他功能不受影响。