1. 程式人生 > >uiautomator中如何判斷開關wifi開啟和關閉是否正確

uiautomator中如何判斷開關wifi開啟和關閉是否正確

在我們測試壓力中肯定有這麼些用例,就是讓你開啟xxx開關,判斷開關開啟成功,該如何去判斷呢!

我們就舉wifi開關為例,這裡不考慮wifi開啟後連線wifi然後能上網一系列動作我們暫不考慮,只開了開啟和關閉開關這個動作,開啟時是否開啟成功,關閉時是否關閉成功;

第一步,開啟開關這個動作我相信每個人都會,但是我們要思考如何並且判斷開啟開關成功,自動化開發就難倒在如何去判斷和定位問題,我們開啟開關肉眼可以看出就可以看,但是程式碼怎麼去判斷,程式碼實現肯定是:開啟-關閉-開啟-再關閉-再開啟····這樣的迴圈操作,也就是說,我第1次是開啟,那第2次是關閉,第3次是開啟,第4次是關閉····這規律就出來了,奇數是開啟的意思,偶數是關閉的意思;我們第1次(奇數)開啟開關的時候,使用uiautomator view工具檢視test內容顯示是否是關閉,反之,偶數是關閉時判斷test文字是否顯示是開啟。只要用奇偶數去判斷test文字內容,我們就可以進行判斷,


因為我是根據奇偶數去判斷狀態的方法,所以開始測試前要確保開關是保證關閉狀態的,要是為開啟狀態,記錄的結果肯定是錯誤,當然還有其他的辦法,我這種辦法屬於簡單粗暴,簡單易懂。僅供參考;

直接上程式碼:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.Calendar;

import android.R.string;

import com.android.uiautomator.testrunner.UiAutomatorTestCase;
import com.android.uiautomator.core.UiDevice;
import com.android.uiautomator.core.UiObject;
import com.android.uiautomator.core.UiObjectNotFoundException;
import com.android.uiautomator.core.UiScrollable;
import com.android.uiautomator.core.UiSelector;
import dengshengyu.Util.FileUtil;

/*
 * 專案名稱:PublicPressureScript
 * 類名稱:WifiOnAndOff
 * 類描述:連續開啟、關閉WiFi開關
 * 建立人:鄧盛譽
 * 建立時間:2017年8月15日 上午14:28
 * 備註:wifi開關初始狀態要預設關閉,終端為開機狀態;
 * @版本v0.0.1
 * 
 * */
public class WifiOnAndOff extends UiAutomatorTestCase{
 
	
		public void testWifi() throws Exception {  
			
			int i=0;
			int count = 1 ;
			int count1 = 1 ;
			int count2 = 1 ;
			int count3 = 1 ;
		
			//home鍵返回主介面
	        getUiDevice().pressHome(); 
	        
	        // 進入設定選單  
	        Runtime.getRuntime().exec("am start com.android.settings");   
	        sleep(3000);
	        
	        // 首次開關預設為關;迴圈點選開關50次
	        for(;i<50;i++){
//	        getUiDevice().click(574,306);
	        UiObject clickOnAndOff = new UiObject(new UiSelector().resourceId("com.android.settings:id/switchWidget"));
	        clickOnAndOff.click();
	        sleep(2000);

	        //判斷開關是否正確;
	        UiObject onOff = new UiObject(new UiSelector().resourceId("com.android.settings:id/switchWidget"));//開關控制元件
	        Runtime.getRuntime().exec("mkdir sdcard/dengshengyu"); // 在手機建立資料夾
	        Runtime.getRuntime().exec("mkdir sdcard/dengshengyu/wifi"); // 在手機建立資料夾
	          if(i%2==0){//偶數是為開
	        	  if(onOff.getText().equals("開啟")){//開啟成功   
	        		  
					     FileUtil.out("/sdcard/dengshengyu/wifi/Wifi開啟成功.txt", "開啟正確次數:"+count+";");
	        		     System.out.println("KaiQiChengGong");
	        		     count=count+1;
	        		  
	        	  } else if(onOff.getText().equals("關閉")){//開啟失敗!
	        			  
						 FileUtil.out("/sdcard/dengshengyu/wifi/Wifi開啟失敗.txt", "開啟失敗次數:"+count1+";");
		        		 System.out.println("KaiQiShiBai");
		        		 count1=count1+1;
		        		   
	        		}
	        	  
	          }else //否則為奇數,也就是為關閉
	        	   
                   if(onOff.getText().equals("關閉")){//關閉成功
                	   
					  FileUtil.out("/sdcard/dengshengyu/wifi/Wifi關閉成功.txt", "關閉正確次數:"+count2+";");
	        		  System.out.println("GuanBiChengGong");
	        		  count2=count2+1;
	        		  
	        		  
	        	   } else if(onOff.getText().equals("開啟")){//關閉失敗
	        		  
					 FileUtil.out("/sdcard/dengshengyu/wifi/Wifi關閉失敗.txt", "關閉失敗次數:"+count3+";");
	        		 System.out.println("GuanBiShiBai");
	        		 count3=count3+1;
	        	     }
	        }//for
	        	  
	          
	        	 
	    }
	          
}

這裡添加個附件知識:
UiObject clickOnAndOff = new UiObject(new UiSelector().resourceId("com.android.settings:id/switchWidget"));
這條控制元件名預設是第一個開關,從我手機截圖中大家可以知道我的wifi開關就在當前介面,而且resourceId就只有一個,大家有沒有想過,要是當前介面有很多開關,而且resourceId和className等名稱都一樣呢,大家怎麼獲取?請看我另篇文章有講解;

---------------------------------完,不明白的給我留言·······················


文章作者:享有盛譽之名