【问题标题】:How to use findElements method with implicit waiting?如何使用带有隐式等待的 findElements 方法?
【发布时间】:2021-12-08 20:51:19
【问题描述】:

在方法文档中是这样写的:

隐式等待时,只要找到的集合超过0个,该方法就会返回,如果超时则返回一个空列表

如我所见(如果我错了,请纠正我),当方法找到一个元素时,它会返回它而不搜索其他元素。 那么在使用 findElement 方法时,使用这种方法有什么好处呢?

【问题讨论】:

    标签: selenium selenium-webdriver findelement


    【解决方案1】:

    findElements 方法返回与传递的定位器匹配的网络元素的列表,而findElement 方法将始终返回单个网络元素。
    同样在许多情况下,您在已经完全加载的页面上应用findElementfindElements 方法。在这种情况下,findElements 将向您返回与传递的定位器匹配的 所有 网络元素的列表。
    但是,为了在加载页面中获取所有匹配元素,您不能有效地将 findElements隐式等待一起使用。
    预期条件实现显式等待 应改为使用。
    如果您知道与该页面上显示的传递定位器匹配的元素的确切数量,您可以使用此方法:

    wait.until(ExpectedConditions.numberOfElementsToBe(element, expectedElementsAmount))
    

    如果你知道它应该至少是一些已知数量的元素,你可以使用这个方法:

    wait.until(ExpectedConditions.numberOfElementsToBeMoreThan(element, expectedElementsAmount))
    

    【讨论】:

      【解决方案2】:

      您需要在整个上下文中阅读该行。

      • findElements(): 使用给定机制查找当前页面中的所有元素。 此方法受“隐式等待”时间的影响 执行时间。当隐式等待时,此方法将返回为 一旦找到的集合中有超过 0 个项目,或者将 如果达到超时,则返回一个空列表。

      这里,超过 0 个项目 意味着 大于 0n > 0 但肯定会找到当前页面中的所有元素,直到超时到达。

      【讨论】:

      • 这绝对是一个错误的答案!一旦检测到至少一个与传递的定位器匹配的元素,findElements 方法将返回捕获的匹配元素,并且不会等到定义的超时!
      • @DebanjabB,对不起,我听不懂你的回答。你能解释一下这句话Here, more than 0 items意味着大于0,即n > 0但肯定会找到当前页面内的所有元素,直到达到超时。换一种方式?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      • 2017-07-26
      • 2017-02-13
      • 2012-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多