也是用的 ORICO,尝试了 2 级级联 (1 个 Hub 上再连一个 Hub),稳定性可以接受。
@isotopeX 可以试试通过 node 启动 appium 进程,可以设置内存大小
node --max_old_space_size=2047 /appium安装路径/main.js -p portNum
appium 进程的内存使用达到多少了?
@lucasluo 感谢分享,请问安装过程中的系统弹框有什么好的处理机制不?
多谢多谢。
感谢楼主分享,请教一下 uiautomator2 的 python 库是怎么安装的?
这里说的是闪退,不是 ANR,所以不应该去找 traces 文件;
日志通过 logcat + grep 获取,如果需要更精准的,查看 PID 的变化,定位更精确的闪退位置。
另外一种做法,可能比较慢,HostA 通过 ssh 连接 B 和 C(ssh 配置 token,免登陆)
ssh -q username@HostBIP "/home/test/android-sdk-linux/platform-tools/adb -s udid install TEST.apk"
@seveniruby 感谢你的工具!请教个问题,当某个界面上,uiautomator 获取 dump 文件遇到问题时,appium 会遇到 500 error,此时 appcrawler 会出 exception。
想问一下此时如果想直接 fail 该动作,然后自动 back,再继续,如果要达到这样的效果,我需要怎么配置?
appium exception log:
debug] [MJSONWP] Responding to client with driver.getWindowSize() result: {"width":480,"height":854}
[HTTP] <-- GET /wd/hub/session/a66cad36-4901-4154-adba-cf2499cc194d/window/current/size 200 13 ms - 98
[HTTP] --> GET /wd/hub/session/a66cad36-4901-4154-adba-cf2499cc194d/source {}
[debug] [MJSONWP] Calling AppiumDriver.getPageSource() with args: ["a66cad36-4901-4154-adba-cf2499cc194d"]
[debug] [AndroidBootstrap] Sending command to android: {"cmd":"action","action":"source","params":{}}
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got data from client: {"cmd":"action","action":"source","params":{}}
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command of type ACTION
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command action: source
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Command returned error:java.lang.RuntimeException: Failed to Dump Window Hierarchy
[debug] [AndroidBootstrap] Received command result from bootstrap
[HTTP] <-- GET /wd/hub/session/a66cad36-4901-4154-adba-cf2499cc194d/source 500 204 ms - 154
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Returning result: {"value":"Failed to Dump Window Hierarchy","status":13}
appcrawler exception log:
2017-09-20 14:26:03 ERROR [AppiumClient.asyncTask.150] exception
2017-09-20 14:26:03 ERROR [AppiumClient.asyncTask.151] org.openqa.selenium.WebDriverException: An unknown server-side error occurred while processing the command. (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 91 milliseconds
Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
System info: host: 'sh-jikun.zenmen.corp', ip: '10.241.53.72', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.12.6', java.version: '1.8.0_131'
Driver info: io.appium.java_client.android.AndroidDriver
Capabilities [{appPackage=com.halo.wifikey.wifilocating, reuse=3, noReset=true, dontStopAppOnReset=true, deviceName=8b26684b, platform=LINUX, deviceUDID=8b26684b, androidInstallTimeout=180000, desired={app=, appPackage=com.halo.wifikey.wifilocating, reuse=3, appium=http://10.241.19.57:4821/wd/hub, noReset=true, dontStopAppOnReset=true, deviceName=10.241.19.57:4821, launchTimeout=120000, appActivity=com.lantern.launcher.ui.MainActivity, androidInstallTimeout=180000, newCommandTimeout=120, autoLaunch=true, platformVersion=, automationName=Appium, autoWebview=false, platformName=Android, udid=8b26684b}, newCommandTimeout=120, platformVersion=4.4.4, webStorageEnabled=false, automationName=Appium, takesScreenshot=true, javascriptEnabled=true, autoWebview=false, platformName=Android, udid=8b26684b, deviceManufacturer=OPPO, app=, deviceScreenSize=480x854, networkConnectionEnabled=true, appium=http://10.241.19.57:4821/wd/hub, warnings={}, databaseEnabled=false, launchTimeout=120000, appActivity=com.lantern.launcher.ui.MainActivity, autoLaunch=true, locationContextEnabled=false, deviceModel=A31c}]
Session ID: a66cad36-4901-4154-adba-cf2499cc194d
2017-09-20 14:26:03 ERROR [AppiumClient.asyncTask.152] java.util.concurrent.FutureTask.report(FutureTask.java:122)
java.util.concurrent.FutureTask.get(FutureTask.java:206)
com.testerhome.appcrawler.driver.WebDriver$$anonfun$2.apply(WebDriver.scala:135)
scala.util.Try$.apply(Try.scala:192)
com.testerhome.appcrawler.driver.WebDriver$class.asyncTask(WebDriver.scala:126)
com.testerhome.appcrawler.driver.AppiumClient.asyncTask(AppiumClient.scala:24)
com.testerhome.appcrawler.driver.AppiumClient$$anonfun$getPageSource$1.apply$mcVI$sp(AppiumClient.scala:302)
scala.collection.immutable.Range.foreach$mVc$sp(Range.scala:166)
com.testerhome.appcrawler.driver.AppiumClient.getPageSource(AppiumClient.scala:301)
com.testerhome.appcrawler.Crawler.refreshPage(Crawler.scala:538)
com.testerhome.appcrawler.Crawler.start(Crawler.scala:140)
com.testerhome.appcrawler.AppCrawler$.startCrawl(AppCrawler.scala:342)
com.testerhome.appcrawler.AppCrawler$.parseParams(AppCrawler.scala:310)
com.testerhome.appcrawler.AppCrawler$.main(AppCrawler.scala:90)
com.testerhome.appcrawler.AppCrawler.main(AppCrawler.scala)
Exception in thread "main" java.lang.NullPointerException
at scala.collection.immutable.StringOps$.length$extension(StringOps.scala:48)
at scala.collection.immutable.StringOps.length(StringOps.scala:48)
at scala.collection.IndexedSeqOptimized$class.isEmpty(IndexedSeqOptimized.scala:27)
at scala.collection.immutable.StringOps.isEmpty(StringOps.scala:30)
at scala.collection.TraversableOnce$class.nonEmpty(TraversableOnce.scala:109)
at scala.collection.immutable.StringOps.nonEmpty(StringOps.scala:30)
at com.testerhome.appcrawler.Crawler.refreshPage(Crawler.scala:541)
at com.testerhome.appcrawler.Crawler.start(Crawler.scala:140)
at com.testerhome.appcrawler.AppCrawler$.startCrawl(AppCrawler.scala:342)
at com.testerhome.appcrawler.AppCrawler$.parseParams(AppCrawler.scala:310)
at com.testerhome.appcrawler.AppCrawler$.main(AppCrawler.scala:90)
at com.testerhome.appcrawler.AppCrawler.main(AppCrawler.scala)
手动使用 uiautomatorview 获取问题页面遇到如下异常,其它页面正常
Error while parsing UI hierarchy XML file: Invalid ui automator hierarchy file.
请教一下,cmd.find('install') 这个是用到哪个第三方工具么?
太棒了,建议版主加精。解除了很多 STF 的疑惑,之前看那张结构图也是云里雾里,现在总算清晰了很多。
'D:\Users\Android\android-sdk\platform-tools\adb.exe' with args: ["-P",5037,"-s","192.168.134.101:5555","shell","input","keyevent",3] 看起来你似乎在用 Grid hub,那你先检查一下http://192.168.134.101:4444/grid/console 上你的手机有没有注册到 Hub。
另外可以贴 android_caps.my_driver 这个方法。
可以贴一些 appium 的 log 或者把你的 setup 方法贴出来看看。
时隔这么久,不知道楼主最后是怎么解决这个问题的。今天也遇到了:
http://stackoverflow.com/questions/30322988/cannot-run-android-app-through-adb-or-appium-because-of-securityexception-permi
具体 fragments 解释:http://www.jianshu.com/p/662c46cd3b5f。
已经恢复正常。
看起来 am 命令就是调用了 app_process。
shell@zx55q05_64:/ $ cat /system/bin/am
#!/system/bin/sh
#
# Script to start "am" on the device, which has a very rudimentary
# shell.
#
base=/system
export CLASSPATH=$base/framework/am.jar
exec app_process $base/bin com.android.commands.am.Am "$@"
@codeskyblue ,请教一下这里是不是需要 root 权限?我照着步骤运行命令,没有任何返回。
感谢分享。也写过简单的 apk 预装到手机里面辅助测试,但是仅仅知道怎么去把参数通过 adb shell 传给 apk。请问怎么获取 apk 的返回值?
6、登录授权
请教登录授权有更具体的介绍么?
记录个遇到的问题:监控开启后,webdriver 启动不了,疑似在开启监控后,uiautomator 进程继续存在,导致 webdriver 启动失败。
解决方法:在监控结束后,kill 掉响应的 uiautomator 进程。
@A_tester 后来可以直接起一个 appium 的 session 么?
@rockyrock 没有找到相关的开源框架,抱歉暂时没有时间提供 Demo。但是只要把逻辑理清楚,把所需要的数据存储好,其它的工作主要是在前端了。
把 py 文件的方法存在数据库中 (把文件路径,py 文件名,类名,方法名),再写个工具自动同步 py 文件和数据库。
—— 来自 TesterHome 官方 安卓客户端
各位在实际使用过程中,发现 app 的 bug 大概多少呢?
@seveniruby : 安装的时候,是不是会修改签名文件?我这边安装完后,提示包会非法包。如果直接安装同样的 apk,则不会出现问题。--- 应该是 Appium 安装的问题。