定位策略 - Selenium Python

2024 年 10 月 6 日 | 6 分钟阅读

Selenium 和 Web 自动化

在 Web 自动化和测试领域,Selenium 是一款强大且应用广泛的工具。 它使开发人员和测试人员能够自动化与 Web 应用程序的交互,使其成为测试和质量保证过程中不可或缺的一部分。 然而,Selenium 自动化中的关键挑战之一是如何准确有效地在页面上查找 Web 元素。 这就是定位器策略发挥作用的地方。

Web 元素定位器

定位器的重要性在于,Selenium 通过识别和控制 Web 元素(如按钮、输入字段和链接)来与 Web 页面进行交互。 为此,Selenium 依赖于定位器,这些定位器是在 Web 页面的 HTML 结构中唯一标识这些元素的工具。 Selenium Python 中的定位器策略是用于从页面查找元素并在相同元素上执行过程的技术。 Selenium 的 Python 模块旨在通过 Python 执行自动化测试。

常见的定位器类型

Selenium 提供了不同类型的定位器来处理各种情况。 最常用的定位器包括

ID: 通过其特殊的 id 属性查找元素。

Name: 使用 name 属性来标识元素。

XPath: 使用 XPath 表达式来遍历 HTML 结构。

CSS 选择器: 使用 CSS 选择器进行精确识别。

链接文本和部分链接文本: 根据其可见文本查找链接。

选择正确的定位器策略对于确保自动化脚本的强大、可行和高效至关重要。

正确的定位器策略

  • 设置和用例的作用是选择合适的定位器策略,这取决于自动化脚本的特定设置和用例。 每种策略都有其优点和缺点,了解何时使用它们至关重要。
  • 定位器策略之间的折衷方案 不同的定位器策略提供不同程度的安全性和执行效率。 例如,ID 和 Name 定位器通常更快且不易更改,但可能并非所有元素都可用。 另一方面,XPath 和 CSS 选择器是灵活的,但在执行过程中可能更复杂且速度较慢。

使用 ID 和 Name 定位器

按 ID 查找元素

ID 属性对于 Web 页面上的每个元素都是唯一的。 这使其成为最高效的定位器策略之一。 要通过其 ID 使用 Selenium 在 Python 中查找元素,可以使用 find_element_by_id 策略

按名称查找元素

Name 属性是另一种直接定位器策略。 当元素共享一个公共名称属性时,它可能很有用。 要按名称查找元素

这些策略相对容易使用,并且适用于具有唯一 ID 或 Name 属性的元素。

XPath 和 CSS 选择器策略

XPath 定位器

XPath 是一种灵活的定位器策略,允许您浏览 XML 或 HTML 记录的元素和属性。 您可以使用 XPath 表达式来精确地精确定位元素。 要使用 XPath 查找元素

CSS 选择器定位器

CSS 选择器提供了另一种通过其属性及其与不同元素的关联来查找元素的非凡方法。 这就是您可以使用 CSS 选择器的方式

XPath 和 CSS 选择器定位器都在元素 ID 中提供精度,使其在复杂的 Web 页面结构中非常重要。

链接文本和部分链接文本策略

按文本查找链接

有时,您的自动化内容可能需要与 Web 页面上的链接进行交互。 Selenium 提供了两种定位器策略来实现这一目的:链接文本和部分链接文本。

链接文本: 此策略通过其精确的可见文本跟踪链接。

部分链接文本: 它基于其可见文本的部分匹配查找链接。

这些策略对于浏览 Web 页面和连接到超链接特别有用。

动态和相对 XPath 策略

动态 XPath 策略

Web 页面通常突出显示逐渐变化的元素,从而进行自动化测试。 动态 XPath 策略允许我们处理这些情况。

部分属性匹配: 使用 contains 来匹配属性值的一部分。

动态元素: 通过使用王牌字符(如 * 并以 ... 开头)来处理动态 ID 或属性。

这是协调具有唯一 ID 的元素的示例

相对 XPath

XPath 还允许您相对于已知元素进行浏览,从而提供灵活性和可靠性。 例如,您可以找到与其父元素或同级元素相关的元素。

处理框架和 Shadow DOM

当前的 Web 应用程序通常使用 iframe(内联框架)将来自不同来源的内容嵌入到 Web 页面中。 在 Selenium 中使用 iframe 时,您需要将设置更改为合适的边缘,以便与其元素进行通信。 要按名称或 ID 更改为边缘,可以使用

另一方面,如果边缘由 WebElement 定位,则可以使用以下方法进行切换

连接到框架内的元素后,您应该使用以下方法返回到默认内容

Shadow DOM

某些 Web 应用程序使用 Shadow DOM,这是一种 Web 标准,可将元素和样式封装在容器内。 Selenium 不直接支持 Shadow DOM,但您可以使用 JavaScript 与 Shadow DOM 元素进行通信。

这是访问 Shadow DOM 元素的方式的示例

高级定位器策略

在复杂的 Web 页面结构中,您可能需要根据元素与其他元素(如同级元素、祖先元素或子元素)的关联来区分元素。

同级元素: 根据其相对于同一级别上不同元素的位置查找元素。

祖先元素: 向上导航以根据其父元素或祖父元素查找元素。

子元素: 向下交叉以跟踪子元素。

这是查找同级元素的示例

element = driver.find_element_by_xpath( " // input[ @ id = 'current-element ' ] / following- sibling : : input ")

高级定位器策略提供对元素 ID 的精确控制,使其对于复杂的 Web 页面情况非常宝贵。

处理复杂情况

管理动态内容取决于 Web 页面经常通过 AJAX 调用动态加载内容。 要处理这种情况,请使用 WebDriverWait 执行显式等待。 这可以确保 Selenium 信任元素会在与元素交互之前打开。

常见陷阱

  • 避免使用绝对 XPath:绝对 XPath 表达式在页面结构更改时可能会变弱。 倾向于相对 XPath。
  • 尽可能选择 ID 和 Name:ID 和 Name 定位器通常是最快且最稳定的选项。
  • 保持选择器简单。 复杂的选择器可能会导致维护问题。 选择适用于您的用例的最简单策略。

测试自动化的最佳实践

  1. 为确保可行性,请遵循编码最佳实践,例如使用有意义的变量名和函数名、模块化您的代码以及坚持使用页面对象模型 (POM) 来组织您的测试。
  2. 考虑在多个程序上测试您的 Web 应用程序,以确保兼容性。 Selenium WebDriver 支持不同的程序,如 Chrome、Firefox、Edge 和 Safari。
  3. 将您的 Selenium 测试集成到持续集成 (CI) 管道中。 像 Jenkins、Travis CI 和 CircleCI 这样的流行 CI/专辑阶段可以自动化测试执行。
  4. 创建详细的测试报告以跟踪测试结果并识别问题。 像 TestNG、JUnit 或自定义报告框架这样的工具可以在这方面提供帮助。

结论

高效的定位器策略是 Python 中成功进行 Selenium 自动化的基础。 它们使您能够精确地与 Web 元素进行交互,即使在动态和复杂的 Web 应用程序中也是如此。 通过了解何时使用每种定位器策略并遵循推荐的程序,您可以创建强大而有效的自动化脚本。


下一个主题Selenium C# 教程