Android模擬用戶點(diǎn)擊的實(shí)現(xiàn)方法
前言
Android模擬用戶點(diǎn)擊。在自動化測試中可使用的工具。
可以利用adb命令,也可以使用Android SDK中的monkeyrunner工具。
- win7-64
- gitbash
使用adb命令
主要使用input命令
usage: input ... input text <string> input keyevent <key code number or name> input tap <x> <y> input swipe <x1> <y1> <x2> <y2>
keyevent指的是android對應(yīng)的keycode,比如home鍵的keycode=3,back鍵的keycode=4
tap是touch屏幕的事件,只需給出x、y坐標(biāo)即可
swipe模擬滑動的事件,給出起點(diǎn)和終點(diǎn)的坐標(biāo)即可
編寫一個bat腳本,模擬用戶滑動
@echo off echo --------- Mock start ---------- :tag_start echo running... adb shell input swipe 650 250 200 666 @ping 127.0.0.1 -n 8 >nul goto tag_start echo --------- Mock finish --------- pause
死循環(huán)發(fā)送滑動命令,延時語句@ping 127.0.0.1 -n 8 >nul
monkeyrunner
環(huán)境配置,配置好Java與Android SDK的環(huán)境變量。手機(jī)連接到電腦。
系統(tǒng)變量中加入ANDROID_SWT,此例中路徑為G:\SDK\tools\lib\x86_64
修改后的腳本rustmonkeyrunner.bat,Windows環(huán)境下需要在gitbash或CMD里運(yùn)行
來自unable-to-access-jarfile-framework-monkeyrunner-25-3-2-jar
@echo off
rem Copyright (C) 2010 The Android Open Source Project
rem
rem Licensed under the Apache License, Version 2.0 (the "License");
rem you may not use this file except in compliance with the License.
rem You may obtain a copy of the License at
rem
rem http://www.apache.org/licenses/LICENSE-2.0
rem
rem Unless required by applicable law or agreed to in writing, software
rem distributed under the License is distributed on an "AS IS" BASIS,
rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rem See the License for the specific language governing permissions and
rem limitations under the License.
rem don't modify the caller's environment
setlocal
rem Set up prog to be the path of this script, including following symlinks,
rem and set up progdir to be the fully-qualified pathname of its directory.
set prog=%~f0
rem Change current directory and drive to where the script is, to avoid
rem issues with directories containing whitespaces.
cd /d %~dp0
rem Check we have a valid Java.exe in the path.
set java_exe=
call ..\lib\find_java.bat
if not defined java_exe goto :EOF
for /f %%a in ("%APP_HOME%\lib\monkeyrunner-25.3.2.jar") do set jarfile=%%~nxa
set frameworkdir=.
set libdir=
if exist %frameworkdir%\%jarfile% goto JarFileOk
set frameworkdir=..\lib
if exist %frameworkdir%\%jarfile% goto JarFileOk
set frameworkdir=..\framework
:JarFileOk
set jarpath=%frameworkdir%\%jarfile%
if not defined ANDROID_SWT goto QueryArch
set swt_path=%ANDROID_SWT%
goto SwtDone
:QueryArch
for /f "delims=" %%a in ('%frameworkdir%\..\bin\archquery') do set swt_path=%frameworkdir%\%%a
:SwtDone
if exist "%swt_path%" goto SetPath
echo SWT folder '%swt_path%' does not exist.
echo Please set ANDROID_SWT to point to the folder containing swt.jar for your platform.
exit /B
:SetPath
call "%java_exe%" -Xmx512m "-Djava.ext.dirs=%frameworkdir%;%swt_path%" -Dcom.android.monkeyrunner.bindir=..\..\platform-tools -jar %jarpath% %*
運(yùn)行腳本
Administrator@rust-PC ~ $ /cygdrive/g/SDK/tools/bin/rustmonkeyrunner.bat Jython 2.5.3 (2.5:c56500f08d34+, Aug 13 2012, 14:54:35) [Java HotSpot(TM) 64-Bit Server VM (Oracle Corporation)] on java1.8.0_77
首次運(yùn)行時import模塊遲遲沒有反應(yīng)
>>> from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
嘗試運(yùn)行腳本an_test2.py
import os
print("importing module...")
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
print("waiting for connection...")
device = MonkeyRunner.waitForConnection()
print("device found!")
s_wid = int(device.getProperty("display.width")) # 獲取屏幕寬度像素
s_height = int(device.getProperty("display.height")) # 獲取屏幕高度像素
print("build.version.sdk " + str(device.getProperty("build.version.sdk")))
print("display.width " + str(s_wid))
print("display.height " + str(s_height))
drag_point_left_x = 20
drag_point_right_x = s_wid - 20
drag_point_y = s_height / 2
for i in range(0, 10):
print("current loop is " + str(i))
device.drag((drag_point_right_x, drag_point_y), (drag_point_left_x, drag_point_y), 1.0, 50)
print("waiting...")
MonkeyRunner.sleep(1)
print("continue")
device.drag((drag_point_left_x, drag_point_y), (drag_point_right_x, drag_point_y), 0.5, 3)
MonkeyRunner.sleep(3)
print("-------- finish --------")
命令行直接執(zhí)行,可以看到執(zhí)行結(jié)果和相應(yīng)的報錯信息
C:\Users\Administrator>G:\SDK\tools\bin\rustmonkeyrunner.bat H:\fisher_p\py_ws\an_test2.py importing module... waiting for connection... device found! build.version.sdk 23 display.width 1440 display.height 2560 current loop is 0 waiting... continue current loop is 1 # ..... -------- finish --------
測試中發(fā)現(xiàn),腳本可以運(yùn)行在系統(tǒng)app。若當(dāng)前打開的是第三方app,會直接報錯,獲取不到相應(yīng)信息
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
- android10 隱藏SystemUI鎖屏下的多用戶圖標(biāo)的示例代碼
- Android 如何攔截用戶頻繁操作(點(diǎn)擊事件)
- Android實(shí)現(xiàn)用戶圓形頭像和模糊背景
- Android實(shí)現(xiàn)簡單用戶注冊案例
- Android啟動頁用戶相關(guān)政策彈框的實(shí)現(xiàn)代碼
- 詳解Android Studio實(shí)現(xiàn)用戶登陸界面demo(xml實(shí)現(xiàn))
- android實(shí)現(xiàn)記住用戶名和密碼以及自動登錄
- Android權(quán)限如何禁止以及友好提示用戶開通必要權(quán)限詳解
- Android百度地圖定位、顯示用戶當(dāng)前位置
- Android EditText 監(jiān)聽用戶輸入完成的實(shí)例
- Android 用戶Session管理的設(shè)計方案
- Android基于AlarmManager實(shí)現(xiàn)用戶在線心跳功能示例
- Android 多用戶詳情
相關(guān)文章
Android自定義水平進(jìn)度條的圓角進(jìn)度
這篇文章主要為大家詳細(xì)介紹了Android自定義水平進(jìn)度條的圓角進(jìn)度,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-08-08
Android使用Volley實(shí)現(xiàn)上傳文件功能
這篇文章主要介紹了Android使用Volley實(shí)現(xiàn)上傳文件功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-12-12
Android編程之文件讀寫操作與技巧總結(jié)【經(jīng)典收藏】
這篇文章主要介紹了Android編程之文件讀寫操作與技巧,結(jié)合實(shí)例形式總結(jié)分析了Android常見的文件與目錄的讀寫操作,及相關(guān)函數(shù)的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下2016-06-06
Android如何實(shí)現(xiàn)URL轉(zhuǎn)換成二維碼
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)URL轉(zhuǎn)換成二維碼的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04

