使用Selenium和Cucumber进行自动化的COM设计模式

组件对象模型(COM)是一种设计模式,可以帮助您在测试自动化项目中组织测试。受流行的页面对象模型(POM)的启发,COM不仅处理整个页面,还专注于特定的UI组件,如按钮、文本字段、下拉菜单或其他可重复使用的元素。

在本教程中,我们将解释如何使用Selenium WebDriverCucumber来实现COM以测试Web应用程序,并说明这种方法如何使您的测试更灵活、模块化和易于维护。

什么是组件对象模型?

组件对象模型(COM)是页面对象模型(POM)的进化。与将整个页面建模为一个对象,并使用方法与所有页面元素交互不同,COM将用户界面分解为单独的组件,如:POM模型

  • 按钮
  • 文本字段
  • 下拉菜单
  • 搜索栏
  • 表格

每个组件都封装在一个Java类中,并通过特定方法管理其交互,使每个元素都可以独立维护和测试。这提高了代码的可重用性、可维护性和测试灵活性。

为什么使用COM而不是POM?

1. 增强的模块化

使用COM,每个组件(如按钮或文本框)都是一个独立的实体。如果一个组件发生变化(例如,按钮的文本变化),您只需要修改组件类,而不影响其他组件或页面。这可以实现高度的模块化,避免为了进行微小调整而修改整个页面。

2. 可重用性和灵活性

组件可以在应用程序的多个页面之间重复使用,减少代码重复。例如,一个ButtonComponent可以在任何出现按钮的页面上使用,减少冗余并增加测试的灵活性。

3. 简化维护

使用COM进行维护更容易。如果一个组件发生变化(例如,按钮或文本框),您只需修改代表该组件的类。所有使用该组件的测试将自动更新,无需重新访问每个测试场景。

4. 适应动态界面

现代应用程序通常是动态的,界面经常会改变。COM非常适合这类应用程序,因为它允许对组件进行测试而不受界面的影响。您可以修改或添加组件而不影响应用程序其他部分的测试。

5. 更快的测试自动化

COM加速了测试自动化。通过将与组件的交互集中到可重用的类中,测试人员无需为每个页面或组件重新定义操作。例如,单步定义按钮”的操作可以在项目中的所有测试中使用,大大减少了自动化测试所需的时间。

6. 避免测试人员之间的工作重复

有了COM,测试人员不再需要为每个测试重复相同的工作。针对常见操作的集中步骤定义,例如”点击按钮”或”输入文本”,可以被项目中的所有测试人员使用。这确保了测试的一致性,同时避免不必要的重复,提高了测试人员之间的效率和协作。

COM项目架构

基于COM的项目架构围绕三个主要元素构建: 组件步骤定义运行器

1. 组件

每个组件代表一个UI元素,比如按钮、文本字段或下拉菜单。这些类封装了与元素的所有可能交互。

这里是ButtonComponent类的一个示例:

Plain Text

 

2. 步骤定义

步骤定义将在Gherkin文件中定义的步骤链接到组件中的方法。它们负责与组件交互并实现测试场景中指定的操作。

这里是ButtonStepDefinition的一个示例:

Plain Text

 

3. 运行器

运行器类负责使用JUnitTestNG运行测试。它配置Cucumber以加载在.feature文件中定义的测试场景,并使用步骤定义来运行它们。

这里是TestRunner的一个示例:

Plain Text

 

编写和解释Gherkin场景

使用Cucumber自动化的一个基本要素是使用Gherkin语言编写测试场景。Gherkin允许您以一种可读性强且易于理解的方式描述测试,即使对于非技术人员也是如此。

让我们考虑一个场景,我们想要使用之前定义的ButtonComponent来测试与按钮的交互。以下是在Gherkin中编写的示例:

Scenario: User clicks on the "Submit" button
   Given I am on the login page
   When I click on the button "Submit"
   Then I should be redirected to the homepage


场景说明

场景

此场景描述用户在登录页面上单击“提交”按钮并确保单击后被重定向到主页的操作。

  • 假设我在登录页面上:测试的初始状态是用户在登录页面上。
  • 当我单击“提交”按钮:测试中执行的操作是单击“提交”按钮。
  • 那么,我应该被重定向到主页:期望的验证是用户在单击按钮后被重定向到主页。

链接到COM

这个场景中的每个步骤都映射到步骤定义中的ButtonStepDefinition,其中点击操作由ButtonComponent处理,使测试模块化且易于维护。

额外说明

注意这些步骤使用了显示的文本在按钮(或输入框中的占位符等)作为参数。这使得场景更加可读和通用。例如,在上面的场景中,按钮“提交”的文本直接在步骤“当我点击按钮‘提交’。”中使用。通过这种方式,相同的步骤定义可以重用来测试另一个按钮,例如“登录,”只需在 Gherkin 场景中更改文本即可。这提高了测试代码的重用性,同时使场景更加直观和灵活。

使用 COM 的步骤重用性

COM 的一个关键优势是不同按钮的步骤定义的重用性。例如,相同的步骤当我点击按钮 {string}可以用于所有按钮,无论按钮上显示的文本是什么。COM 方法允许您根据按钮文本动态参数化点击操作。

让我们考虑另一个具有不同按钮的场景:

场景

Plain Text

 

这两种情况下ButtonComponent 中的相同clickButton 方法将被使用,但按钮文本将根据场景而变化。这展示了COM如何允许重用相同的组件和步骤定义,使测试灵活且模块化。

COM 如何改善测试自动化

COM 在几个方面改进了测试自动化:

  • 减少代码重复:通过使用可重用组件,可以减少测试中的代码重复。例如,应用程序中多个页面上使用的 ButtonComponent 可以消除编写重复测试的需要。
  • 更易读和可修改的测试:测试更清晰易懂,因为它们与特定于页面的实现细节解耦。您可以专注于与组件交互,而无需担心底层页面结构。
  • 易维护性:对组件进行任何修改(例如,更改按钮文本)仅影响组件类,而不影响测试。这使得维护变得更简单和更快速。
  • 更灵活的测试:测试可以轻松适应不断变化的用户界面,因为组件彼此独立。您可以测试新组件或替换现有组件而不影响其他测试。

COM 设计模式何时推荐使用?

如果正在测试的 web 应用程序对所有组件使用统一的设计系统,则建议使用此设计模式。例如,如果所有按钮以相同的方式声明,并且所有 UI 元素都具有一致的结构。在这种情况下,使用 COM 可以让您集中处理每种类型的组件(如按钮、文本字段等)的交互,使测试更具模块化、可重用性和易于维护。

在多个产品中重用步骤定义

如果您正在开发和测试多个使用相同设计系统的产品,可以创建一个库,涵盖每个组件的所有步骤定义和操作(或几乎所有)。这使得测试人员可以专注于编写 Gherkin 场景,测试将会自动化。由于所有网页元素都是以相同的方式编写(HTML),按钮、文本框和其他 UI 元素在所有项目中将表现一致。

因此,测试人员不再需要重复相同的任务——为多个项目中的相同组件定义步骤定义和操作。这种方法节省了时间并提高了可维护性。如果修改了某个网页元素(例如,如果 XPath 发生变化),您只需在共享库中更新该元素,修改将自动应用于所有自动化项目。这降低了出错的风险,使得在不同产品之间的更新更加高效。

结论

组件对象模型(COM)是一种强大的设计模式,用于组织测试自动化。通过专注于可重用组件,COM 使您能够创建更模块化、可维护和可扩展的测试。这种模式对于现代应用程序尤其有用,因为用户界面变化迅速,并且与独立组件的交互至关重要。

通过可重复使用的测试、简化的维护和灵活的架构,COM 是在 SeleniumCucumber 项目中进行测试自动化的理想解决方案。

Source:
https://dzone.com/articles/com-design-pattern-selenium-and-cucumber