- 2020-11-23 更新
遇到突然大部分/全部脚本报错时,先检查网络问题.其次检查驱动和浏览版本(谷歌浏览器会自动升级的).
- 自定义跳过异常–>测试过程触发此异常会将Testng测试结果标记为跳过.
示例
/**
* 随机点击列表中的数据
*
* @param clickedElementName
* @param elementList
*/
public void callListAndClickByRandomIndex(String clickedElementName, String elementList) {
callList(clickedElementName);
try {
int in_num = getRandomIndexByElementsSize(elementList);
clickByIndex(elementList, in_num);
} catch (Exception e) {
logger.error("元素\"" + elementList + "\"报错或缺少对应依赖数据;" + e);
throw new SkipException("元素\"" + elementList + "\"报错或缺少对应依赖数据;" + e);
}
}
说明:这段代码旨在处理随机点击下拉框中的选择项.然后在加跳过异常处理.
- 处理测试启动浏览器的时候,遇例如到断网情况.避免反复加载浏览器驱动/增加失败重试.
@BeforeSuite
protected void beforeSuite() {
try {
setDriverAndLoginEman();
} catch (Exception e) {
driver.quit();
int count = anCountFailedTimes();
// count > 1 等于实际运行2次,套件之初登录失败后尝试重新登录
if (count > 2) {
//用完重置递归计数器
reAnCountFailedTimes();
throw new RuntimeException("尝试了" + count + "次之后,打开浏览器报错!" + e);
} else {
pause(2000);
beforeSuite();
}
}
logger.info("----测试类"+this.getClass().getName()+"开始测试,打开浏览器----");
//上面没有报错的时候就标记为true,BeforeClass识别到true之后就不在打开浏览器,然后设置为false
setLabelBeforeClassIsStarted(true);
}
private void setDriverAndLoginEman() {
driver = WebDriverUtils.getChromeDriver();
driver.manage().window().maximize();
loginEman();
}
@BeforeClass
protected void beforeClass() {
if (!getLabelBeforeClassIsStarted()) {
logger.info("----测试类"+this.getClass().getName()+"开始测试,打开浏览器----");
setDriverAndLoginEman();
}
//识别到beforeSuite设置为true时不打开浏览器然后设置为false旨在beforeSuite正常执行后和beforeClass不执行
setLabelBeforeClassIsStarted(false);
pause(2000);
}
我的需求是每次beforeclass启动浏览器afterclass关闭浏览器.
这段代码旨在解决UI自动化测试启动的时候遇到问题比如断网,无法启动.但是beforeClass会忽略错误继续被下一个测试类调用进而启动多个浏览器.
思路是只要正确执行了beforeSuite()则beforeClass()在此次执行中不在重复执行(因为两者都有启动浏览器的操作然后在第一次beforeClass()代码执行后将执行条件设置为setLabelBeforeClassIsStarted(false);第二次开始正常实现我的需求).在beforeSuite()增加了异常处理,利用递归加计数器实现指定次数的方法重试.超出次数仍然失败则抛出异常.