1.Appium介紹
????Appium是一個移動端的自動化框架扩灯,可用于測試原生應用媚赖、移動網頁應用和混合型應用,且是跨平臺的
2.環(huá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
????????# 檢驗是否成功
????????pip list
3.Appium使用
????1.打開模擬器或者真機的應用
????????①打開手機應用
????????②打開Appium
????????③創(chuàng)建一個python項目,并創(chuàng)建一個文件
????????④將下面代碼復制到文件中
????????⑤獲取當前應用包名和啟動activity并修改文件
????2.腳本內啟動其他app:driver.start_activity(appPackage,appActivity)
????3.關閉app:driver.close_app()? # 關閉當前操作的app顾患,不會關閉驅動對象
????4.關閉驅動對象:driver.quit()
4.App基礎操作API
????????1.前值代碼
????????????# 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']=True
????????????desired_caps['resetKeyboard']=True
????????????# 聲明driver對象
????????????driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
????????2.安裝APK到手機:driver.install_app(app_path)
????????3.手機中移除App:driver.remove_app(app_id)
????????4.判斷APP是否已安裝:driver.is_app_installed(bundle_id)
????????5.從手機中拉取文件:
????????????import base64
????????????data=driver.pull_file(path)# 返回數(shù)據(jù)為base64編碼
????????????print(str(base64.b64decode(data),'utf-8'))# base64解碼
????????6.獲取當前屏幕內元素結構:driver.page_source?
5.手機空間查看工具uiautomatorviewer
????????1.工具簡介:用來掃描和分析Android應用程序的UI控件的工具
????????2.how使用:1.進入SDK目錄下的tools目錄番捂,打開uiautomatorviewer
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2.電腦連接真機或打開android模擬器
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3.啟動待測試app
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?4.點擊uiautomatorviewer的左上角Device Screenshot,會生成app當前頁面的UI控件截圖
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?5.選擇截圖上需要查看的控件,即可瀏覽該控件的id,class,text,坐標等信息
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表達式: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. 點擊元素
ele.click()
# 2. 發(fā)送數(shù)據(jù)到輸入框
send_keys(vaue)
# 如果輸入中文设预,會報錯,解決
desired_caps['unicodeKeyboard'] =True
desired_caps['resetKeyboard'] =True
# 3. 清空輸入框內容
ele.clear()
# 4. 獲取元素的文本內容
ele.text
# 5. 獲取元素的屬性值
ele.get_attribute(屬性)
# 6. 獲取元素在屏幕上的坐標
ele.location
# 7. 獲取app包名和啟動名
driver.current_package
driver.current_activity
APP元素事件操作API
# swip滑動事件:點到點
driver.swipe(188,659,148,248,duration=5000)
# scroll:元素到元素
driver.scroll(ele1,ele2,duration=5000)
# drag:元素拖到元素
driver.drag_and_drop(ele1,ele2)
# 應用置于后臺事件,time在后臺停留時間
driver.backgroud_app(time)
APP模擬手勢高級操作
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()
# 手指長按操作
TouchAction(driver).long_press(ele,duration=time).release().perform()
TouchAction(driver).long_press(x=x,y=y,duration=time).release().perform()
# 手指移動操作
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()
手機操作API
driver.device_time
driver.get_window_size()
# 發(fā)送鍵到設備
driver.keyevent(keycode)
keycode:242534
# 打開手機通知欄
driver.open_notifications()
# 獲取手機當前網絡
# 結果:0 1 2 4 6
driver.network_connection
# 設置手機網絡
driver.set_network_connection(1)
# 手機截圖
importos
driver.get_screenshot_as_file(os.getcwd()+os.sep+'./screen.png')
腳本錄制
點擊“開始錄制”
操作手機
結束錄制
復制代碼