元框架
  该模式定义了一组基础的独立工具类。对任何自动化工具来说,它们都是通用的,而且可以在不同自动化项目之间复用。
  当需要在一个组织机构中测试不同的项目,而且企业标准要求测试结果采用统一的界面时,或许需要这样的解决方案。此外,元框架改进了项目间代码复用的度量标准,因为它可能会包含有用的工具方法。有关功能和测试对象的基础类,简化了项目之间知识的转移。元框架展现在图3的右侧。
  功能组合模式
  功能方法
  针对特定于应用的业务功能,从其UI实现、API或其他层面进行了抽象。
  用于自动化测试的许多工具,都支持创建被称之为“场景记录”的功能。当一位测试开发者针对特定应用执行特定操作时,这些工具将自动创建一份测试脚本。它可以在稍后进行回放,并检查在程序发生变化后,该脚本是否得到了正确的执行。
  例子:改变登录界面的外观,将要求在全部预计的测试场景中的对应部分都进行变更。如果我们将登录方法提取为Application.Login(username,password),并在全部测试中使用这一方法,那么当登陆页面发生任何变更的时候,我们将只需要修改仅仅这一个功能方法,随后变更会被自动分发到所有使用该方法的测试中。

  图4:测试脚本与(a)缺乏功能方法的过渡层的用户界面之间的交互;(b) 带有功能方法层的用户界面。当应用发生变更时,阴影部分对象将会被改变。
  页面对象
  这一模式将某个页面的功能方法组合在一起。
  由于图1中展现的用于应用的功能方法数量不多,因此它们可以移入一个单独的类。但是为了提升代码可维护性,此模式建议依据这些方法所代表页面,对其进行分组。例如,这些对应关系可以包括:页面:PageLogin——方法:Login();页面PageHome——方法:Logout()、CreateUser()。
  功能库
  它将某个特定应用的功能对象或(和)功能方法分组打包,成为一个适合复用的模块。
  SUT的启动和拆卸对象(SUT运行者)
  该模式支持被测系统的初始启动,即它的初始化。在此之后,测试对象释放与该系统相关的资源。
  在功能方法之中,我们可以区分出与功能测试无关的方法集合:例如启动某个Web浏览器,并访问SUT的登录页面。而在测试之后,Web浏览器应该被关闭。SUT运行者负责以上这些通用活动。
  对象源(对象之母、对象精灵、对象工程)
  该模式按测试执行所要求的形式,创建并初始化的对象。
  运输者(导航器)
  根据测试要求,它将被测试系统中的导航控制集中在一起。
  该对象封装了与被测试系统内部的导航实现有关的完整逻辑。因此业务逻辑的问题不会影响系统内的导航。
  对于图1所描述的情况,我们将拥有一个Transporter类(运输者),它拥有以下方法:NavigateToLogin()、NavigateToHomePage()和NavigateToCreateuser()等等。或者,每个独立的页面(page)对象或许都会拥有自己的运输(transport)方法。在这种情况下,这些方法作为该对象自身的运输者。
  复合页面对象
  该模式将复用的页面(page)对象聚合在一个外部对象中。
  这一模式支持用更加“面向对象”的方式来组织页面对象——把可以在不同页面上复用的子对象分离,并将其包含到父对象中。

  图5:通过在主页和创建用户页面对象中聚集,来使用导航页面(Navigation Page)对象