目录
一、appium的Capabilities配置及Appium Inspector安装
1.1安装Appium Inspector
1.2Capabilities配置
二、获取手机以及app的信息
2.1获取连接设计的配置名称
2.1.1连接手机
2.1.2获取设备名称
2.2利用adb获取日志找到appPackage和appActivity
三、Start Session
3.1 安装appium-doctor
3.2解决appium-doctor查出的关键警告
3.3解决Start Sesion 失败的步骤
在上篇文章中我们安装了appium、python、Android SDK、vscode等软件,现在我们开始下一步,让appium连上手机的应用
双击打开Appium Server GUI,出现如下页面,用默认的IP和端口启动服务,点击startServer
出现如下页面,然后点击这个搜索按钮配置Capabilities并启动
可是发现进入了github的页面,没有出现预料的配置和启动页面
实际出现的这个页面
而不是如下这个页面
查了一下原因,是因为我们的appium-deskop版本是V1.22,而appium-Inspector不再默认集成在appium-deskop了,需要单独安装。
既然已经到了git的appium-Inspector页面,那我们在下面找到Release链接
进入Release包下载页面,选择我们需要的Windows安装包,下载安装。
安装后出现了Appium Inspector的应用,双击后出现了久违的页面,如下
Host和端口用默认的,刚好能跟appium-server的对应上,Remote Path要改成/wd/hub
Capabilities是appium连接的一组配置,配置正确才能正常连接到手机和要测试的应用,主要配置如下
配置名 | 含义 | 参考值 |
---|---|---|
platformName | 平台名称,我们是安卓的系统所以填 Android | Android |
platfformVersion | 平台版本,这个是安装系统的版本,我们连真实手机,在手机的设置、关于手机里面可以查到Android版本号,我们的版本号是11 | 11 |
deviceName | 设备名称,如何获取我们在下一章说 | OFYDHUCIPN8PHEBI |
appPackage | APP 的包名;这里我们使用的随手记,如何获取app的包名我们在下一章会讲一个简单的方法 | com.mymoney |
appActivity | 启动的界面的名字,如何获取也再下一章中讲道 | com.mymoney.biz.main.v12.MainActivityV12 |
首先我们得用USB线连接手机和电脑,而且手机要打开开发者模式
首先打开开发者模式,在手机点击设置->关于手机->版本信息
连续点击版本号5次,就可以打开开发者模式
USB线一般要用原装USB充电线才行,买的有的线只支持,用USB线连接电脑和手机,插上线的时候手机USB用于选择 传输文件/Androin Auto
这样手机连上了
在上一篇中我们已经安装好了Android SDK,并且安装了Android ADK Platform-tools,现在就要用到它了
网上有一些方法可以找到appPackage和appActivity,我们用其中一个简单的方法
adb logcat > d:\log.log
1、打开手机中app的页面
2、在命令行输入如下命令
adb shell
dumpsys activity|grep mFocusedActivity
如果没内容,那么用如下这条命令
dumpsys activity|grep mFocusedWindow
如下图斜杠前面的是appPackage,斜杠后面的就是appActivity
都配置后,启动Start Session,然后弹出如下窗口,提示如下错误,想办法解决吧,查了下有说要打开开发者模式如下三个选项的
Error
Failed to create session. An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: 'Command ''C:\\Program Files (x86)\\Androidandroid-sdk\\platform-tools\\adb.exe' -P 5037 -s OFYDHUCIPN8PHEBI shell 'settings delete global hidden_api_policy_pre_p_apps;settings delete global hidden_api_policy_p_apps;settings delete global hidden_api_policy'' exited with code 255'; Command output: Exception occurred while executing 'delete': java.lang.SecurityException: Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS at com.android.providers.settings.SettingsProvider.enforceWritePermission(SettingsProvider.java:2399) at com.android.providers.settings.SettingsProvider.mutateGlobalSetting(SettingsProvider.java:1428) at com.android.providers.settings.SettingsProvider.mutateGlobalSetting(SettingsProvider.java:1420) at com.android.providers.settings.SettingsProvider.deleteGlobalSetting(SettingsProvider.java:1391) at com.android.providers.settings.SettingsProvider.call(SettingsProvider.java:576) at android.content.ContentProvider.call(ContentProvider.java:2448) at android.content.ContentProvider$Transport.call(ContentProvider.java:517) at com.android.providers.settings.SettingsService$MyShellCommand.deleteForUser(SettingsService.java:399) at com.android.providers.settings.SettingsService$MyShellCommand.onCommand(SettingsService.java:281) at android.os.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:98) at android.os.ShellCommand.exec(ShellCommand.java:44) at com.android.providers.settings.SettingsService.onShellCommand(SettingsService.java:49) at
问题定位:
查了下有说要打开如下三个选项的,可我的手机只有一个USB调试,应该不是这个问题
那我们看看是不是appium安装有问题,装一个appium-doctor诊断一下,在命令行运行“npm install appium-doctor -g”进行安装,看图安装了253个包
在命令行运行 appium-doctor,检查我们appium的安装情况
不看不知道,一看吓一跳,猜测关键错误应该是这几个
WARN AppiumDoctor ✖ ANDROID_HOME environment variable is NOT set!
WARN AppiumDoctor ✖ JAVA_HOME environment variable is NOT set!
WARN AppiumDoctor ✖ adb, android, emulator, apkanalyzer.bat could not be found because ANDROID_HOME or ANDROID_SDK_ROOT is NOT set!
WARN AppiumDoctor ✖ Cannot check %JAVA_HOME% requirements since the environment variable itself is not set
看来是环境变量没有配置ANDROID_HOME和JAVA_HOME,那我们配起来
首先我们的Android SDK的目录是在C:\Program Files (x86)\Androidandroid-sdk,前面安装的时候直接把环境变量配置到了path配置项,看来还不行,需要建ANDROID_HOME和JAVA_HOME的环境变量,如下图所示,点新建,然后建两个环境变量
如果不知道java的安装目录,可以在命令行运行“java -verbose”,最后一行就是java的jdk安装目录了,将此目录配置问JAVA_HOME的路径
关闭命令行再执行appium-doctor,发现这几个警告都已经解决
可是有除了一条新的警告 ✖ apkanalyzer.bat could NOT be found in C:\Program Files (x86)\Androidandroid-sdk!
解决方法:
从Download Android Studio & App Tools - Android Developers 拉到下面找到Command line tools only,如下图,然后下载Windows的这个包
解压后将如下的apkanalyzer.bat复制到C:\Program Files (x86)\Androidandroid-sdk\platform-tools目录,然后重启命令行窗口再运行appium-doctor, ✖ apkanalyzer.bat could NOT be found in C:\Program Files (x86)\Androidandroid-sdk!这条警告解决。
再次尝试启动Start Sesion,
还是报相同的错,如下图
Failed to create session. An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: 'Command ''C:\\Program Files (x86)\\Androidandroid-sdk\\platform-tools\\adb.exe' -P 5037 -s OFYDHUCIPN8PHEBI shell 'settings delete global hidden_api_policy_pre_p_apps;settings delete global hidden_api_policy_p_apps;settings delete global hidden_api_policy'' exited with code 255'; Command output: Exception occurred while executing 'delete': java.lang.SecurityException: Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS at com.android.providers.settings.SettingsProvider.enforceWritePermission(SettingsProvider.java:2399) at com.android.providers.settings.SettingsProvider.mutateGlobalSetting(SettingsProvider.java:1428) at com.android.providers.settings.SettingsProvider.mutateGlobalSetting(SettingsProvider.java:1420) at com.android.providers.settings.SettingsProvider.deleteGlobalSetting(SettingsProvider.java:1391) at com.android.providers.settings.SettingsProvider.call(SettingsProvider.java:576) at android.content.ContentProvider.call(ContentProvider.java:2448) at android.content.ContentProvider$Transport.call(ContentProvider.java:517) at com.android.providers.settings.SettingsService$MyShellCommand.deleteForUser(SettingsService.java:399) at com.android.providers.settings.SettingsService$MyShellCommand.onCommand(SettingsService.java:281) at android.os.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:98) at android.os.ShellCommand.exec(ShellCommand.java:44) at com.android.providers.settings.SettingsService.onShellCommand(SettingsService.java:49) at
看来路子不对,继续解决,找打如下一个解决方式,要在开发者选项中打开如下的禁止权限监控配置
设置后然后再执行Start Session,此时现象不一样了,会在手机上弹出安装Appium Setting,同意安装次应用,满怀期待之情,结果又出现了如下错误
Failed to create session. An unknown server-side error occurred while processing the command. Original error: Cannot verify the signature of 'C:\Users\86181\AppData\Local\Temp\2023010-7308-196bghn.o2bj\appium-uiautomator2-server-v4.27.0.apk'. Original error: Could not find 'apksigner.jar' in ["C:\\Program Files (x86)\\Androidandroid-sdk\\platform-tools\\platform-tools\\apksigner.jar","C:\\Program Files (x86)\\Androidandroid-sdk\\platform-tools\\emulator\\apksigner.jar","C:\\Program Files (x86)\\Androidandroid-sdk\\platform-tools\\cmdline-tools\\latest\\bin\\apksigner.jar","C:\\Program Files (x86)\\Androidandroid-sdk\\platform-tools\\tools\\apksigner.jar","C:\\Program Files (x86)\\Androidandroid-sdk\\platform-tools\\tools\\bin\\apksigner.jar","C:\\Program Files (x86)\\Androidandroid-sdk\\platform-tools\\apksigner.jar"]. Do you have Android Build Tools installed at 'C:\Program Files (x86)\Androidandroid-sdk\platform-tools'?
总算有些进展了,出现了不同的错误,关键信息Could not find 'apksigner.jar' in ["C:\\Program Files (x86)\\Androidandroid-sdk\\platform-tools\\platform-tools\\apksigner.jar",,在Androidandroid-sdk目录下少了apksigner.jar,那我们网上找到这个jar包放到此目录
我放个资源吧,大家需要的话直接下载,百度搜一下Could not find 'apksigner.jar',有不少解决方法,看到有个百度网盘地址,大家可以自行下载
链接:https://pan.baidu.com/s/1D7lbJEkFYqA_cMpKg41j7Q
提取码:5drn
然后再来执行一次Start Session
再次报错
Failed to create session. An unknown server-side error occurred while processing the command. Original error: Cannot verify the signature of 'C:\Users\86181\AppData\Local\Temp\2023010-7308-10y6gju.v7xa\appium-uiautomator2-server-v4.27.0.apk'. Original error: The 'java.exe' binary could not be found neither in PATH nor under JAVA_HOME (C:\Program Files (x86)\Common Files\Oracle\Java\javapath\bin)
好像是我的JAVAHOME的环境变量设错了,提示了这个路径“C:\Program Files (x86)\Common Files\Oracle\Java\javapath\bin”,这个是安装完JDK后自动生成环境变量中Path的路径,C:\Program Files (x86)\Common Files\Oracle\Java\javapath,而这个路径确实没有bin目录,我们记得JAVA_HOME配置的是C:\Program Files\Java\jre1.8.0_351,我们把path中的路径改成这个试试,并将JAVA_HOME也配置到path中
重启命令行,运行java -version,java环境变量应该没问题
再执行startSession,发现还是报相同的错误,可我们环境变量已经没有C:\Program Files (x86)\Common Files\Oracle\Java\javapath 这个路径了,想起我们前面配置Appium的时候,JAVA_HOME配置的是这个路径,如下图,我们改过来,改成配置环境变量中JAVA_HOME的jdk的路径C:\Program Files\Java\jre1.8.0_351
保存后重启Appium,重新启动,然后再StartSession,然后还是报相同的错,这就尴尬了!!
继续解决
继续百度,找到一个方法,说是注册表的问题
方法如下:
JAVA_HOME的环境变量值根本不是这个目录,到CMD命令窗口下,用echo %JAVA_HOME%,也显示正常,但是java -version时,显示java的home目录仍然是C:\Java\jre7,"百撕不得妻姐"之后,去问了度娘,原来JDK如果执行过安装程序后,会在
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.7.0_45\MSI\ 留下印记,里面有一项INSTALLDIR记录的还是当时安装的旧路径
按照操作,发现我注册表里面的路径是C:\Program Files\Java\jre1.8.0_351
怎么办呢? 出绝招,重启电脑,然后再启动Appium Server GUI,并start server,再启动Appium Inspector,然后 start Session,这次启动很慢,没有立刻报错,怀着忐忑的心情等着,居然成功了!
步骤很多,现在也搞不清楚到底是哪里出问题,如果大家碰到相同的问题,我稍微总结一下步骤从如下操作
1、安装 appium-doctor,并在命令行运行appium-doctor,解决其中几个关键警告,配置ANDROID_HOME和JAVA_HOME两个环境变量,JAVA_HOME配置java的安装目录。
如果不知道java的安装目录,可以在命令行运行“java -verbose”,最后一行就是java的jdk安装目录了
2、解决apkanalyzer.bat could NOT be found in C:\Program Files (x86)\Androidandroid-sdk!的警告,下载一个apkanalyzer.bat放到ANDROID_HOME对应的目录
3、Could not find 'apksigner.jar' in ["C:\\Program Files (x86)\\Androidandroid-sdk\\platform-tools\\platform-tools\\apksigner.jar",,在Androidandroid-sdk目录下少了apksigner.jar,那我们网上找到这个jar包放到此目录,我放了一个资源大家可以免费下载Couldnotfindapksigner.jar解决的资源-Java文档类资源-CSDN下载
4、手机开发者选项中,将“禁止权限监控”打开
5、appium的JAVA_HOME配置的路径跟环境变量一样
6、重启电脑
如果上述步骤没解决问题,就只能根据第三章 Start Session 一个一个试了
PS:花了好几个晚上,终于解决Appium连接手机应用的问题了,下面可以继续下面的练习了