win10搭建android monkeyrunner自动化测试环境

news2024/11/14 22:14:45

本文记录一下monkeyrunner环境搭建遇到的各种坑,以免以后再次踩坑。首先要提一下巨坑,务必要安装java 8(本文记录于2023.3),安装其他版本java,运行monneyrunner会有很多问题,见第七节。

一、安装java 8

oracle官网Java Archive Downloads - Java SE 8下载jdk-8u361-windows-x64.exe,双击安装。如果没有账号,注册一个就可以下载了。

坑1:千万不要用百度输入法,否则双击安装文件没反应。

安装完成后,设置java环境变量。

右击桌面图标“此电脑”-->高级系统设置-->环境变量-->系统环境变量,点击新建:
变量名:JAVA_HOME
变量值:C:\Program Files\Java\jdk1.8.0_361

 双击系统环境变量Path值,新建:%JAVA_HOME%\bin

  验证是否安装成功:

 二、安装Android Studio

官网下载https://developer.android.com/studio,双击安装。
安装完成后打开,首次打开可能会出现下面的弹窗:

选择Open SDK Manager安装platform packages和sdk tools,见下一步说明。

三、安装platform packages和sdk tools

1,下载sdk packages&tools

 通过Android Studio菜单栏的Tools-->SDK Manager进入下载管理器设置SDK路径。

坑2:路径中不要有中文字符;如果网速慢需要等一两分钟,Next按钮才可用。

 然后一路Next,直至Finish。

完成后,下载的文件如下:

坑3:win10系统按上面操作,会有tools这个文件夹,但在win7系统没有tools目录。win7的解决方法在最后。

接着勾选手机对应的android版本(比如Android 11),右下角点击Apply。

下载完成后,sdk/tools中就有monkeyrunner脚本了。

检查一下,SDK Tools中相关工具,是否也installed了,如果没有,也下载一下。

2,设置sdk环境变量

右击桌面图标“此电脑”-->高级系统设置-->环境变量-->系统环境变量,点击新建:
变量名:ANDROID_HOME
变量值:E:\sdk(SDK Manager设置的下载路径,第1步设置的是E:\sdk)

  双击系统环境变量Path值,新建:
 %ANDROID_HOME%\tools\bin
 %ANDROID_HOME%\platform-tools

坑4:网上有单下sdk的,比如这个链接 https://dl.google.com/android/android-sdk_r24.4.1-windows.zip,功能不全,monkeyrunner一些功能可以用,一些功能用不了(比如截屏),所以最好用Android Studio下载与手机对应android版本的sdk。

四、修改monkeyrunner脚本

坑5:执行完第三步,按理应该可以运行monkeyrunner了,试试看:

C:\Users\gsf>monkeyrunner
SWT folder '..\framework\x86_64' does not exist.
Please set ANDROID_SWT to point to the folder containing swt.jar for your platform.

坑5解决:修改monkeyrunner.bat脚本中frameworkdir目录路径

修改前:
set java_exe=
call ..\lib\find_java.bat
if not defined java_exe goto :EOF

for /f %%a in ("%APP_HOME%\lib\monkeyrunner-26.0.0-dev.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   <<=====当前路径在E:\sdk\tools\bin,父目录没有framework这个目录,所以需要改成swt.jar文件所在的lib目录E:\sdk\tools\lib

:JarFileOk

修改后
set java_exe=
call ..\lib\find_java.bat
if not defined java_exe goto :EOF

for /f %%a in ("%APP_HOME%\lib\monkeyrunner-26.0.0-dev.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=..\lib  <=====修改后的路径

:JarFileOk

再次运行,坑6:找不到adb等工具:

C:\Users\gsf>monkeyrunner
02:52:11 E/adb: Cannot run program "..\framework\adb.exe": CreateProcess error=2, 系统找不到指定的文件。
Exception in thread "main" java.lang.IllegalArgumentException: java.io.IOException: Cannot run program "..\framework\adb.exe": CreateProcess error=2, 系统找不到指定的文件。
        at com.android.ddmlib.AndroidDebugBridge.<init>(AndroidDebugBridge.java:600)
        at com.android.ddmlib.AndroidDebugBridge.createBridge(AndroidDebugBridge.java:378)
        at com.android.chimpchat.adb.AdbBackend.<init>(AdbBackend.java:69)
        at com.android.chimpchat.ChimpChat.createBackendByName(ChimpChat.java:78)
        at com.android.chimpchat.ChimpChat.getInstance(ChimpChat.java:51)
        at com.android.monkeyrunner.MonkeyRunnerStarter.<init>(MonkeyRunnerStarter.java:60)
        at com.android.monkeyrunner.MonkeyRunnerStarter.main(MonkeyRunnerStarter.java:188)
Caused by: java.io.IOException: Cannot run program "..\framework\adb.exe": CreateProcess error=2, 系统找不到指定的文件。
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
        at com.android.ddmlib.AndroidDebugBridge$1.run(AndroidDebugBridge.java:658)
        at java.lang.Thread.run(Thread.java:750)
Caused by: java.io.IOException: CreateProcess error=2, 系统找不到指定的文件。
        at java.lang.ProcessImpl.create(Native Method)
        at java.lang.ProcessImpl.<init>(ProcessImpl.java:458)
        at java.lang.ProcessImpl.start(ProcessImpl.java:139)
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
        ... 2 more

坑6解决:修改monkeyrunner.bat脚本中的Dcom.android.monkeyrunner.bindir路径

修改前:
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=..\framework -jar %jarpath% %*

修改后:
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% %*

至此,monkeyrunner就可以正常运行了。

五、运行monkeyrunner

cmd终端输入monkeyrunner,能看到下面的界面,表明环境搭建成功了,可以在提示符下面输入命令进行测试了。按Ctrl+z退出monkeyrunner。

比如执行一次滑屏操作。

 也可以写一个.py脚本,将命令放在python脚本中,比如screen.py,每隔60s上滑一次屏幕,内容如下:
坑7:screen.py内容,注意python的缩进要求

#!/usr/bin/env monkeyrunner
import time
from com.android.monkeyrunner import MonkeyRunner, MonkeyRunner, MonkeyImage
device = MonkeyRunner.waitForConnection(5)
for i in range(1,150):
    device.drag((200,1000),(200,800),0.1,10)
    time.sleep(60)

然后执行monkeyrunner screen.py就可以了。

六、win7运行monkeyrunner

所有的操作同win10,额外需要:
1)拷贝tools目录放到Android Studio指定的sdk目录中
链接:https://pan.baidu.com/s/1F0thGYXVW0UIkca5IT0EgQ 
提取码:yqke

2)修改monkeyrunner.bat脚本如下

坑8:直接运行monkeyrunner会出现下面错误(win10上是正常的)

C:\Users\ge>monkeyrunner
SWT folder '..\lib\location of your Java installation.' does not exist.
Please set ANDROID_SWT to point to the folder containing swt.jar for your platform.

C:\Users\ge>
@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-26.0.0-dev.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=..\lib

: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

set swt_path=E:\sdk\tools\lib <=======这个地方改成对应的目录

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% %*

七、巨坑,建议安装java8,其他版本会出现各种问题

比如java19,

1)首先你会遇到monkeyrunner.bat脚本中一些变量找不到路径的问题:
Please set ANDROID_SWT to point to the folder containing swt.jar for your platform.

2)调试后修改bat脚本,用set swt_path=你的swt文件路径后,又会遇到:

-Djava.ext.dirs=..\lib;..\lib\x86_64 is not supported. Use -classpath instead.

3)根据提示修改成-classpath,又提示unregonized option,cmd输入java查看支持的option,改成-class-path可解决这个问题,但又遇到4)问题

4)运行时又提示class找不到,已经按提示用-class-path怎么还找不到class呢,那么从网上下载一个ChimpChat?ChimpChat的错误没了,又会遇到其他的错误。google了原因:
It turns out that when you use the -jar directive, JRE will ignore the -classpath directive and so it will again not be able to load any external class or jar files…看来也遇到了跟我同样的问题(我用的java 19,他用的java 11),解决方案是:Instead of reinventing the wheel (We tried, we failed, it was painful. Still worth the shot!) we decided to install Java version 8 on Ubuntu 18.04 LTS side by side with Java version 11 and just used that.

 总而言之一句话,用java 8跑monkeyrunner就不会遇到这么多乱七八糟的问题了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/382550.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Threejs 教程1

threejs核心概念场景、照相机、对象、光、渲染器等1.1.场景Scene 场景是所有物体的容器&#xff0c;对应着显示生活中的三维世界&#xff0c;所有的可视化对象级相关的动作均发生在场景中。1.2.照相机Camera照相机是三维世界中的观察者&#xff0c;类似与眼睛。为了观察这个世界…

5款软件压力测试工具分享

一、什么是软件压力测试? 软件压力测试是一种基本的质量保证行为&#xff0c;它是每个重要软件测试工作的一部分。软件压力测试的基本思路很简单&#xff1a;不是在常规条件下运行手动或自动测试&#xff0c;而是在计算机数量较少或系统资源匮乏的条件下运行测试。通常要进行…

达梦: DmAPService可以手动开启,但是不能开机自启

在部署生产环境安全版数据库发现&#xff0c;DmAPService服务不能开机自启&#xff0c;这样会导致服务器重启后&#xff0c;部署的定时备份任务不能够成功备份数据。 为了在服务器重启后&#xff0c;不影响定时任务自动备份数据库&#xff0c;现将解决这个问题的办法总结如下&a…

《MySql学习》 MySQL的 加锁规则

MySQL加锁原则 两个原则 原则 1&#xff1a;加锁的基本单位是 next-key lock。next-key lock 是前开后闭区间&#xff08;区间锁和行锁&#xff09;。原则 2&#xff1a;查找过程中访问到的对象&#xff08;索引&#xff09;才会加锁。 两个优化 1.优化 1&#xff1a;索引上…

美团2面:如何保障 MySQL 和 Redis 数据一致性?这样答,让面试官爱到 死去活来

美团2面&#xff1a;如何保障 MySQL 和 Redis 的数据一致性&#xff1f; 说在前面 在尼恩的&#xff08;50&#xff09;读者社群中&#xff0c;经常遇到一个 非常、非常高频的一个面试题&#xff0c;但是很不好回答&#xff0c;类似如下&#xff1a; 如何保障 MySQL 和 Redis…

JavaSE学习进阶 day1_02 继承(面向对象第二大特性)

第三章 继承 &#xff08;面向对象的第二大特性&#xff09; 3.1 概述 3.1.1 引入 假如我们要定义如下类: 学生类,老师类和工人类&#xff0c;分析如下。 学生类 属性:姓名,年龄 行为:吃饭,睡觉 老师类 属性:姓名,年龄&#xff0c;薪水 行为:吃饭,睡觉&#xff0c;教书 班…

C++ List链表使用

1. list的介绍及使用1.1 list的介绍1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。2. list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向其前一个…

百度飞桨PaddleSpeech的简单使用

PaddleSpeech 是基于飞桨 PaddlePaddle 的语音方向的开源模型库&#xff0c;用于语音和音频中的各种关键任务的开发&#xff0c;包含大量基于深度学习前沿和有影响力的模型&#xff0c;一些典型的应用示例如下&#xff1a;语音识别、语音翻译 (英译中)、语音合成、标点恢复等。…

《商用密码应用与安全性评估》第一章密码基础知识1.2密码评估基本原理

商用密码应用安全性评估&#xff08;简称“密评”&#xff09;的定义&#xff1a;在采用商用密码技术、产品和服务集成建设的网络与信息系统中&#xff0c;对其密码应用的合规性、正确性、有效性等进行评估 信息安全管理过程 相关标准 国际:ISO/IEC TR 13335 中国:GB/T …

跨境电商独立站到底有什么优缺点?

无论你在哪个行业&#xff0c;都有优点和缺点&#xff0c;正如人们常说的&#xff0c;人无完人。那么我们就来谈谈最近比较多人关注的跨境电商独立网站的缺点:1. 这个过程很麻烦。跨境电商独立站的有效周期需要比较长&#xff0c;因为前期需要投入大量的精力&#xff0c;比如推…

【flink】 flink入门教程demo 初识flink

文章目录通俗解释什么是flink及其应用场景flink处理流程及核心APIflink代码快速入门flink重要概念什么是flink&#xff1f; 刚接触这个词的同学 可能会觉得比较难懂&#xff0c;网上搜教程 也是一套一套的官话&#xff0c; 如果大家熟悉stream流&#xff0c;那或许会比较好理解…

异步循环

业务 &#xff1a; 批量处理照片 &#xff0c; 批量拆建 &#xff0c; 裁剪一张照片需要异步执行等待 &#xff0c; 并且是批量 所以需要用到异步循环 裁剪图片异步代码 &#xff1a; 异步循环 循环可以是 普通 for 、 for of 、 for in 不能使用forEach ,这里推荐 for…

笔记-什么是神经网络机器学习深度学习

深度学习&#xff1a;一种实现机器学习的技术所谓深度学习&#xff0c;简单来说是机器学习的一个子集&#xff0c;用于建立、模拟人脑进行数据处理和分析学习的神经网络&#xff0c;因此也可以被称作是深度神经网络。其基本特点是模仿大脑的神经元之间传递和处理信息的模式。深…

如何使用固态继电器实现更高可靠性的隔离和更小的解决方案尺寸

自晶体管发明之前&#xff0c;继电器就已被用作开关。从低压信号安全控制高压系统的能力&#xff0c;如隔离电阻监控&#xff0c;对于许多汽车系统的开发是必要的。虽然机电继电器和接触器的技术多年来有所改进&#xff0c;但设计人员要实现其终身可靠性和快速开关速度以及低噪…

计算机图形学(1):VS配置openGL和画一个简单正方形

简单记录一下这门课的学习过程 1.下载并安装VS 直接看这片文章即可 http://t.csdn.cn/auPGf 2.下载OpenGL相关库 已经打包好了 需要的可以直接下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Q7XTD4jkRhRBfTW9wYgzGg?pwd1111 提取码&#xff1a;1111 3.打开…

触摸屏与模拟量测试终端之间无线MODBUS通信

本方案是昆仑通态触摸屏与4台DTD433FC无线模拟量信号测试终端进行无线 MODBUS 通信的实现方法。本方案中昆仑通态触摸屏作为主站显示各从站的模拟量信号&#xff0c;传感器、DCS、PLC、智能仪表等4个设备作为Modbus从站输出模拟量信号。方案中采用无线模拟量信号测控终端DTD433…

UVM实战--带有寄存器的加法器

一.整体的设计结构图 这里将DUT换成加法器&#xff0c;可以理解为之前UVM加法器加上寄存器&#xff0c;这里总线的功能不做修改&#xff0c;目的看代码的移植那些部分需要修改。 二.各个组件代码详解 2.1 DUT module dut( input clk, input rst_n, input…

【深度学习】softmax和交叉熵的配合求导

在分类问题中&#xff0c;尤其是在神经网络中&#xff0c;交叉熵函数非常常见。因为经常涉及到分类问题&#xff0c;需要计算各类别的概率&#xff0c;所以交叉熵损失函数与sigmoid函数或者softmax函数成对出现。 1.softmax softmax用于多分类过程中&#xff0…

这么简单的 CSS 动效,快来瞧瞧

前言 这几天逛网站浏览网页的时候&#xff0c;看到一个不错的CSS效果&#xff0c;便想来实现一下。整个效果实现起来比较简单&#xff0c;但是并不缺少交互感&#xff0c;因此来分享一下这个CSS效果。 效果展示 HTML 搭建 HTML部分一如既往地简单&#xff0c;认清楚它的布局…

密码传输和存储,如何保证数据安全?

本文从一个输入密码登录场景说起&#xff0c;详细介绍了密码传输过程的改进和思路&#xff0c;最后展现出一个相对安全的传输和存储方案。点击上方“后端开发技术”&#xff0c;选择“设为星标” &#xff0c;优质资源及时送达场景在互联网项目中&#xff0c;我们经常会遇到以下…