第一篇博客,记录一下使用appium遇到的几个问题。
找不到设备
image这种情况是我本地cmd或者as 启动了adb,就会导致appium启动的adb找不到连接的设备。最开始的解决方法就是用任务管理器干掉其他adb.exe。
image同理,如果appium能连接到设备,cmd启动的adb也会无法连接设备。
后来发现我本地之前通过环境变量改了adb的端口到65530。怀疑和这个端口的设置有关,把这个系统变量删掉之后,果然就不会出现找不到设备的情况,但是每次执行完appium的用例,用cmd查看adb都会提示adb server is out of date. killing...
google之后得到答案:
因为本地安装了多个adb版本。参考https://stackoverflow.com/questions/36731277/adb-server-is-out-of-date-killing
删掉多余版本的path之后果然没有这个问题了。
顺带看了一下adb原理,手机端adbd和host的adb server通过tcp进行通信,如果安装了不同版本的adb,会导致手机端发送消息中携带的版本信息同host不一致,就会导致Out of date的问题。
报错
报错内容:
[UiAutomator2] [UIAutomator2] java.lang.SecurityException: Permission Denial: starting instrumentation ComponentInfo{io.appium.uiautomator2.server.test/android.support.test.runner.AndroidJUnitRunner}
解决
https://github.com/appium/appium/issues/10993
FYI. I ran into the same error
java.lang.SecurityException: Permission Denial: starting instrumentation ComponentInfo{io.appium.uiautomator2.server.test/android.support.test.runner.AndroidJUnitRunner} from pid=28208, uid=28208 not allowed because package io.appium.uiautomator2.server.test does not have a signature matching the target io.appium.uiautomator2.server
and solved the issue by manually uninstall previously installed appium-uiautomator2-server and appium-uiautomator2-servertest
adb uninstall io.appium.uiautomator2.server
adb uninstall io.appium.uiautomator2.server.test
删掉测试机上原有的server app即可。
执行任意的shell命令
Appium提供了通过app、appPackage、appActivity的方式去启动待测app,但是如果要使用intent的方式去启动一个activity要怎么做呢?
如果直接使用adb shell 是很简单的 adb shell am start -a + action 即可。但是appium好像并不支持。
官方文档提供了[StartActivity]([http://appium.io/docs/en/commands/device/activity/start-activity/]
但是使用起来有诸多限制。翻阅了appium-android-driver在github的说明文档,果然有发现:
Opt-In Features (With Security Risk)
These can be enabled when running this driver through Appium, via the --allow-insecure or --relaxed-security flags.
Feature Name Description
get_server_logs :Allows retrieving of Appium server logs via the Webdriver log interface
adb_shell :Allows execution of arbitrary adb shell commands via the "mobile: shell" command
这个特性可以执行任意的adb命令,这下可爽了。再翻一下官方文档:
How To Execute Shell Commands On The Remote Device
这下问题完美解决了。
注意在启动server时勾选如下选项:
image.png
否则会报错哦。
网友评论