上篇我们给框架设计了一个配置文件,而且利用java反射机制优化了控制类,框架又进步了一些。这次我们可以再改几个小地方。首先看LoginPage.java和EmpPage.java这两个文件,它们都有getPageObjects()方法,里面有每个page object的获取过程:
我们可以把这一步单独拿出来,让它根据object名称来自动判断需要用哪一个定位器,这样就不用总想着到底需要是id还是name还是xpath了。先根据object的定位器修改一下object名称,加上后缀"_定位器":
loginPage.properties:
empPage.properties:
接着就该写判断步骤了,在com.testalliance.hrsystem.pageobj中新建Objects.java,复制如下代码:
这段代码不难理解,接受两个参数,一个是object名称,另一个是object值,每个传进来的object信息都会进行自动判断。
接着修改LoginPage.java和EmpPage.java:
LoginPage.java:
其实就是把定位过程放进每一个小的操作方法中,我还把getObjects()加了个参数,这样文件路径就可以传进来了。同理,EmpPage.java可以改成:
这样,page object的获取过程就被单独提取出来了,我们不需要总想着到底应该用哪种定位器了。
第二个我想修改的是测试结果返回值。目前所有的测试类都是里面都用Result = "TEST PASS"作为测试结果,比如TCLogin1.java:
不说专业不专业,每次写文字"TEST PASS"也容易出错不是?我们可以在测试类里把它们用整型0或1代替,统一返回用字符串表示。当然,你也还可以继续用布尔类型true和false,不过整型也是很多人常用的,我演示一下,以TCLogin1.java为例:
表示测试结果的result变量初始值为0,如果最后执行完毕是Pass则改成1。按照这个改变把另外几个测试类也改一下,把结果返回给TestRunner.java处理:
执行一下,测试通过。这篇的修改就到这儿。注意,现在TestRunner.java里面还有bug,举个例子,程序进入try语句后如果在执行测试方法时抛出了异常,dm.cleanUp()还能执行到吗?就执行不到了。或许执行结果都无法被打印出来,所以我们还要继续修改。