APP自动化测试(2)-通过appium打开手机的应用

目录


一、appium的Capabilities配置及Appium Inspector安装

在上篇文章中我们安装了appium、python、Android SDK、vscode等软件,现在我们开始下一步,让appium连上手机的应用

1.1安装Appium Inspector

双击打开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

1.2Capabilities配置

Capabilities是appium连接的一组配置,配置正确才能正常连接到手机和要测试的应用,主要配置如下

配置名含义参考值
platformName平台名称,我们是安卓的系统所以填 AndroidAndroid
platfformVersion平台版本,这个是安装系统的版本,我们连真实手机,在手机的设置、关于手机里面可以查到Android版本号,我们的版本号是1111
deviceName设备名称,如何获取我们在下一章说OFYDHUCIPN8PHEBI
appPackageAPP 的包名;这里我们使用的随手记,如何获取app的包名我们在下一章会讲一个简单的方法com.mymoney
appActivity 启动的界面的名字,如何获取也再下一章中讲道

com.mymoney.biz.main.v12.MainActivityV12

二、获取手机以及app的信息

2.1获取连接设计的配置名称

2.1.1连接手机

首先我们得用USB线连接手机和电脑,而且手机要打开开发者模式

  • 打开开发模式

首先打开开发者模式,在手机点击设置->关于手机->版本信息

连续点击版本号5次,就可以打开开发者模式

  • USB连接手机和电脑

USB线一般要用原装USB充电线才行,买的有的线只支持,用USB线连接电脑和手机,插上线的时候手机USB用于选择 传输文件/Androin Auto

这样手机连上了

2.1.2获取设备名称

在上一篇中我们已经安装好了Android SDK,并且安装了Android ADK Platform-tools,现在就要用到它了

  • 在命令行输入 adb devices -l,就列出连接设备的详细信息,其中第一个就是我们要的deviceName,如果adb命令出不来或提示非内部或外部命令,则是Android SDK没安装正确或者没有正确配置环境变量,解决方法见《APP自动化测试(1)-工具安装》的Android SDK安装。如果输入如下命令没有设备信息,那么应该是手机连接问题,确认开发者模式是否打开,连接的USB线是否支持数据传输

 2.2利用adb获取appPackage和appActivity 

2.2.1利用日志找到appPackage和appActivity 

网上有一些方法可以找到appPackage和appActivity,我们用其中一个简单的方法

  • 首先在命令行输入如下命令,将adb的日志重定向到文件
adb logcat > d:\log.log
  • 在手机上打开需要操作的应用,我们打开随手记
  • 在命令行Ctrl+C停止日志重定向
  • 打开d:\log.log文件
  • 搜索关键字 “Focus entered window”,如下图前面的com.mymoney就是appPackage,斜杠后面的com.mymoney.biz.main.v12.MainActivityV12就是appActivity 

2.2.2利用adb shell命令

1、打开手机中app的页面

2、在命令行输入如下命令

adb shell
dumpsys activity|grep mFocusedActivity

如果没内容,那么用如下这条命令

dumpsys activity|grep  mFocusedWindow

如下图斜杠前面的是appPackage,斜杠后面的就是appActivity

 

 三、Start Session

都配置后,启动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调试,应该不是这个问题

3.1 安装appium-doctor

那我们看看是不是appium安装有问题,装一个appium-doctor诊断一下,在命令行运行“npm install appium-doctor -g”进行安装,看图安装了253个包

在命令行运行 appium-doctor,检查我们appium的安装情况

3.2解决appium-doctor查出的关键警告

不看不知道,一看吓一跳,猜测关键错误应该是这几个

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!这条警告解决。

3.3解决Start Sesion 失败的步骤

再次尝试启动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连接手机应用的问题了,下面可以继续下面的练习了

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年11月22日
下一篇 2023年11月22日

相关推荐