你笑的时候全世界陪你一起笑,你哭的时候只有你一个人哭

Spring+TestNG+Selenium PageFactory实践经验

上一篇 / 下一篇  2017-09-15 13:36:10 / 个人分类:自动化测试

近期项目空闲,对SeleniumPageFactory模式做了一些尝试,总体框架与现在组里维护的Selenium项目大体一致,一些新的技术和方法做了一些总结。

PageFactoryPageObject设计的一种扩展,PageObject的主要思想是简化项目结构,减少重复代码,把页面元素和用例分离,便于维护,我看到的大部分Selenium项目就是这样的一个结构:Page、Task、TestCase,3层分离,Page类主要获取页面元素,通常继承一个基类,通过封装好的WebElement获取方法来定位;Task类主要对Page类中获取的元素进行基本操作;TestCase类对Test类进行组合,串起功能流程,大致如下:
SeleniumPageFactoryPO做了一层抽象,它通过@FindBy@FindAll@CacheLookup等特有的注解直接对WebElement对象进行了初始化和实例化(和Spring的注入类似),可以直接在页面类里通过注解定义WebElement,如同定义一个变量一样,如果定位后的WebElement有多个则可以定义为一个List

页面类构造函数里通过执行PageFactory.initElements方法对所有WebElement进行初始化,当这个element对象被使用时将重新查找并实例化。由于页面元素在这里直接是一个变量,因此元素和对元素的基本操作(服务)可以放在一个类里,元素操作尽量保证独立,即操作后元素恢复初始值,不会对下一操作产生影响。如果页面有改变可以只在这一个类中进行修改,进一步整合了元素和操作,结构如下:


项目这里使用Spring+TestNG来集成和驱动测试,Spring的一个好处是项目结构清晰,实例自动注入,这样可以将公共操作,提供服务的类放在Page或TestCase的基类中自动注入实例化,省去了大量的new,另外Spring有丰富的组件支持,对数据库等操作可以直接使用,Spring jdbctemplate,维护好数据库的配置信息即可,省去了一定量的代码。
当然Selenium PageFactory也有一些问题,对于一些Ajax异步返回的元素还是不能定位,于是不得不编写一些waitElement等方法先识别下父级元素,再识别要操作的元素,Selenium PageFactory是自动化的一种方式,实际代码编写和使用中还有一些问题尚待解决,selenium也一直在升级完善,大家参考。

TAG:

 

评分:0

我来说两句

Open Toolbar