appium的客戶端(WebDriver)提供的接口按作用分為:
1、系統(tǒng)操作
2、獲取和操作控件信息(常用)
3、控件查找(常用)
4和泌、手勢(shì)操作
系統(tǒng)操作
1. driver.set_network_connection(self,bundle_id) #設(shè)置網(wǎng)絡(luò)
2. app包 ? ? ? ?
? ?2.1 is_app_install(APP_PACKAGE_NAME) #判斷應(yīng)用程序是否安裝
? ? ? ? 返回結(jié)果為True(已安裝)/False(未安裝)
? ? ? ? ? ? 2.1.1 driver.install_app(APK_PATH) #將app_path路徑的應(yīng)用安裝到手機(jī)上,此處的app_path指PC端path,需要包含目錄和文件名祠肥。 ????????????
? ? ? ? ? ? 2.1.2 driver.installApp(r"D:\\android_m\\apk\\ContactManager.apk")
? ? ? ? ? ? 2.1.3 driver.remove_app(APP_PACKAGE) #移除app?
? ? ? ? ? ? 2.1.4?重啟app(先關(guān)閉再啟動(dòng))??不需要入?yún)?/p>
????????????????driver.closeApp();??# 關(guān)閉當(dāng)前操作的app武氓,不會(huì)關(guān)閉驅(qū)動(dòng)對(duì)象,相當(dāng)于按home鍵將應(yīng)用置于后臺(tái),可以通過launchApp()再次啟動(dòng)
????????????????driver.launchApp();? #啟動(dòng)app,重新啟動(dòng)應(yīng)用也是一個(gè)測(cè)試點(diǎn)仇箱,該方法需要配合closeApp()使用的县恕。?
? ? ????2.2?關(guān)閉程序
? ? ? ? ? ? close_app(self)?如果desired capabilities指定的應(yīng)用程序正在運(yùn)行,則關(guān)閉該程序
3.resetApp() #重置當(dāng)前被測(cè)試程序到初始狀態(tài)剂桥,不需要入?yún)ⅰ?/p>
4.current_activity()? #獲取當(dāng)前正在顯示的Activity信息
5.d.start_activity(appPackage,appActivity) #腳本內(nèi)啟動(dòng)其他app,啟動(dòng)后需要數(shù)據(jù)線重新連接忠烛,否則報(bào)其中一個(gè)進(jìn)程在運(yùn)行的錯(cuò)誤
? ? 示例d.start_activity('com.tencent.mm','plugin.account.ui.WelcomeActivity')
6.shake(self) #模擬晃動(dòng)手機(jī)事件
7.background_app(self,seconds) #將被測(cè)app放至后臺(tái)運(yùn)行seconds時(shí)間
8.get_screenshot_as_file(self,filename) #將手機(jī)屏幕截圖保存電腦filename路徑中
9.get_window_size() #獲取手機(jī)的分辨率,一般配合swipe使用
10.print(driver.page_source) #返回當(dāng)前頁面的文檔結(jié)構(gòu)权逗,判斷特定的元素是否存在? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
pull_file(self, path) #拉取手機(jī)上的一個(gè)文件美尸,并以Base64格式編碼返回文件數(shù)據(jù)冤议,path為手機(jī)上的文件路徑????????
????????????//?import base64 ????????
????????????//?data = driver.pull_file('/sdcard/test.txt') # 返回?cái)?shù)據(jù)為base64編碼 ????????
????????????//?print(str(base64.b64decode(data), 'utf-8')) # base64解碼
push_file (self, path, base64data) #將一個(gè)Base64格式編碼的數(shù)據(jù)推送到手機(jī),path為手機(jī)上的文件路徑师坎,base64data為要推送的數(shù)據(jù)? ? ? ?
????????????// import base64 ? ? ? ?
? ? ? ? ? ?// data = str(base64.b64encode('推送內(nèi)容'.encode('utf-8')), 'utf-8') ? ? ? ?
????????????// driver.push_file('/sdcard/推送文件名稱.txt', data)
獲取和操作控件信息
和selenium差不多
1. element.text #獲取控件元素的文本信息
2.?send_keys(self,*value)? #模擬鍵盤輸入到控件中
3. is_selected(self) #判斷控件是否被選中且返回True恕酸,否則返回false
4. element.click() #點(diǎn)擊事件
5. element.clear() #清空控件的文本內(nèi)容
6.?element.get_attribute("enabled") #獲取控件的enabled屬性,相當(dāng)于is_enabled()方法
7.is_enabled()? #判斷控件是否可用屹耐,可用返回True
8. is_displayed() #判斷控件是否顯示,顯示則返回True
控件查找
WebDriver支持id,xpath,className,Accessbility?id和UIAutomator來查找控件
????通過ID定位元素
find_element_by_id(self,id)
find_elements_by_id(self,id)?返回list
示例
? ??end_b=appium_driver.find_element_by_id("com.tencent.mm:id/end")
????end_b.click()
? ?通過xpath定位元素
? ? ? ? find_element_by_xpath(self,xpath)
? ???????find_elements_by_xpath(self,xpath)
??通過class name定位元素
?find_element_by_class_name(self,name)
?find_elements_by_class_name(self,name)
在Native App測(cè)試中椿猎,參數(shù)Nname表示控件的類型惶岭,如android.view.Text?
在網(wǎng)頁測(cè)試中,參數(shù)Name指代網(wǎng)頁element的屬性類名犯眠。如<div class='test-demo'>...</div.>
??
? ?通過Content Description定位元素
find_element_by_accessibility_id(self,id)
find_elements_by_accessibility_id(self,id)
accessibility_id?指Native?App控件的Content description
????通過UIAutomoator定位元素
find_element_by_android_uiautomoator(self,uia_string)
手勢(shì)操作
????滑動(dòng)操作
? ? ? ? swipe(self,start_x,start_y,end_x,end_y,duration=None)? #從A點(diǎn)移動(dòng)到B點(diǎn)
? ? ? ? ? ? ? ? duration為滑動(dòng)動(dòng)作執(zhí)行事件按灶,單位為毫秒,app的坐標(biāo)筐咧,左上角最醒炫浴(0,0)右下角最大
? ? 點(diǎn)擊屏幕
? ? ? ? tap(self,positions,duration=None)? #點(diǎn)擊屏幕上的位置,最多支持五個(gè)手指同時(shí)點(diǎn)擊
? ? ? ? ? ? ? ? positions?值是列表量蕊,列表值為屏幕上坐標(biāo)xy
? ? ? ? ? ? ? ? duration?該參數(shù)不提供铺罢,則認(rèn)為是點(diǎn)擊操作,反之認(rèn)為是長按操作
? ? ? ? ? ? ? ? 示例:driver.tap([(345,1589)],500)? ? driver.tap([(x1,y1),(x2,y2),(x3,y3)],500)
? ? ?縮小操作
? ? ? ? ? ? flick(self,element=None,precent=200,step=50) #在某個(gè)控件上執(zhí)行縮小操作残炮,默認(rèn)縮放比例為200%
? ? ? ? ? ? ? ? element:定位的元素
? ? ? ? ? ? ? ? precent:縮放比例韭赘,默認(rèn)200%
????????????????step:縮小動(dòng)作分多少步完成 ,默認(rèn)50
? ? ? ? ? ? driver.flick(element)
? ? ?放大操作
? ? ? ? ? ? zoom(self,element=None,precent=200,step=50)? #在某個(gè)控件上縮小操作
????滾動(dòng)操作
? ? ? ? ? ? scroll(self,origin_el,destination_el)? #?從origin_el控件滾動(dòng)到destination_el控件上势就,參數(shù)必做是控件泉瞻,則不是控件信息
????拖拽操作
? ? ? ? drag_and_drop(self,orgin_el,destination_el)? 把origin_el控件拖拽到destination_el控件位置