• 也是用的 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 的变化,定位更精确的闪退位置。

  • adb 的使用 at 2017年09月25日

    另外一种做法,可能比较慢,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 安装的问题。