selenium .get Element By() 索引 0 与单个 .getElementByid()

selenium .getElementsBy() index 0 vs single .getElementBy()

我正在学习 Selenium 并且有一个问题我找不到答案。

除了“By”定位符之外,两者之间的规格是否有任何真正的区别? WebDriver.getElementsBy().get(0) 与单身 WebDriver.getElementBy()

它们来自同一来源吗?他们内部有相同的方法吗?如果我总是开始使用 getElementsBy().get(0) 而不是单一的,它会影响我的测试用例吗?'

谢谢。

实际上 getElementBy() 内部使用 getElementsBy().get(0) 所以它们在功能上几乎相同。

参见source code

  /**
   * Find a single element. Override this method if necessary.
   *
   * @param context A context to use to find the element.
   * @return The WebElement that matches the selector.
   */
  public WebElement findElement(SearchContext context) {
    List<WebElement> allElements = findElements(context);
    if (allElements == null || allElements.isEmpty()) {
      throw new NoSuchElementException("Cannot locate an element using " + toString());
    }
    return allElements.get(0);
  }

区别 是,如果 getElementBy() 的查找失败,您将得到异常,而后一种情况则不会。

  1. findElement() 用于通过提供的定位器机制(如 id、xpath、css 等)查找当前页面上的第一个 Web 元素,而 findElements() 用于通过提供的定位器机制查找当前页面上的所有 Web 元素id、xpath、css等定位器机制
  2. findElement() 将 return 只有第一个网络元素,即使定位器定位了多个网络元素。 findElements() returns 所有匹配的网络元素。 findElement() 方法在内部调用 findElements() 方法本身和 return 第一个索引的 Web 元素。
  3. Return 类型的 findElement() 方法是 WebElement 而 return 类型的 findElements() 方法是列表。
  4. 如果找不到匹配的元素,findElement() 将抛出 NoSuchElementException。如果找不到匹配的元素,findElements() 将 return 一个空列表。这就是 findElements() 是检查不存在 Web 元素的更好方法的原因。请更多地关注这一点。 NoSuchElementException 由 findElement() 而不是 findElements() 抛出。

结论: 尽可能使用 findelements,因为您将避免 NoSuchElementException ,而且它应该更快,因为 findelement 正在调用 findelements 并且 return 只有找到第一个元素。