上篇我们开始修改java包结构,分离测试用例、数据源、测试准备扫尾工作,今天再添加几个关于登录模块的测试用例。我们之前演示了登录成功的,有成功就有失败,对于示例网站来说,我能想到的有以下三种失败情况:
1. 员工代号或密码错误;
2. 员工代号为空;
3. 员工代号正确,但密码为空。
先看第一种情况。如果员工代号或密码错误,点击登录按钮后系统会用英文提示"usercode or password is incorrect"(员工代号或密码错误):
我们要做的就是判断这句话是否出现就行。所以,第一个失败的测试用例如下:
1. 登录http://www.cslm-test.com/hrsystem/index.php
2. 输入错误的员工代号和密码;
3. 点击登录按钮(断言点:出现"usercode or password is incorrect"的提示)。
先定位这个错误提示并放到登录模块的object repository中。在loginPage.properties中添加如下:
这个test case跟登录成功的那个唯一不一样的就是最后的断言点,我们在LoginPage.java的末尾加入这个断言:
这个方法叫做verifyErrMsgDisplay(),先判断信息在不在,再判断显示不显示。返回结果为布尔型,显示返回true,不显示返回false。接着添加一个测试数据的Excel文件,命名为TCLogin2.xlsx,然后添加数据:
之前说过,正确的密码只有三组:
1)员工代号:1001,密码:123
2)员工代号:1002,密码:456
3)员工代号:1003,密码:789
我们Excel里一组密码错误一组员工代号错误,正合适。接下来在com.testalliance.hrsystem.tests中新建TCLogin2.java,写测试用例:
里面的方法还是test(),我们直接用LoginPage的类实例调用verifyErrMsgDisplay()方法返回结果。最后在TestRunner.java中添加TCLogin2.java的声明并执行test()方法:
执行一下,通过:
第二种情况是员工代号为空。此时会弹出提示框,说"Please enter usercode"(请输入员工代号):
我们要做的就是判断这个提示框是否出现而且提示框的文字是否显示正确。所以,第二个失败的测试用例如下:
1. 登录http://www.cslm-test.com/hrsystem/index.php
2. 只输入正确的密码;
3. 点击登录按钮(断言点:出现"Please enter usercode"的提示框)。
提示框不同于一般的控件或元素,是通过driver进行转换的,不需要放在object repository里,这步可以省了。接着我们在LoginPage.java的末尾加入如下两个断言方法:
一个是verifyErrAlertDisplay(),检查提示框显示不显示;另一个是verifyErrAlertMsg(),检查提示框的文本。在verifyErrAlertMsg()里先调用verifyErrAlertDisplay()确保显示,然后再看文本内容。
下一步设计Excel文件,命名为TCLogin3.xlsx,然后添加数据:
有两种情况会弹出"Please enter usercode"提示框,一种是只有员工代号是空的,另一种是员工代号和密码都是空的。我用"null"表示空格。在com.testalliance.hrsystem.tests中新建TCLogin3.java,写测试用例:
只要提示框的内容正确,就证明测试通过。再修改TestRunner.java,添加TCLogin3的调用过程:
但现在你执行这个程序肯定有错,因为取回的员工代号或是密码里的"null"会被当成普通字符串处理直接输进文本框中。所以我们还需要修改一下LoginPage.java的login()方法:
很简单,如果取出的是null,那就不执行输入操作。最后执行一下:
第三种情况是员工代号正确,但密码为空。点击登录按钮后系统会用英文提示"Please enter password"(员工代号或密码错误):
我们要做的就是还是判断提示框是否出现而且提示框的文字是否显示正确。所以,第三个失败的测试用例如下:
1. 登录http://www.cslm-test.com/hrsystem/index.php
2. 只输入正确的员工代号;
3. 点击登录按钮(断言点:出现"Please enter password"的提示框)。
因为调用的还是verifyErrAlertDisplay()和verifyErrAlertMsg()这两个方法,不用写新的,所以我直接设计Excel文件,命名为TCLogin4.xlsx,然后添加数据:
只有一条数据,密码位置是null,代表不用执行输入密码这步。在com.testalliance.hrsystem.tests中新建TCLogin4.java,写测试用例:
再修改TestRunner.java,添加TCLogin4的调用过程:
最后完整执行一遍,测试通过。
这就是三个登录失败的用例,算上一个成功用例,关于登录模块就都写完了。也印证了上一篇最后那张图中TestRunner.java对于测试管理的角色。有人可能会问,那你写几个test case就得在TestRuner.java里初始化几次,100个用例就得写100遍,是不是太麻烦了?确实很麻烦,但我们也有办法解决这个问题。不过我现在先不动它,当我们写完下一个用户模块之后再一起修改。
这篇文章的源代码在SeleniumExcelDataDrivenFrame2项目里边。