使用页面对象模型有哪些常见的挑战和陷阱以及如何克服它们?
已发表: 2023-11-27Selenium 设计模式称为页面对象模型 (POM),它涉及构建一个对象存储库来容纳和安排页面元素和对象。 在网络/移动自动化领域,它是一种高度使用的设计模式。 高效的 Selenium 自动化测试可以帮助您有效地使用页面对象模型。
通过充当被测试页面的接口,POM 最大限度地减少了代码的复杂性和冗余,同时还提高了其可扩展性和测试脚本的维护性。 对于每个网页,我们都会构建一个类文件以简化 POM 概念。 网页上可用且可由测试脚本用来执行各种任务的 Web 元素包含在类文件中。
使用页面对象模型的好处
解决测试自动化框架实现过程中可能出现的问题的建议方法是页面对象模型。 它提供的好处如下:
- POM 使得创建对象存储库成为可能,从而促进 Web 元素的简单添加、修改和重用。 Web 元素的名称以及每次检查代码时将其定位到同一位置的定位器都包含在此对象存储库中。
- 每个网页在 POM 中都表示为一个不同的类。 如果网页有任何其他 Web 元素,添加它们就像转到与网页同名的类一样简单。 例如:您可以搜索新的 Web 元素并将其添加到 customerClass.java 文件中,以便将其添加到客户页面对象存储库中。 这同样适用于每当网页的 Web 元素发生更改时更改定位器。
- 此外,对象存储库中不包含测试脚本。 从该特定对象存储库调用创建测试脚本所需的任何对象。 在使用元素之前,它不会定位 Web 元素。 为了最大限度地提高效率,延迟初始化允许我们推迟创建对象,直到我们需要它们之前。 这样做的主要理由是,如果不需要该对象,通常可以避免创建它。
- 逐页字段分段允许您创建对象存储库。 因此,应用程序有一个页面存储库,其中每个页面都被描述为一个 Java 类。 接口将页面的字段定义为成员,然后类实现该接口。
- 创建和封装可能在页面上执行的每个操作或功能到专门为该页面制作的单个类的过程称为功能封装。 这使得指定和理解每个页面上可用的功能范围变得更加简单。
- 任何重要的更改都可以轻松实现,而不需要大量维护,因为接口和类都可以快速更新。 由于其面向对象的性质,该框架可以生成更具可读性和更可靠的代码,使其对程序员更加友好。
- 低冗余功能可以帮助减少代码重复量。 当架构彻底且定义良好时,POM 可以用更少的代码实现更多的功能。 有效且可扩展:击败依赖于解释或创建 Excel 文档以进行数据或关键字驱动测试的替代技术。
使用页面对象模型的缺点
开发自动化框架需要大量的初始工作投入,以便为具有多个页面的 Web 应用程序构建页面对象模型 (POM)。 尽管这可能是一项艰巨的任务,但建议与应用程序开发过程一起进行。
雇用缺乏经验的测试人员并期望他们在部署期间接受培训是一个严重的错误。 为了防止这样的噩梦,必须拥有技术熟练、了解编程最佳实践的测试人员。 不熟练的测试人员必须参加训练营才能为这项任务做好准备。
此外,为了避免在后期开发阶段出现任何空白,必须在开始开发之前彻底、准确地定义框架的架构。 由于每个应用程序都是不同的,因此可能需要对自动化框架进行大量定制才能满足其需求。
通过使用 POM 技术开发的自动化框架不是通用模型,而是专门针对应用程序定制的。 它与特定于应用程序的数据驱动或关键字驱动框架不同。
尽管有其缺点,POM 通常被认为是创建 Web 应用程序的最有效方法。 随着框架的发展,使用 POM 而不是其他数据驱动或关键字驱动技术可以使向混合框架的转变变得更容易。
例如,从维护的角度来看,开发人员对登录页面所做的更改可能会影响与登录功能直接相关的测试。 由于其余测试仅使用登录来测试不同的功能,因此它们不受这些更改的影响。 为了保证其余测试不受影响,必须确保即使其他页面元素发生更改,登录功能也能正常运行。
测试过程的主要目标是提高产品质量,而自动化测试通过发现问题并向开发团队报告问题对于实现这一目标至关重要。 无论是否遵循软件开发方法,测试自动化覆盖率都是评估测试代码有效性的关键关键绩效指标 (KPI)。
POM 的常见陷阱
以下是 POM 的一些常见问题:
- 如果应用程序有数百或数千个网页,则构建自动化框架将需要大量的时间和精力。
- 因为维护巨大的类违反了设计原则,所以成本随着维护开销的增加而增加。
- 测试人员应该非常了解编程最佳实践,因为为众多页面构建 POM 框架相当于开发人员的劳动。
- 页面对象模型是特定于应用程序的,本质上不是通用的。
如何克服POM的缺点?
将 POM 概念重构为剧本模式是解决上述问题的最有效方法。 单一职责原则和开闭原则是前两个 SOLID 设计原则,它们是剧本模式的基础,剧本模式是一种创建优秀的自动化验收测试的方法。 在了解剧本模式之前,我们先回顾一下前两个“SOLID”原则。
- 单一责任原则规定,一个类应该只承担一项职责,而不应该有多项职责,因为更改一项职责可能会对多项职责产生影响。
- 每当添加或修改需求时都应该开发一个新类,而不是更新现有类中的旧类。 这是因为对一个组件的更改可能会触发流程中的其他修改。 整个过程称为开闭原则,
页面对象模型 (POM) 是一种广受欢迎的 QA 自动化设计模式,可帮助您为 Web 测试编写可重用且可维护的代码。
● POM优化程序
为了保证使用 POM 成功实现 QA 自动化,您必须遵守推荐的实践和规则。 可以通过遵循单一职责的思想来生成在大小和形状之间取得平衡的页面对象。 方法、定位器和页面对象的名称也应遵循命名约定并具有描述性。 此外,Web 元素必须从公共视图中隐藏,并且只能通过页面对象的功能进行访问。 使用Selenium或TestNG等框架来实现Page Factory设计有助于简化代码并提高测试效率。
● POM建议和方法
您可以利用一些策略来改进 POM 实施并提高 QA 自动化的有效性和效率。 例如,页面对象可以通过继承和组合来扩展和重用其功能。 流畅的界面是提高代码可读性、表达力和简洁性的另一个工具。 此外,Web 应用程序和测试之间的同步问题可以通过使用隐式、显式或流畅等待等等待技术来解决。 自定义等待技术也可用于管理独特或复杂的情况。
对于任何敏捷软件开发团队来说,编写自动化测试不仅是一种奢侈,而且也是一种要求。 在新功能的开发过程中,开发人员可以使用自动化测试来观察更改如何影响系统的其他区域。 这时自动化测试就可以发挥至关重要的作用。
像 LambdaTest 这样的自动化测试平台对于在软件开发周期的第一阶段迅速识别缺陷非常重要。 LambdaTest 不仅可以通过并行运行测试来减少测试执行时间,而且还可以增强您的浏览器覆盖范围,让您可以在线访问 3000 多个测试环境,例如 Chrome 和 Safari 浏览器。
通过测试自动化可以增强软件质量保证(QA)并降低问题解决方案的成本。 当测试正确完成时,开发人员可以在 QA 发现错误之前识别并修复错误。 我们还可以使用测试自动化来自动化回归功能和测试用例。 因此,质量检查工程师将有额外的时间来测试应用程序的其他领域。 此外,这还保证了生产版本的产品质量。 从而,我们获得更有效稳定的产品和更高效的质量保证方法。
对于开发人员和工程师来说,开发自动化测试似乎是一个简单的操作,但结果仍然有可能是构建糟糕的测试和难以维护的代码。 在任何敏捷开发项目中,当涉及测试时,尝试始终发布功能或修改可能会变得昂贵。 如果网页上的一个元素发生更改并且 20 个测试依赖于它,则必须更新所有 20 个测试例程以反映新元素。 这需要花费大量时间,这阻碍了开发人员尽快实施自动化测试。
最后的话
Selenium Webdriver 中最突出的设计模式之一是页面对象模型 (POM)。 此模型可以最好地解决因自动化网站和电子商务网站上的大量页面而产生的脚本维护和代码重复问题。 测试自动化使用 POM 来自动化电子商务站点,因为它的脚本是可编写脚本的。
当与 Cucumber 结合使用时,POM 不仅可以用于电子商务网站的功能测试,还可以用于可接受性测试。 POM有助于提高代码的可读性、可重用性和可维护性,但也带来了一些困难。
POM 是 QA 自动化的有用工具,但它有一些缺点和需要解决的问题。 查找 Web 部件可能具有挑战性且耗时,并且当 Web 应用程序发展时,维护页面对象势在必行。 此外,由于页面对象可能依赖于浏览器或环境等其他元素,因此管理它们的依赖关系至关重要。 必须避免页面对象之间的循环引用或强耦合。