Appium之Native App自動化

Appium的介紹python

Appium是一個開源、跨平臺的自動化測試工具,用於測試Native(原生)和Hybrid(混合) 應用,支持IOSAndroidFirefoxOS(已倒閉)平臺android

AppiumAndroid平臺實現自動化,是基於UIAutomator框架的git

Appium的理念web

一、無需從新編譯應用api

二、不侷限於語言和框架架構

三、無需重複造輪子,接口統一app

四、不管精神上,仍是名義上,必須開源框架

Appium的特色工具

跨架構:Native Hybrid Webview測試

跨設備:Android IOS Firefox OS

跨語言:Java Python Ruby PHP JavaScript

跨進程:不依賴源碼(基於UIAutomator

 

 

腳本實現:測試計算器的加法、減法功能

—— Appium的配置、啓動

測試平臺-PlatformName: 可選androidFirefoxOS ,IOS在頁面頂部選擇

選擇框架-AutomationName:測試NativeAppium,測試HybridSelendroid

系統版本-PlatformVersion:可進入手機查看系統版本號

配置完成後,收起配置菜單。在頁面右上角點擊Launch’啓動Appium

Appiumlog中,若是出現:[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

相關文章
相關標籤/搜索