美文网首页程序员
Selenium-web自动化实践复选框

Selenium-web自动化实践复选框

作者: 我吃小虾米 | 来源:发表于2017-08-24 18:35 被阅读0次

在做客服审批平台的自动化时遇到要这样一个业务场景:

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自动化的要求只需要做个复选框的随机勾选就可以了。

相关文章

网友评论

    本文标题:Selenium-web自动化实践复选框

    本文链接:https://www.haomeiwen.com/subject/xvwedxtx.html