【问题标题】:What is the difference between implicit wait and AjaxElementLocatorFactory?隐式等待和 AjaxElementLocatorFactory 有什么区别?
【发布时间】:2019-11-15 10:18:36
【问题描述】:

根据定义,

隐式等待是告诉 Web Driver 在尝试查找一个或多个元素(如果它们不是立即可用的)时轮询 DOM 一段时间。

Implicit wait

WebElement 的超时将在 AjaxElementLocatorFactory 的帮助下分配给 Object 页面类

AjaxElementLocatorFactory

从上面看,隐式等待和 AjaxElementLocatorFactory 之间究竟有什么区别并不清楚。请解释一下。

【问题讨论】:

    标签: selenium selenium-webdriver page-factory implicitwait ajax-element-locator-factory


    【解决方案1】:

    Implicit Wait

    隐式等待是一种配置 WebDriver 以在尝试查找元素时轮询 DOM 一段时间的方法,如果它们在 HTML DOM 中没有立即可用。默认设置为 0。设置后,会在 WebDriver 对象实例的生命周期内设置隐式等待。

    您可以在以下位置找到一些相关讨论:


    AjaxElementLocatorFactory

    AjaxElementLocatorFactory 是在使用 AjaxElementLocatorFactory 类时实现服务员的关键优势之一。

    AjaxElementLocatorFactory 基本上是在 Page Factory 模式中实现的 概念,仅在 WebElement 用于任何操作时识别 WebElement,即 WebElement 的 timeOut可以在 AjaxElementLocatorFactory 的帮助下将其分配给 Object 页面类。

    • 一个例子:

      AjaxElementLocatorFactory myFactory = new AjaxElementLocatorFactory(driver, 20);
      PageFactory.initElements(myFactory, this)
      
    • 说明:

      在上面的代码块中,当对元素执行操作时,等待其可见性仅从那一刻开始。如果在给定的时间间隔内没有找到该元素,测试用例执行将抛出NoSuchElementException异常。

    可以在How to implement AjaxElementLocatorFactory through Selenium and Page Factory?找到相关讨论

    【讨论】:

      【解决方案2】:

      隐式等待与整个驱动程序对象相关(适用于在驱动程序上下文中执行的所有查找)。 AjaxElementLocatorFactory 在您启动 Page 类的元素时使用。这样等待仅与您在 Page 类中描述的元素相关。

      由于AjaxElementLocatorFactory 使用基本查找但只是用一些更灵活的逻辑包装它,适用于所有的隐式等待在您的驱动程序上下文中执行的查找可能会添加到您的超时中为您的AjaxElementLocator 设置(视情况而定)。因此不建议混合使用,一般建议避免使用隐式等待(默认设置为 0)。

      【讨论】:

      • 根据 [stackoverflow.com/questions/54914570/… 的问题,隐式等待和 AjaxElementLocatorFactory 的组合似乎会导致问题
      • 我相信您提到的 OP 问题是 AjaxElementLocator 仍然以常规方式查找元素,但将该查找包装在一种可重复的尝试中。因此,每次它尝试检查元素是否已加载时,它都会隐式等待应用于 all 查找并自行添加一些睡眠。所以不建议同时使用隐式等待和一些自定义等待。
      猜你喜欢
      • 2014-05-04
      • 2018-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-22
      • 2017-04-19
      • 1970-01-01
      • 2015-04-23
      相关资源
      最近更新 更多