Appium的介紹python
Appium是一個開源、跨平臺的自動化測試工具,用於測試Native(原生)和Hybrid(混合) 應用,支持IOS,Android和FirefoxOS(已倒閉)平臺android
Appium在Android平臺實現自動化,是基於UIAutomator框架的git
Appium的理念web
一、無需從新編譯應用api
二、不侷限於語言和框架架構
三、無需重複造輪子,接口統一app
四、不管精神上,仍是名義上,必須開源框架
Appium的特色工具
跨架構:Native Hybrid Webview測試
跨設備:Android IOS Firefox OS
跨語言:Java Python Ruby PHP JavaScript
跨進程:不依賴源碼(基於UIAutomator)
腳本實現:測試計算器的加法、減法功能
—— Appium的配置、啓動
測試平臺-PlatformName: 可選android和FirefoxOS ,IOS在頁面頂部選擇
選擇框架-AutomationName:測試Native選Appium,測試Hybrid選Selendroid
系統版本-PlatformVersion:可進入手機查看系統版本號
配置完成後,收起配置菜單。在頁面右上角點擊‘Launch’啓動Appium
在Appium的log中,若是出現:[Appium] Appium REST http interface listener started on 0.0.0.0:4723 那就說明,Appium的服務已經啓動
代碼示例:
#urs/bin/python #coding:utf8 import unittest,time from appium import webdriver class MyTestCase(unittest.TestCase): #腳本初始化,獲取操做實例 def setUp(self): desired_caps={} desired_caps['platformName']=''#指定平臺 desired_caps['platformVersion']=''#和Appium裏設置的同樣 desired_caps['deviceName']=''#指定須要控制的設備,在控制檯中輸入adb devices 就會出現deviceName desired_caps['appPackage']=''#被測試程序的packageName,在控制檯中輸入adb logcat | grep(findstr) START desired_caps['appActivity']=''#packageName中/後面的就是這個 desired_caps['unicodeKeyboard']='True'#更改測試機的輸入法 desired_caps['resetKeyboard']='True'#將更改後的輸入法還原爲機器原來的輸入法,值爲false則不還原 #得到操做程序的句柄,用Remote實現 #4723能夠在啓動APPium時,看到 self.driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps) #釋放實例,釋放資源 def tearDown(self): self.driver.quit() #測試的腳本 def test_Add(self): #判斷APP是否安裝了 print self.driver.is_app_installed('com.example.zhangjian.minibrowser2')#參數:APP包名 #刪除APP self.driver.remove_app('com.example.zhangjian.minibrowser2')#參數:APP包名 #安裝APP,(會遇到一個問題,初始化時因爲沒有這個APP會報錯,能夠修改初始化時的APP,而後這裏的語句再安裝咱們想要安裝的APP) self.driver.install_app('Users/zhangjiang/Downloads/app-debug.apk')#參數:APP在當前系統下的路徑 #啓動APP self.driver.launch_app() time.sleep(3) #關閉APP self.driver.close_app() self.driver.launch_app() #啓動activity self.driver.start_activity('com.example.zhangjian.minibrowser2','.myapplication.NewActivity')#參數1:包名,參數2:activity名 #截屏 time.sleep(3) self.driver.get_screenshot_as_file('test.png') # 圖片保存在當前腳本目錄下 time.sleep(5) #快速滑動 API flick的用法 self.driver.flick(100,750,100,100) #當前activity API current_Activity的用法 print self.driver.current_activity #將某一個APP置於後臺,3s鍾後再調回前臺 self.driver.background_app(3) #等待指定activity顯示API wait_activity的用法 print self.driver.wait_activity('activity名稱',3,1)# 3表示等待3秒,1表示1秒中check一下activity是否顯示了 #Locate定位一個元素,Operate操做一個元素 self.driver.find_element_by_id('digit8').click() self.driver.find_element_by_id('plus').click() self.driver.find_element_by_id('digit5').click() self.driver.find_element_by_id('equal').click() #Verify驗證結果 #獲取計算結果,結果處無id,使用class定位元素 try: value=self.driver.find_element_by_class_name('android.widget.EditText').text self.assertEqual('13',value) except Exception: print u'出現異常了' self.fail(u'程序出現異常') #Exception異常處理的狀況 def testOtherAPI(self): ''' elements=self.driver.find_elements_by_id("digit8") elements[0].click() time.sleep(3) print len(elements)''' # find_element_by_accessibility_id 的用法 self.driver.find_element_by_id('digit1').click() self.driver.find_element_by_id('digit0').click() # accessibility 定位取content-desc的屬性值 self.driver.find_element_by_accessibility_id(u"除").click()# 點擊「除號」 self.driver.find_element_by_id("equal").click() time.sleep(3) def test_moreAPI(self): #獲取元素列表 els=self.driver.find_elements_by_class_name("") ''' # 1.滾動scroll的用法 # 指定從某個元素滾動到另外一個元素的位置 self.driver.scroll(els[10],els[1]) # 2.拖拽drag_and_drop的用法 # 選中某個元素拖拽到另外一個元素的位置 self.driver.drag_and_drop(els[10],els[3]) # 3.滑動swipe的用法 # 須要傳入4個參數(start_x,start_y,end_x,end_y) self.driver.swipe(100,750,100,100) # 4.點擊tap的用法 # 參數傳入座標點 self.driver.tap([(100,750)]) ''' # 1.快速滑動flick的用法 self.driver.flick(100,750,100,100) # 2.顯示當前activity的api current_activity的用法 print self.driver.current_activity # 3.將某一個app置於後臺,3s後再調回前臺 self.driver.background_app(3) # 4.等待指定activity顯示API print self.driver.wait_activity('activity名稱',3,1)# 3表示等待3秒,1表示1秒中check一下activity是否顯示了 if __name__=='__main__': unittest.main()
*** 經常使用API介紹 ***
scroll() 操做滾動條
drag_and_drop() 拖動元素到指定位置
swipe() 配合up(下滑)或down(上滑)使用
flick(x,y,x,y) 滑動
tap() 點擊
get_screenshot_as_file(截屏路徑) 進行截屏
press_keycode() Keycode_0 數字0對應鍵值7 即:Press_keycode(7)表明輸入一個數字0以此類推數字9對應鍵值16
find_element_by_accessibility_id() accessibility 定位取content-desc的屬性值
current_activity() 輸出當前activity的名字
wait_activity() 等待activity顯示
start_activity() 啓動activity下的某一個活動頁面
is_app_installed(package) 判斷APP是否安裝了
install_app(package路徑) 安裝APP
remove_app(package) 刪除APP
launch_app() 啓動APP(無需傳入參數,啓動的是初始化時指定的app)
close_app() 關閉APP
background_app() 將APP指給後臺,在多長時間後再返回給前臺,參數:時間 單位:秒
***END