一、獲取手機分辨率
size=driver.get_window_size()#獲取手機屏幕大小,分辨率 print(size)#{'width': 720, 'height': 1280}
得到的是一個字典,從而獲取到手機的寬和高
height=size.get('height') width=size.get('width')
二、滑屏和拖拽
通過坐標實現划屏操作。那么首先我們要設置起始坐標的x,y和終點坐標的x,y。然后通過swipe方法實現划屏
s_x=width*0.5#0.5相當於寬度的一半,此處采用了百分比的方式 s_y=height*0.8 e_x=width*0.5 e_y=height*0.2 driver.swipe(s_x,s_y,e_x,e_y,500)#滑動
拖拽
# 拖拽 # elementObj1源元素,elementObj2目標元素 # 通過long_press實現 driver.drag_and_drop(elementObj1, elementObj2)
觸控
# 多點觸控 模擬手指點擊 # tap模擬按住坐標多少秒,[(x,y)] 多個坐標則寫多個元祖。參數2為按住多少秒。ms(毫秒)為單位 driver.tap([(x, y)], 5000)
三、操作app
# 返回是否安裝了對應包名的App True 或者 False driver.is_app_installed('com.syqy.wecash') # 關閉初始化信息中的App driver.close_app() # 啟動初始化信息中的App driver.launch_app() # 安裝app 參數為軟件的絕對路徑 driver.install_app(r'C:\Users\bjhouyafan\Desktop\tester\appUi\wecash.apk') # 卸載app 參數接收appPackageName driver.remove_app('com.syqy.wecash')
driver.hide_keyboard()#收起鍵盤
driver.background_app(5)#應用置於后台2s
driver.shake()#搖晃(Shake) 模擬設備搖晃
start_activity:
1、啟動app
我們在運行程序時,默認有配置app信息,在程序運行時,默認啟動已配置好的app。那么此時如果我們想要開啟其他的app,就可以用這個方法
#配置的手機信息中,啟動的是qq,這里close_app后,關閉app,然后再start_activity啟動別的app=>設置 driver.close_app() driver.start_activity('com.android.settings','.Settings')
2、通過頁面入口,直接打開頁面,略過前面的步驟
比如qq,默認是啟動頁面--登錄/注冊---登錄頁或者注冊頁。我們可以用這個方法,使得不用經過登錄/注冊頁,直接啟動注冊頁。
步驟:
1、先進入到登錄/注冊頁面,點擊注冊進入注冊頁面后
2、獲取當前頁面的activity
driver.current_activity 這個就是注冊頁面的入口
3、用start_activity方法,直接啟動該頁
driver.start_activity('com.tencent.mobileqq','.activity.RegisterPhoneNumActivity')#包名,指定頁面的入口
四、清緩存
driver.reset()#清緩存
相當於手機配置信息中的
desc["noReset"] = "False"#表示需要初始化手機信息
desc["noReset"] = "True"#不初始化手機app信息(類似不清楚緩存)
五、NATIVE_APP 與 WEBVIEW 上下文操作
手機app有原生app和混合app兩種。混合App就是HTML5 App,混合App通常由兩部分組成,HTML5雲網站+App應用客戶端
如果手機app中嵌套了h5頁面,我們就不能夠直接操作h5,需要先進行切換。見到標簽中顯示webview,就說明時h5頁
# 返回當前session中的app類型 driver.current_context # 獲取app所有的類型 # 有WEBVIEW的則以list的形式展示兩個 res=driver.contexts # app類型切換 參數接收app類型 # appium對selenium的switch_to的擴展 # 增加了MobileSwitchTo,繼承了selenium的switch_to driver.switch_to.context(res[1])
默認進入app,指針在原生app NATIVE_APP上。如果此時想要進入webview中操作元素,就要先進性切換
#比如我們模擬器中的瀏覽器,進入后,輸入某個網址打開網頁。此時當前頁面就既有原生,也有h5.網頁的地址欄時原生的。網頁的正文肯定時h5的 print(driver.contexts)#返回當前手機app類型,應該會有2個,一個原生的,一個webview的: ['NATIVE_APP', 'WEBVIEW_com.android.browser'] driver.switch_to.context(driver.contexts[1])#從原生切換到webview
六、鍵盤keycode
# 隱藏鍵盤 driver.hide_keyboard() # 發送按鍵碼,僅按一下,與press_keycode相同 # 可接收str或int的code碼 driver.keyevent(3) # 發送按鍵碼,僅按一下,可接收str或int的code碼 driver.press_keycode(24) # 發送一個長按的按鍵碼,接收參數必須是int的code碼 driver.long_press_keycode(25)
鍵盤對應的keycode可百度查詢。比如enter回車鍵對應的碼就是66.如果想要操作回車,可直接寫driver.press_keycode(66)就代表按下了回車
CODE_ENTER | 回車鍵 | 66 |
KEYCODE_ESCAPE | ESC鍵 | 111 |
KEYCODE_DPAD_CENTER | 導航鍵 確定鍵 | 23 |
KEYCODE_DPAD_UP | 導航鍵 向上 | 19 |
KEYCODE_DPAD_DOWN | 導航鍵 向下 | 20 |
KEYCODE_DPAD_LEFT | 導航鍵 向左 | 21 |
KEYCODE_DPAD_RIGHT | 導航鍵 向右 | 22 |
KEYCODE_MOVE_HOME | 光標移動到開始鍵 | 122 |
KEYCODE_MOVE_END | 光標移動到末尾鍵 | 123 |
KEYCODE_PAGE_UP | 向上翻頁鍵 | 92 |
KEYCODE_PAGE_DOWN | 向下翻頁鍵 | 93 |
KEYCODE_DEL | 退格鍵 | 67 |
KEYCODE_FORWARD_DEL | 刪除鍵 | 112 |
KEYCODE_INSERT | 插入鍵 | 124 |
KEYCODE_TAB | Tab鍵 | 61 |
KEYCODE_NUM_LOCK | 小鍵盤鎖 | 143 |
KEYCODE_CAPS_LOCK | 大寫鎖定鍵 | 115 |
KEYCODE_BREAK | Break/Pause鍵 | 121 |
KEYCODE_SCROLL_LOCK | 滾動鎖定鍵 | 116 |
KEYCODE_ZOOM_IN | 放大鍵 | 168 |
KEYCODE_ZOOM_OUT | 縮小鍵 | 169 |
KEYCODE_0 | 按鍵'0' | 7 |
KEYCODE_1 | 按鍵'1' | 8 |
KEYCODE_2 | 按鍵'2' | 9 |
KEYCODE_3 | 按鍵'3' | 10 |
KEYCODE_4 | 按鍵'4' | 11 |
KEYCODE_5 | 按鍵'5' | 12 |
KEYCODE_6 | 按鍵'6' | 13 |
KEYCODE_7 | 按鍵'7' | 14 |
KEYCODE_8 | 按鍵'8' | 15 |
KEYCODE_9 | 按鍵'9' | 16 |
KEYCODE_A | 按鍵'A' | 29 |
KEYCODE_B | 按鍵'B' | 30 |
KEYCODE_C | 按鍵'C' | 31 |
KEYCODE_D | 按鍵'D' | 32 |
KEYCODE_E | 按鍵'E' | 33 |
KEYCODE_F | 按鍵'F' | 34 |
KEYCODE_G | 按鍵'G' | 35 |
KEYCODE_H | 按鍵'H' | 36 |
KEYCODE_I | 按鍵'I' | 37 |
KEYCODE_J | 按鍵'J' | 38 |
KEYCODE_K | 按鍵'K' | 39 |
KEYCODE_L | 按鍵'L' | 40 |
KEYCODE_M | 按鍵'M' | 41 |
KEYCODE_N | 按鍵'N' | 42 |
KEYCODE_O | 按鍵'O' | 43 |
KEYCODE_P | 按鍵'P' | 44 |
KEYCODE_Q | 按鍵'Q' | 45 |
KEYCODE_R | 按鍵'R' | 46 |
KEYCODE_S | 按鍵'S' | 47 |
KEYCODE_T | 按鍵'T' | 48 |
KEYCODE_U | 按鍵'U' | 49 |
KEYCODE_V | 按鍵'V' | 50 |
KEYCODE_W | 按鍵'W' | 51 |
KEYCODE_X | 按鍵'X' | 52 |
KEYCODE_Y | 按鍵'Y' | 53 |
KEYCODE_Z | 按鍵'Z' | 54 |
七、錯誤及解決辦法
1、目標及計算機拒絕
服務沒有啟動,需要啟動服務:在cmd窗口輸入appium 或者直接打開appium-desktop
2、send_keys方法錯誤
這個是send_keys方法不可用,解決辦法:直接用另一個辦法就行set_vallue()
3、appium與chromedriver版本不匹配
appium版本過高,降低版本即可
步驟:
1、先卸載當前版本:npm uninstall appium -g
2、安裝制定低版本
npm -g install appium@1.7.0 這個命令需要翻牆,如果不能行的話,可以用國內鏡像,或者cnpm安裝
cnpm install -g appium@1.7.0 --no-cache