appium介紹
appium是一個移動端的自動化框架葵腹,可用測試原生應(yīng)用玩般,移動網(wǎng)頁應(yīng)用银觅,和混合型應(yīng)用,且是跨平臺的坏为【柯浚可用iso和android以及的操作系統(tǒng)。
原生的應(yīng)用是指用Android 或者ios編寫的應(yīng)用匀伏;移動端網(wǎng)頁應(yīng)用是指網(wǎng)頁應(yīng)用洒忧,類似于ios中safari應(yīng)用或者chrome應(yīng)用或者瀏覽的應(yīng)用;混混應(yīng)用是指一種包裹webview的應(yīng)用够颠,原生應(yīng)用于網(wǎng)頁內(nèi)容交互性的應(yīng)用
重要的時安排皮毛的跨平臺的熙侍,何為跨平臺,意思就是可以針對不同的平臺用一套api來編寫測試用例
環(huán)境搭建
? 然后就是一些appium的安裝
Appium庫安裝
# 安裝pip install Appium-Python-Client# 檢驗(yàn)是否成功piplist
Appium使用
①打開手機(jī)應(yīng)用
②打開Appium
③創(chuàng)建一個python項(xiàng)目履磨,并創(chuàng)建一個文件
④將下面代碼復(fù)制到文件中
⑤獲取當(dāng)前應(yīng)用包名和啟動activity并修改文件
?腳本內(nèi)啟動其他app
driver.start_activity(appPackage,appActivity)
關(guān)閉app
driver.close_app() # 關(guān)閉當(dāng)前操作的app蛉抓,不會關(guān)閉驅(qū)動對象
關(guān)閉驅(qū)動對象????
driver.quit() # 關(guān)閉驅(qū)動對象,同時關(guān)閉所有關(guān)聯(lián)的app
App基礎(chǔ)操作API
完成app自動化需要一些基礎(chǔ)條件的支持剃诅,本節(jié)將講解APP初始化API
前置代碼
# server 啟動參數(shù)desired_caps={}desired_caps['platformName']='Android'desired_caps['platformVersion']='5.1'desired_caps['deviceName']='192.168.56.101:5555'desired_caps['appPackage']='com.android.settings'desired_caps['appActivity']='.Settings'desired_caps['unicodeKeyboard']=Truedesired_caps['resetKeyboard']=True# 聲明driver對象driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
安裝APK到手機(jī)
driver.install_app(app_path)
?手機(jī)中移除APP
driver.remove_app(app_id)
判斷APP是否已安裝
driver.is_app_installed(bundle_id)
importbase64data=str(base64.b64encode(data.encode('utf-8')),'utf-8')driver.push_file(path,data)參數(shù):
從手機(jī)中拉取文件
importbase64data=driver.pull_file(path)# 返回數(shù)據(jù)為base64編碼print(str(base64.b64decode(data),'utf-8'))# base64解碼
獲取當(dāng)前屏幕內(nèi)元素結(jié)構(gòu)
driver.page_source
手機(jī)控件查看工具uiautomatorviewer
如何使用
進(jìn)入SDK目錄下的tools目錄巷送,打開uiautomatorviewer
電腦連接真機(jī)或打開android模擬器
啟動待測試app
點(diǎn)擊uiautomatorviewer的左上角Device Screenshot,會生成app當(dāng)前頁面的UI控件截圖
APP元素定位操作
手工測試主要通過可見按鈕操作,而自動化是通過元素進(jìn)行交互操作矛辕。
元素的基本定位基于當(dāng)前屏幕范圍內(nèi)展示的可見元素笑跛。
通過id定位
方法:find_element_by_id(id_value) # id_value:為元素的id屬性值
業(yè)務(wù)場景:
1. 進(jìn)入設(shè)置頁面
2. 通過ID定位方式點(diǎn)擊搜索按鈕
通過class定位
方法:find_element_by_class_name(class_value) # class_value:為元素的class屬性值
業(yè)務(wù)場景:
1. 進(jìn)入設(shè)置頁面
2. 點(diǎn)擊搜索按鈕
3. 通過class定位方式點(diǎn)擊輸入框的返回按鈕
定位一組元素,注意element -> elements
應(yīng)用場景為元素值重復(fù)付魔,無法通過元素屬性直接定位到某個元素,只能通過elements方式來選擇飞蹂,返回一個定位對象的列表
獲取元素的文本內(nèi)容
方法: text
業(yè)務(wù)場景:
1.進(jìn)入設(shè)置
2.獲取所有元素class屬性為“android.widget.TextView”的文本內(nèi)容
獲取元素在屏幕上的坐標(biāo)
方法:location
業(yè)務(wù)場景:
1.進(jìn)入設(shè)置頁面
2.獲取搜索按鈕在屏幕的坐標(biāo)位置
獲取app包名和啟動名
獲取包名方法:current_package
獲取啟動名:current_activity
業(yè)務(wù)場景:
1.啟動設(shè)置
2.獲取包名和啟動名
應(yīng)用置于后臺事件
APP放置后臺几苍,模擬熱啟動
方法:background_app(seconds)
參數(shù):
1.seconds:停留在后臺的時間,單位:秒
業(yè)務(wù)場景:
1.進(jìn)入設(shè)置頁
2.將APP置于后臺5s
APP模擬手勢高級操作
TouchAction是AppiumDriver的輔助類陈哑,主要針對手勢操作妻坝,比如滑動、長按芥颈、拖動等惠勒,原理是將一系列的動作放在一個鏈條中發(fā)送到服務(wù)器赚抡,服務(wù)器接受到該鏈條后爬坑,解析各個動作,逐個執(zhí)行涂臣。
手指輕敲操作
模擬手指輕敲一下屏幕操作
方法:tap(element=None, x=None, y=None)
方法:perform() # 發(fā)送命令到服務(wù)器執(zhí)行操作
參數(shù):
1.element:被定位到的元素
2.x:相對于元素左上角的坐標(biāo)盾计,通常會使用元素的X軸坐標(biāo)
3.y:通常會使用元素的Y軸坐標(biāo)
業(yè)務(wù)場景:
1.進(jìn)入設(shè)置
2.點(diǎn)擊WLAN選項(xiàng)
手指按操作
模擬手指按下屏幕,按就要對應(yīng)著離開.
方法:press(el=None, x=None, y=None)
方法:release() # 結(jié)束動作,手指離開屏幕
參數(shù):
1.element:被定位到的元素
2.x:通常會使用元素的X軸坐標(biāo)
3.y:通常會使用元素的Y軸坐標(biāo)
業(yè)務(wù)場景:
1.進(jìn)入設(shè)置
2.點(diǎn)擊WLAN選項(xiàng)
等待操作
方法:wait(ms=0)
參數(shù):
ms:暫停的毫秒數(shù)
業(yè)務(wù)場景:
1.進(jìn)入設(shè)置
2.點(diǎn)擊WLAN選項(xiàng)
3.長按WiredSSID選項(xiàng)5秒
手指長按操作
模擬手機(jī)按下屏幕一段時間,按就要對應(yīng)著離開.
方法:long_press(el=None, x=None, y=None, duration=1000)
參數(shù):
1.element:被定位到的元素
2.x:通常會使用元素的X軸坐標(biāo)
3.y:通常會使用元素的Y軸坐標(biāo)
4.duration:持續(xù)時間赁遗,默認(rèn)為1000ms
業(yè)務(wù)場景:
1.進(jìn)入設(shè)置
2.點(diǎn)擊WLAN選項(xiàng)
3.長按WiredSSID選項(xiàng)5秒
手指移動操作
模擬手機(jī)的滑動操作
方法:move_to(el=None, x=None, y=None)
參數(shù):
1.el:定位的元素
2.x:相對于前一個元素的X軸偏移量
3.y:相對于前一個元素的Y軸偏移量
業(yè)務(wù)場景1:
1.進(jìn)入設(shè)置
2.向上滑動屏幕
手機(jī)操作API
針對手機(jī)的一些常用設(shè)置功能進(jìn)行操作.
獲取手機(jī)時間
方法:device——time
代碼實(shí)現(xiàn):
獲取當(dāng)前手機(jī)的時間
print(driver.drvier——time)
執(zhí)行結(jié)果
web Dec27 02:52:45: EST 2017
獲取手機(jī)的寬高
獲取手機(jī)的寬高署辉,可以根據(jù)寬高做一些坐標(biāo)的操作
方法:get_window_size()
代碼實(shí)現(xiàn):
print(driver.get_window_size())
{‘height:800’,‘width’:400}
發(fā)送鍵到設(shè)備
模擬系統(tǒng)值得操作岩四,比如操作home鍵音量鍵哭尝,返回鍵
參數(shù):
keycode 發(fā)送給設(shè)備的關(guān)鍵的代碼
metaste 關(guān)于被發(fā)送的關(guān)鍵代碼的源信息,一般為默認(rèn)值
業(yè)務(wù)場景:
打開設(shè)置
按多次音量鍵加鍵