转载

如何实现基于 Dojo 的 WEB 应用的自动化 TVT 测试

TVT (Translation Verification Test) 指的是应用软件完成翻译后,对界面上的翻译内容进行测试以保证翻译准确性的测试过程,是全球化软件开发生命周期的重要组成部分。通常该过程由各国的翻译人员在已经安装配置好的环境上,执行测试用例,找到界面上某个要进行确认的字串进行验证。由于翻译人员对软件与环境不熟悉,可能导致执行测试用例遇到阻碍,为解决这类阻碍,需要开发组人员与翻译人员进行沟通,从而导致整个项目所需时间增加。因此,为确保产品准时发布,开发组人员通常编写自动化脚本实现界面的截图,直接将截图送给翻译人员进行翻译验证。

在对 WEB 应用进行自动截图时,一般方法是使用常用的自动化工具库写自动化测试脚本,如 Selenium。脚本按照手动截图的步骤,对 WEB UI 进行操作,最后导向需要截图的界面,利用一些简单的 UI 或者屏幕截图类库进行截图并保存。在这种自动化测试截图过程中,最重要的步骤是定位 UI 上的元素,能否正确的定位元素,直接关系到自动化脚本运行成功与否。

Dojo 简介

Dojo 是一个具有宽度和广度,且性能优秀的 JavaScript 开源工具集,目前被广泛用于 RIA (Rich Internet Application) 应用的开发中。

使用 Dojo 开发应用的一般特性

  1. 使用 Dojo 工具集开发的 Web 应用具有更好的动态功能,程序的可用性、交互性以及功能都更加健壮。
  2. 由于 Dojo 在很大程度上屏蔽了各种浏览器间的差异,因此具有更好的兼容性。
  3. Dojo 很稳定,是性能评价最好的 Ajax 工具包之一。
  4. Dojo 能与各种 HTTP 服务器端的框架与技术进行集成,并提供了与各种开发环境的集成接口。
  5. 使用 Dojo 进行开发的代码更容易维护,耦合性更低。

Dojo 开发的 WEB 应用在进行自动化时面临的挑战

结构复杂

使用 Dojo 开发的应用生成的页面 DOM 结构比一般的 HTML 复杂很多,一个简单的元素,比方按钮,在 HTML 中可以是一个单一的简单元素,但是在 Dojo 中则可能嵌套在多层元素之中,因此,一个 Dojo 小部件是由多个 HTML 元素组合而成的,针对具体的 Dojo 小部件进行的操作较复杂,最终导致查找该元素时的路径变得复杂。

动态 ID

Web 应用的自动化测试脚本一般先定位元素,再对该元素执行操作,最后获取想要的结果。关键的步骤在于定位元素,因此,在开发自动化测试脚本时,开发人员所花费的时间较多。一般情况下,定位一个元素可以使用 XPath,通过 HTML 的结构,经过元素层次的分析,最终定位到目标元素。在这个过程中,使用较多的是元素的 ID 属性,ID 属性在 DOM 树中的定义是唯一的,因此利用该属性可以更快捷的定位元素,但是与此同时,对 ID 属性的值的要求也提高了,只有静态的值才能够确保测试脚本的稳定性。

使用 Dojo 开发的应用,元素的 ID 属性是动态赋值的,也就是说 ID 属性在应用中是唯一的,但是可以动态的改变。动态的 ID 属性,直接增加了元素定位的难度,很可能已经定位的元素在页面环境改变时失效。

TVT 自动化问题

Dojo 应用在进行自动化测试时的一般问题在 TVT 自动化中尤为突出。

Dojo 结构复杂,在对生成的 DOM 树中的元素属性进行赋值时,按照该属性在 DOM 树中的位置,自动的赋予了该元素一个数字,如下图 1 所示,该树节点元素的 ID 属性为 id=”dijit_TreeNode_4”,由 Dojo 自动生成,由一个特定字符串前缀与一个动态的数字组成,数字“4”表示这个数节点位于整个 DOM 数的第 4 个位置。

图 1. 动态 ID
如何实现基于 Dojo 的 WEB 应用的自动化 TVT 测试

当切换浏览器语言,让应用在另一个语言下运行时,这个动态数字将根据 Dojo 小部件在页面中的位置变化而变化,这种情况集中表现在一些按本地化语言顺序进行排序的部件上,切换语言意味着节点顺序的变化,切换语言后原来的元素路径不可以重用。

因此在使用 Selenium webdriver 对页面上的元素进行相应的操作时,定位元素变得困难。利用 Xpath 在英语环境下找到的元素,将在语言环境切换成其他语言时发生变化,因此在英语环境下写好的脚本很难用在其他语言环境下进行截图。TVT 使用自动化来提高效率,是在英语环境下写好的脚本,在其他语言环境下直接运行并截图,需要截图的语言越多,则能够节省的时间越多。如果对不同的语言都需要修改自动化脚本,将会导致自动化后的时间反而比非自动化所需的时间更多,失去了自动化的意义。

为解决这类问题,我们在 ECM 的 TVT 自动化过程中总结出了一套可行且效果不错的方案。


如何解决 Dojo 应用在 TVT 自动化过程中遇到的问题

ECM TVT 的自动化项目简介

IBM FileNet P8 平台与 CPE

IBM FileNet P8 平台是一个统一的企业级内容与业务流程管理平台,可以为企业级用户提供敏捷的、具有强适应性的内容管理环境。该平台由一系列实现企业级的内容管理与业务流程管理的组件紧密结合,这些组件包括内容管理资源库、流程管理资源库、使用内容与流程管理的用户接口以及支持各种存储设备与系统的存储结构。

CPE (Content Platform Engine) 是 IBM FileNet P8 的内容、存储以及安全管理引擎,该引擎是由 Java 写成的 J2EE 应用,可以部署在各种应用服务器之上。启动以后的 CPE 通过 ACCE (IBM Administration Console for Content Platform Engine) 工具对 FileNet P8 的域、站点、存储器等进行配置管理。

CPE 的 Translation Verification Test

目前对 CPE 进行 TVT 主要是对其配置管理工具 ACCE 的 TVT。该工具为网页应用程序,相关的所有 TVT 操作都是网页处理,因此使用 Selenium 实现自动化。

针对自动化过程中遇到的困难,可以使用一套 TVT 通用的自动化解决方案。

对于网页界面上需要操作的元素,先找到其文本内容对应的不同语言的翻译,再通过翻译的文本定位元素的具体位置,执行相关的操作。该方法在定位元素的过程中,避开了动态变化的 ID 属性,通过确定的文本信息,准确的找到元素。如图 2 所示,Resource mapping 部分主要实现翻译映射功能,即通过界面上的英文字串找到相应的其他语言的翻译,Dojo-Selenium element location 部分主要实现按照文本内容定位页面元素的功能。所有的 TVT automation test case 都集成这两部分实现。

图 2. 架构
如何实现基于 Dojo 的 WEB 应用的自动化 TVT 测试

如何实现 Resource Mapping

RPX 简介

RPX (Rational Pseudo Translator),是一款 Java 写的用于 pseudo translation 的工具,同时也是一个可以定制化的引擎。它可以与其他代码集成,包含的库文件可以用于其他项目的开发。这里主要使用了 RPX 来对不同类型的 PII (program integrated information) 文件进行解析。如:com.ibm.rpx.handlers.TVTPropertiesHandler 用于解析 properties 文件。

ResourceBundle 简介

ResourceBundle 是 Java 提供的用于软件国际化的库,使用该类库,可以轻松实现软件的本地化以及多语言翻译,它不但支持一次处理多个语言环境,还为后续支持更多语言环境提供便捷。一般使用为读取资源属性文件,匹配当前系统的国别语言信息,获取相应的资源属性文件。这里主要利用该库来实现英语到其他不同语言的映射配对。

Resource Mapping 架构

Resource Mapping 主要为实现翻译映射的功能,流程如图 3 所示,首先需要输入需要做 map 的两个语言,分别获取各自的资源包,解析以后生成两个语言捆绑文件,然后使用 map 将两个捆绑文件进行映射,给出 base 字符串,便可以查出相应的 target 字符串。

例如,case 里面的步骤为,点击新建按钮,在英文界面上按钮上的内容为“New”,当切换到中文时,需要点击的按钮上面的内容变为“新建”,这时,便先调用 Resource Mapping 的功能,找到“New”这个串在映射里对应的值“新建”,然后再利用“新建”去定位按钮,即可在中文环境下成功运行。

图 3. Resource Mapping 实现流程
如何实现基于 Dojo 的 WEB 应用的自动化 TVT 测试

定位页面元素

Dojo 虽然结构复杂,但是其结构通常具有一定的规律性,通过某个路径定位到某个元素,那整个应用中同类的元素都可以使用这个路径方式进行定位。例如,Dojo 1.9 中按键可以通过 XPath 定位:"//span[" + "contains(concat(' ',normalize-space(@class),' '),' " + "dijitButtonText" + " ')"+ " and contains(text(),"+label+")]", 因此在需要定位上面例子中的按键时,只需要将“新建”传入 label 中,即可定位该按键。

简单示例

结合 Resource Mapping 与 Dojo 页面元素定位,即使在语言切换,或者 ID 元素动态变化时,也可以实现对页面元素的准确定位,从而执行相关的操作,以下示例为点击页面按键:

public void clickDojoButton(String englishLabel, String PIIfile,) { tryToTranslate(englishLabel, PIIfile, new Callback() { public Object tryMessage(String msg) {  DojoButton button = DojoButton.findByLabel(msg); button.click(); return true; } }); }

结束语

本文从分析 Dojo 开发的 Web 应用在进行 TVT 自动化测试时面临的问题出发,结合 ECM 成功解决这类问题的案例,提出了一套可用于所有类似自动化的解决方案。同时,该方案也适用于解决自动化过程中遇到的所有 ID 动态变化难以进行元素定位的问题。


正文到此结束
Loading...