在做客服審批平臺的自動化時遇到要這樣一個業(yè)務場景:
A.客服人員對進件處理开睡,可操作選項是“通過”、“退件”苟耻、“拒絕”
B.客服人員需要對“退件”篇恒、“拒絕”選擇做詳細原因選擇(可多選)
C.客服人員勾選審批意見后,點擊“提交”按鈕凶杖,完成進件審批操作
根據(jù)以上整理出簡單的思路
1胁艰、點定位到“通過”、“退件”官卡、“拒絕”按鈕
2蝗茁、點擊“通過”、“退件”寻咒、“拒絕”按鈕
3哮翘、勾選“退件”、“拒絕”的詳細原因
4毛秘、點擊“提交”按鈕
根據(jù)思路整理出代碼如下:
首先需要解決第一步和第二步饭寺,先找到按鈕的定位,我是將定位表達式寫到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();
}
}
然后解決第三步,根絕實際場景抹恳,客服人員在選擇在“退件”或“拒絕”詳細原因時只勾選詳細原因并不會一成不變的员凝。因此,可以設計成勾選隨機個隨機的原因奋献。這樣更貼切業(yè)務場景健霹。
以退件為例旺上,上圖的紅色框內(nèi)是客服人員隨機勾選的退件原因。那么需要先定位到所有的退件原因糖埋,根據(jù)下圖的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();
}
}
通過調(diào)試發(fā)現(xiàn)以上代碼可以實現(xiàn)隨機選擇退件原因宣吱,但是在多次調(diào)試后發(fā)現(xiàn)一個問題,打印出的nextInt與頁面上勾選的不一致瞳别,nextInt大于頁面勾選的復選框的數(shù)量征候。猜測出現(xiàn)這個狀況的原因有兩點:一是,在執(zhí)行過程中確實沒有勾選復選框祟敛;二是疤坝,在執(zhí)行時某一復選框被執(zhí)行兩次。通過審查代碼得出執(zhí)行for循環(huán)時可能產(chǎn)生的隨機數(shù)與之前一致垒棋,那再次點擊復選框就會是取消勾選卒煞。找到問題的原因后痪宰,可以再for循環(huán)內(nèi)加一個判斷:如果復選框已經(jīng)被勾選了叼架,就重新確定復選框。修改后的代碼如下:
//勾選退件原因
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();
}
}
以上思路是將所有的退件原因看成一個整體衣撬,但是這樣并沒有貼近真實業(yè)務乖订。真實業(yè)務步驟是:
1、先判斷進件的主處理具练,根據(jù)不同的規(guī)則判斷選擇主按鈕是什么乍构?
1.1、如果是通過扛点,則可以直接提交審核結果
1.2哥遮、如果是退件或拒絕,需要判斷次要處理陵究。比如:進件信息內(nèi)的公司名稱是不合法眠饮,主處理是“退件”,則次要處理需要勾選單位名稱下的“有誤”復選框
這樣就需要做的判斷和定位比較多铜邮,考慮到投入與產(chǎn)出和時間原因仪召,最終的UI自動化的要求只需要做個復選框的隨機勾選就可以了。