根据上一篇我说 的 ,划分scenario的 方法,来说明一下。
首先,在一个 Scenario 中,如何定义 步骤 ,其实很简单。
最简单的方法,可以理解为,流程进行一步,就写一个步骤, 这里的流程进行一步,是 需要 人员手动录入的步骤。不包含 fork ,join ,自动任务 ,Java 任务 和 自动判定任务。
下面这种,任务名称前面,带有 问号 的,属于自动判定任务,这种任务,一般 是,根据你在流程某一步,进行的某些操作,比如, 是否属于社内排原稿, 选择,是,或 ,否,走不同的流程节点。
下面的图标 属于 需要人员手工录入的 任务节点。
刚才说了,定义Scenario 步骤,
1、需要手动录入的 流程节点,每一步,都可以设置为,一个Scenario 步骤。
2、当前Scenario 中,所有 步骤必须满足的条件 , 只有当满足该条件时,才会执行 这个Scenario ,这样的,可以提前出来,当作前提条件。也算是一个步骤,判断步骤。
比如,
Given 社内文编一审 和 编校部委托一审
这个步骤的实现方法是:
this.Given(/^社内文编一审 和 编校部委托一审$/, function(callback) {
if(bwzztsBase.ysqk == '社内文编一审'|| bwzztsBase.ysqk == '编校部委托一审') {
console.log('一审情况 选择 社内文编一审 和 编校部委托一审 ,执行此 Scenario ');
callback();
}else{
callback(new Error('一审情况属于:'+ bwzztsBase.ysqk +',并不执行 此 Scenario'));
}
});
这个方法,只是一个判断,并没有任何实际的操作代码。 只有当满足条件,callback();
不满足,报错,并退出当前Scenario 。
下面说,把那个 流程图,分别拆成了几个Scenario ,和这么做的原因。
一个复杂的流程,我给分成了 15个 scenario 。
1、从流程开始 ,到 fork
2、 属于 fork 分支 1 编辑发设计要求。
3 和 4、 属于 fork 2 . 是否有原稿
5、 属于 fork3 是否一级加急
6--13 属于 fork4 是否需要签订合同
14、 join 1 到 join 8
15、 join 8 到 end
fork2 ,拆分成 两个 Scenario 的原因,是 从 是否社内校对 和 是否直接付型 ,开始,会进行判断,继续执行 一校 流程或者,直接 到 自动任务 4 .
,所以,把 这个 判定任务,也做成 Scenario 步骤 ,来判断是否 继续执行 一校 ,否则,跳过 一下 步骤。
6--13 ,同理。 只不过,分这么多Scenario 的原因,是因为,流程图太乱了。。
哪怕 流程图中,所有 的 不通过,和退改 不去判断,也是很乱的。
所以,我就提取出 最后需要判断的步骤
社领导三审,和 书稿三审。
分别进行判断, 只有当 什么条件的时候,才会执行 社领导三审 ? or 书稿三审?
穷举所有的方法 ,每个方法,都加判断条件, 都单独做Scenario 。
这是最笨的办法了。
如果两个Scenario , 有 同名 的步骤 ,同名,必须 都是,Then ,或者,都是When 才可以。
都是
Then 书稿二审 ,可以共用一个 书稿二审的方法。
下面的代码,是这个步骤的 方法。可以理解为,对这个操作步骤的解释。
this.Then(/^书稿二审$/, function(callback) {
if(bwzztsBase.fszpdes =='分社长二审') {
//******************************************************
//切换iframe 到所有任务中。
this.drive.switchTo().defaultContent();
this.drive.sleep(100);
homePage.syrwMenu(this).click();
this.drive.sleep(500);
var frame = homePage.alltaskIframe(this);
this.drive.switchTo().frame(frame);
homePage.rwmcInput(this).sendKeys('书稿二审');
homePage.wdrwCXButton(this).click();
this.drive.sleep(500);
homePage.blButton(this).click();
this.drive.sleep(500);
//**********************************************************
//切换tab 页
bwzztsBase.sgsdTab(this).click();//书稿审读 tab
bwzzts5.SGESshjlCheck(this).click();//审核结论
if(bwzztsBase.pdss=='提交社领导助理三审'){
bwzzts5.SGESshjlSelectZLSS(this).click();//提交社领导助理三审
}else{
bwzzts5.SGESshjlSelectSLDSS(this).click();//提交社领导三审
}
//点击 保存并继续
homePage.startUp(this).click();
this.drive.sleep(5000);
}
callback();
});
暂时想到的,只有这些,再想到啥,以后补充。
下一篇博客,我分享 已经完成的,这个流程图的代码。