Selenium-Web自动化实践复选框

发表于:2018-1-24 10:31

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:我吃小虾米    来源:简书

  在做客服审批平台的自动化时遇到要这样一个业务场景:
  A.客服人员对进件处理,可操作选项是“通过”、“退件”、“拒绝”
  B.客服人员需要对“退件”、“拒绝”选择做详细原因选择(可多选)
  C.客服人员勾选审批意见后,点击“提交”按钮,完成进件审批操作
  根据以上整理出简单的思路
  1、点定位到“通过”、“退件”、“拒绝”按钮
  2、点击“通过”、“退件”、“拒绝”按钮
  3、勾选“退件”、“拒绝”的详细原因
  4、点击“提交”按钮
  根据思路整理出代码如下:
  首先需要解决第一步和第二步,先找到按钮的定位,我是将定位表达式写到properties里,以下是三个按钮的定位方法:
Yffin_PendinfoPage.passbtu=xpath>//span/input[@value='102']
Yffin_PendinfoPage.returnbtu=xpath>//span/input[@value='104']
Yffin_PendinfoPage.rejectbtu=xpath>//span/input[@value='109']
  以下是代码:
//通过
public void clickPassBtu() {
try {
driver.findElement(new GetObjectMapProperties().getLocator("Yffin_PendinfoPage.passbtu")).click();//找到通过按钮,并点击通过按钮
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//退件
public void clickReturnBtu() {
try {
driver.findElement(new GetObjectMapProperties().getLocator("Yffin_PendinfoPage.returnbtu")).click();//找到退件按钮并点击
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//拒绝
public void clickRejectBtu() {
try {
driver.findElement(new GetObjectMapProperties().getLocator("Yffin_PendinfoPage.rejectbtu")).click();;//找到拒绝按钮并点击
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
  然后解决第三步,根绝实际场景,客服人员在选择在“退件”或“拒绝”详细原因时只勾选详细原因并不会一成不变的。因此,可以设计成勾选随机个随机的原因。这样更贴切业务场景。
  以退件为例,上图的红色框内是客服人员随机勾选的退件原因。那么需要先定位到所有的退件原因,根据下图的HTML可以写Xpath表达式定位得出:
  Yffin_PendinfoPage.returninreasons=xpath>//div[@id='subReturnCheckboxDiv']/div[@id='tjInnerReasons']//input
  因此代码如下:
//勾选退件原因
public void checkReturnReasons() throws Exception {
ListfindElements = driver.findElements(new GetObjectMapProperties().getLocator("Yffin_PendinfoPage.returninreasons"));
int max = findElements.size();
System.out.println(max);
int nextInt = new Random().nextInt(max);
System.out.println(nextInt);
for (int i = 0; i < nextInt; i++) {
System.out.println(i);
findElements.get( new Random().nextInt(max)).click();
}
}
  通过调试发现以上代码可以实现随机选择退件原因,但是在多次调试后发现一个问题,打印出的nextInt与页面上勾选的不一致,nextInt大于页面勾选的复选框的数量。猜测出现这个状况的原因有两点:一是,在执行过程中确实没有勾选复选框;二是,在执行时某一复选框被执行两次。通过审查代码得出执行for循环时可能产生的随机数与之前一致,那再次点击复选框就会是取消勾选。找到问题的原因后,可以再for循环内加一个判断:如果复选框已经被勾选了,就重新确定复选框。修改后的代码如下:
//勾选退件原因
public void checkReturnReasons() throws Exception {
ListfindElements = driver.findElements(new GetObjectMapProperties().getLocator("Yffin_PendinfoPage.returninreasons"));
int max = findElements.size();
int nextInt = new Random().nextInt(max);
System.out.println(nextInt);
for (int i = 0; i < nextInt; i++) {
int j = new Random().nextInt(max);
while(findElements.get(j).isSelected()){
int m=new Random().nextInt(max);
j=m;
}
findElements.get(j).click();
}
}
  以上思路是将所有的退件原因看成一个整体,但是这样并没有贴近真实业务。真实业务步骤是:
  1、先判断进件的主处理,根据不同的规则判断选择主按钮是什么?
  1.1、如果是通过,则可以直接提交审核结果
  1.2、如果是退件或拒绝,需要判断次要处理。比如:进件信息内的公司名称是不合法,主处理是“退件”,则次要处理需要勾选单位名称下的“有误”复选框
  这样就需要做的判断和定位比较多,考虑到投入与产出和时间原因,最终的UI自动化的要求只需要做个复选框的随机勾选就可以了。

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
精选软件测试好文,快来阅读吧~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号