Java 中 findElement() 和 findElements() 的区别

10 Sept 2024 | 5 分钟阅读

在使用Java和Selenium进行Web自动化测试时,有一些基本的工具和函数是每个自动化工程师都必须了解的。其中就包括findElement()和findElements()。这些方法对于在页面上定位Web元素至关重要,但它们具有不同的用途和独特的应用场景。

在本节中,我们将深入探讨Java Selenium中findElement()和findElements()的区别。我们还将提供完整的Java程序和示例输出,以说明它们在实际场景中的用法。

理解基础知识

在深入探讨区别之前,让我们先对这两种方法建立一个基本了解

findElement()

  • findElement() 是Selenium WebDriver接口提供的一个方法。
  • 它用于定位第一个与给定条件匹配的元素。
  • 如果未找到匹配的元素,它将抛出NoSuchElementException。
  • findElement() 返回一个单独的WebElement对象。

findElements()

  • findElements() 是Selenium WebDriver接口提供的另一个方法。
  • 它用于定位所有与给定条件匹配的元素。
  • 如果未找到匹配的元素,它将返回一个空列表(而不是null)。
  • findElements() 返回一个WebElement对象列表。

区别 1:单数与复数

findElement() 和 findElements() 之间最明显的区别在于它们的名称,这暗示了它们的返回类型。findElement() 返回一个单独的WebElement,而 findElements() 返回一个 WebElement 列表。

下面是一个演示此区别的简单程序:

输出

Single Element Text: Example Domain
Number of Multiple Elements: 4

正如我们所见,findElement() 返回一个单独的WebElement,而 findElements() 返回一个 WebElement 列表。

区别 2:异常处理

这两种方法之间另一个重要的区别在于它们如何处理页面上未找到匹配元素时的异常。

findElement()

  • 当 findElement() 未找到匹配的元素时,它将抛出 NoSuchElementException。

findElements()

  • 当 findElements() 未找到任何匹配的元素时,它将返回一个空列表(而不是null)。

下面是一个演示异常处理区别的程序:

输出

Exception caught: no such element: Unable to locate element: {"method":"id","selector":"nonExistentElement"}
Number of Elements Found: 0

在此程序中,我们尝试查找一个 ID 不存在的元素和一个类名不存在的元素。

正如我们所见,当 findElement() 未找到匹配元素时会抛出异常,而 findElements() 则直接返回一个空列表而不会抛出异常。

区别 3:使用场景

选择 findElement() 还是 findElements() 主要取决于具体的测试场景以及我们打算如何处理定位到的元素。

findElement()

  • 当您期望只有一个元素符合您的条件,并且您想与该元素进行交互或对其进行断言时,请使用 findElement()。
  • 它非常适合于需要定位元素的第一个出现实例的场景,例如点击按钮或从标题中提取文本。

findElements()

  • 当您期望有多个元素符合您的条件,并且您想与每个元素进行交互或对其进行断言时,请使用 findElements()。
  • 它对于需要验证多个元素是否存在的情况非常有用,例如检查搜索结果的数量或从具有多行的表中提取数据。

UseCasesExample.java

输出

Total Links on the Page: 10

findElement() 和 findElements() 之间的主要区别

方面findElement()findElements()
目的定位第一个匹配的元素。定位所有匹配的元素。
返回值返回一个单独的 WebElement 对象。返回一个 WebElement 对象列表。
异常处理当未找到匹配的元素时,抛出 NoSuchElementException。当未找到匹配的元素时,返回一个空列表(而不是null)。
用例适用于我们期望只有一个元素符合条件,并且我们希望与该元素进行交互或对其进行断言的情况。非常适合于需要定位元素第一个出现实例的场景,例如点击按钮或从标题中提取文本。适用于我们期望多个元素符合条件,并且我们希望与每个元素进行交互或对其进行断言的情况。对于需要验证多个元素是否存在的情况非常有用,例如检查搜索结果的数量或从具有多行的表中提取数据。

总结

在Java Selenium自动化测试领域,理解 findElement() 和 findElements() 之间的区别至关重要。正如我们在本节中所探讨的,这些方法具有不同的用途和独特的应用场景。

总而言之,findElement() 用于定位和交互单个元素,如果未找到则抛出异常。findElements() 用于定位多个元素,如果未找到则返回一个空列表。通过根据您的测试需求选择适当的方法,我们可以编写高效且有效的自动化脚本,轻松地导航和验证Web页面。请记住,这些方法只是Selenium工具集中的一部分,掌握它们对于构建可靠的自动化解决方案至关重要。