3.1.3 构建一款基于Selenium 的易用WebUI 框架
数据驱动测试有两大特点:
(1)测试脚本与测试数据分离;(2)通过配置不同长度的二维数组进行每组数据的轮询测试。
通常用一个表来存储真实的测试数据。Excel 表、数据库表、文本文件和数组都可以用作数据的载体。
在构建WebUI 框架时,我们考虑用这种方式将测试数据写入到文件中,与测试脚本进行分离。框架考虑使用TestNG 的DataProvider 方式分发测试数据,在CSV 文件中定义测试数据集的长度和值。测试脚本通过传入参数的方式接收数据。而 TestNG 负责解析并分发测试数据。
框架基于Selenium WebDriver 开源技术,使用Maven 工具进行项目管理,通过TestNG 工具测试脚本串联。框架提供丰富的基于WebElement 的方法关键字来简化操作步骤。使用CSV 文件存储测试数据,实现测试数据和测试脚本的分离,方便数 据管理。
整体思路是这样的:建立Element 的父类,把操作元素的方法封装起来,形成一套关键字。例如:click、double click、input、select 等。然后通过Selenium IDE录制测试过程,导出一个CSV 文件。文件包含元素名称、测试数据、元素定位采取 类型、元素位置。
有了CSV 文件后,通过程序转化成Java 文件。这个生成的Java 文件,其实就是一个PageObjects 里面定义的一个Page。
有了这个Page 类,我们只需要通过代码编写驱动程序即可。
这样就完成了元素、驱动的集成。当元素位置改变后,只需要改变CSV 文件即可。
第一,建立一套关键字驱动API
这部分需要将WebElement 再封装一层。每个元素不是定义为WebElement 对象,而是自定义的Element 对象。Element 对象有许多封装好的方法,例如:click、double click、input、select 等。
第二,如何写好驱动程序当有了Page 和Element 之后,驱动程序就非常好写了。通过PageFactory,把所有的Page 初始化后,驱动程序写法非常简单。如下:
loginPage.userName.input("test");
- loginPage 是由CSV 文件转化的Java 类。
- userName 是loginPage 类中的属性,这个属性实际上就是元素对象,它是继承了Element 对象的。
- input 是Element 提供的关键字方法,作用是模拟键盘的输入,内部实际是调用了WebElement 的sendKeys 方法。
- test 是输入的实际内容,这个由驱动程序控制。可以将这部分内容通过数据驱动的方式实现。
第三,TestNG 的扩展
TestNG 默认的HTML 报表虽然信息全面,但是不够直观。ReportNG 提供了一种简单的方式来查看测试结果,并能够对结果代码进行着色。还可以通过修改CSS文件来替换默认的输出样式。所以,我们用ReportNG 作为报表生成插件,在项目中的listener 中加入此插件。同时,生成的报告还可以通过邮件方式发送出去,这样就可以更加及时地收到用例执行结果了。
综上所述,本节首先介绍了Selenium 基础,接着详细讲述了Selenium 原理,只有了解了原理才能更好地使用Selenium。然后介绍了Selenium 的高级技巧。之后介绍了PageFactory 这种设计模式。WebUI 测试代码经过这种设计模式的重新设计后,呈现出模块化的特点,具有高可读性、高复用性。最后给出了构建一款WebUI 框架的要素。这里主要讲述了设计思路,希望能得到读者的共鸣。
Testwo官方店铺商品链接: