1.Appium介紹
????Appium是一個(gè)移動(dòng)端的自動(dòng)化框架,可用于測(cè)試原生應(yīng)用、移動(dòng)網(wǎng)頁應(yīng)用和混合型應(yīng)用,且是跨平臺(tái)的
2.環(huán)境搭建
????需準(zhǔn)備:jdk1.6.0、android-sdk_r24.3.4-windows、python2.7、appium1.4.13.1、Node.js、Appium-Python-Client
????Appium庫安裝:
????????# 安裝
????????pip? install? Appium-Python-Client
????????# 檢驗(yàn)是否成功
????????pip list
3.Appium使用
????1.打開模擬器或者真機(jī)的應(yīng)用
????????①打開手機(jī)應(yīng)用
????????②打開Appium
????????③創(chuàng)建一個(gè)python項(xiàng)目,并創(chuàng)建一個(gè)文件
????????④將下面代碼復(fù)制到文件中
????????⑤獲取當(dāng)前應(yīng)用包名和啟動(dòng)activity并修改文件
????2.腳本內(nèi)啟動(dòng)其他app:driver.start_activity(appPackage,appActivity)
????3.關(guān)閉app:driver.close_app()? # 關(guān)閉當(dāng)前操作的app,不會(huì)關(guān)閉驅(qū)動(dòng)對(duì)象
????4.關(guān)閉驅(qū)動(dòng)對(duì)象:driver.quit()
4.App基礎(chǔ)操作API
????????1.前值代碼
????????????# server 啟動(dòng)參數(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']=True
????????????desired_caps['resetKeyboard']=True
????????????# 聲明driver對(duì)象
????????????driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
????????2.安裝APK到手機(jī):driver.install_app(app_path)
????????3.手機(jī)中移除App:driver.remove_app(app_id)
????????4.判斷APP是否已安裝:driver.is_app_installed(bundle_id)
????????5.從手機(jī)中拉取文件:
????????????import base64
????????????data=driver.pull_file(path)# 返回?cái)?shù)據(jù)為base64編碼
????????????print(str(base64.b64decode(data),'utf-8'))# base64解碼
????????6.獲取當(dāng)前屏幕內(nèi)元素結(jié)構(gòu):driver.page_source?
5.手機(jī)空間查看工具uiautomatorviewer
????????1.工具簡(jiǎn)介:用來掃描和分析Android應(yīng)用程序的UI控件的工具
????????2.how使用:1.進(jìn)入SDK目錄下的tools目錄,打開uiautomatorviewer
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2.電腦連接真機(jī)或打開android模擬器
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3.啟動(dòng)待測(cè)試app
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?4.點(diǎn)擊uiautomatorviewer的左上角Device Screenshot,會(huì)生成app當(dāng)前頁面的UI控件截圖
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?5.選擇截圖上需要查看的控件,即可瀏覽該控件的id,class,text,坐標(biāo)等信息
6.App元素定位操作
????1.Appium常用元素定位方式
????????id→id屬性值 :find_element/s_by_id(id_value) # id_value:為元素的id屬性值
????????class→class屬性值:find_element/s_by_class_name(class_value) # class_value:為元素的class屬性值
????????xpath→xpath表達(dá)式:find_element/s_by_xpath(xpath_value) # xpath_value:為可以定位到元素的xpath語句
、等待
# 顯式等待
fromselenium.webdriver.support.waitimportWebDriverWait
WebDriverWait(driver,timeout,poll_frequency).until(lambdax:x.find_elements_by_id(id_value))
# 固定等待
importtime
time.sleep(2)
APP元素信息操作API
# 1. 點(diǎn)擊元素
ele.click()
# 2. 發(fā)送數(shù)據(jù)到輸入框
send_keys(vaue)
# 如果輸入中文,會(huì)報(bào)錯(cuò),解決
desired_caps['unicodeKeyboard'] =True
desired_caps['resetKeyboard'] =True
# 3. 清空輸入框內(nèi)容
ele.clear()
# 4. 獲取元素的文本內(nèi)容
ele.text
# 5. 獲取元素的屬性值
ele.get_attribute(屬性)
# 6. 獲取元素在屏幕上的坐標(biāo)
ele.location
# 7. 獲取app包名和啟動(dòng)名
driver.current_package
driver.current_activity
APP元素事件操作API
# swip滑動(dòng)事件:點(diǎn)到點(diǎn)
driver.swipe(188,659,148,248,duration=5000)
# scroll:元素到元素
driver.scroll(ele1,ele2,duration=5000)
# drag:元素拖到元素
driver.drag_and_drop(ele1,ele2)
# 應(yīng)用置于后臺(tái)事件,time在后臺(tái)停留時(shí)間
driver.backgroud_app(time)
APP模擬手勢(shì)高級(jí)操作
fromappium.webdriver.common.touch_actionimportTouchAction
# 手指輕敲操作
TouchAction(driver).tap(ele).perform()
TouchAction(driver).tap(x=x,y=y).perform()
# 手指按操作
TouchAction(driver).press(ele).release().perform()
TouchAction(driver).press(x=x,y=y).release().perform()
# 手指長(zhǎng)按操作
TouchAction(driver).long_press(ele,duration=time).release().perform()
TouchAction(driver).long_press(x=x,y=y,duration=time).release().perform()
# 手指移動(dòng)操作
TouchAction(driver).press(ele1).wait(2000).move_to(ele2).release().perform()
TouchAction(driver).press(x=x,y=y).wait(2000).move_to(x=x,y=y).release().perform()
手機(jī)操作API
driver.device_time
driver.get_window_size()
# 發(fā)送鍵到設(shè)備
driver.keyevent(keycode)
keycode:242534
# 打開手機(jī)通知欄
driver.open_notifications()
# 獲取手機(jī)當(dāng)前網(wǎng)絡(luò)
# 結(jié)果:0 1 2 4 6
driver.network_connection
# 設(shè)置手機(jī)網(wǎng)絡(luò)
driver.set_network_connection(1)
# 手機(jī)截圖
importos
driver.get_screenshot_as_file(os.getcwd()+os.sep+'./screen.png')
腳本錄制
點(diǎn)擊“開始錄制”
操作手機(jī)
結(jié)束錄制
復(fù)制代碼