• go 还是得靠你来,才镇得住啊

  • 京东竟然夜来杭州了

  • 之前试过,发现非付费的 https 正式不好使。选用的方案是正式 https 正式, 👍

  • 单 pc 能同时操作多少设备,试过么?

  • 想转测开,请大家提点意见 at 2018年09月30日

    不建议转,都工作这么多年了

  • 整个 service 去弄这些事情也是不错的

  • 我这不是 mac,在 intelliIDEA 上弄好 scala 环境,导入 appcrawler 功能,总是报错。各位是怎么解决的?

    [info] Reapplying settings...
    [info] Set current project to AppCrawler (in build file:/Users/dengwei/Documents/amap-client/crawler/AppCrawler/AppCrawler/)
    [info] Applying State transformations org.jetbrains.sbt.CreateTasks from /Users/dengwei/Library/Application Support/IntelliJIdea2016.2/Scala/launcher/sbt-structure-1.0.jar
    [error] java.lang.ClassNotFoundException: org.jetbrains.sbt.CreateTasks$
    [error]         at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    [error]         at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    [error]         at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    [error]         at java.lang.Class.forName0(Native Method)
    [error]         at java.lang.Class.forName(Class.java:348)
    [error]         at sbt.internal.inc.ModuleUtilities$.getObject(ModuleUtilities.scala:20)
    [error]         at sbt.BasicCommands$.$anonfun$call$5(BasicCommands.scala:187)
    [error]         at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:234)
    [error]         at scala.collection.immutable.List.foreach(List.scala:389)
    [error]         at scala.collection.TraversableLike.map(TraversableLike.scala:234)
    [error]         at scala.collection.TraversableLike.map$(TraversableLike.scala:227)
    [error]         at scala.collection.immutable.List.map(List.scala:295)
    [error]         at sbt.BasicCommands$.$anonfun$call$2(BasicCommands.scala:187)
    [error]         at sbt.Command$.$anonfun$applyEffect$4(Command.scala:125)
    [error]         at sbt.Command$.$anonfun$applyEffect$2(Command.scala:121)
    [error]         at sbt.MainLoop$.processCommand(MainLoop.scala:121)
    [error]         at sbt.MainLoop$.$anonfun$next$2(MainLoop.scala:105)
    [error]         at sbt.State$$anon$1.runCmd$1(State.scala:227)
    [error]         at sbt.State$$anon$1.process(State.scala:233)
    [error]         at sbt.MainLoop$.$anonfun$next$1(MainLoop.scala:105)
    [error]         at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:16)
    [error]         at sbt.MainLoop$.next(MainLoop.scala:105)
    [error]         at sbt.MainLoop$.run(MainLoop.scala:98)
    [error]         at sbt.MainLoop$.$anonfun$runWithNewLog$1(MainLoop.scala:76)
    [error]         at sbt.io.Using.apply(Using.scala:22)
    [error]         at sbt.MainLoop$.runWithNewLog(MainLoop.scala:70)
    [error]         at sbt.MainLoop$.runAndClearLast(MainLoop.scala:52)
    [error]         at sbt.MainLoop$.runLoggedLoop(MainLoop.scala:37)
    [error]         at sbt.MainLoop$.runLogged(MainLoop.scala:29)
    [error]         at sbt.StandardMain$.runManaged(Main.scala:104)
    [error]         at sbt.xMain.run(Main.scala:71)
    [error]         at xsbt.boot.Launch$$anonfun$run$1.apply(Launch.scala:109)
    
  • @seveniruby 发现一个 bug,backButton 在 ios 上始终不生效。
    该问题 block 我们后续调研啦,辛苦优先修复一下哈

    看代码发现,(设置 ElementAction 时机应该提前吧)

    • backButton 设置始终不生效,有 bug: //判断是否需要返回上层 if (nextElement == None) { if (needReturn()) { log.info("need to back") nextElement = getBackButton() setElementAction("back") } else { log.info("no need to back") } }

    back 方法:

    
    def back(): Unit = {
      pluginClasses.foreach(_.beforeBack())
      if (conf.currentDriver.toLowerCase == "android") {
        if (backDistance.intervalMS() < 4000) {
          log.warn("two back action too close")
          Thread.sleep(4000)
        }
        driver.asyncTask() {
          driver.back()
        }
        backDistance.append("back")
        appNameRecord.pop()
      } else {
        log.warn("you should define you back button in the conf file")
      }
    }
    
  • @seveniruby 提个 bug

    2017-10-19 17:58:53 WARN [AppiumClient.$anonfun$getPageSource$1.335] get page source error
    2017-10-19 17:59:13 ERROR [AppiumClient.asyncTask.149] 20 seconds timeout
    2017-10-19 17:59:13 WARN [AppiumClient.$anonfun$getPageSource$1.335] get page source error
    2017-10-19 17:59:13 ERROR [Crawler.crawl.196] crawl not finish, return with exception
    2017-10-19 17:59:13 ERROR [Crawler.crawl.197]
    2017-10-19 17:59:13 ERROR [Crawler.crawl.198] NullPointerException:
    2017-10-19 17:59:13 ERROR [Crawler.crawl.199]
    2017-10-19 17:59:13 ERROR [Crawler.$anonfun$crawl$4.200] java.lang.NullPointerException
    2017-10-19 17:59:13 ERROR [Crawler.$anonfun$crawl$4.200]    at scala.collection.immutable.StringOps$.length$extension(StringOps.scala:47)
    2017-10-19 17:59:13 ERROR [Crawler.$anonfun$crawl$4.200]    at scala.collection.immutable.StringOps.length(StringOps.scala:47)
    2017-10-19 17:59:13 ERROR [Crawler.$anonfun$crawl$4.200]    at scala.collection.IndexedSeqOptimized.isEmpty(IndexedSeqOptimized.scala:26)
    2017-10-19 17:59:13 ERROR [Crawler.$anonfun$crawl$4.200]    at scala.collection.IndexedSeqOptimized.isEmpty$(IndexedSeqOptimized.scala:26)
    2017-10-19 17:59:13 ERROR [Crawler.$anonfun$crawl$4.200]    at scala.collection.immutable.StringOps.isEmpty(StringOps.scala:29)
    2017-10-19 17:59:13 ERROR [Crawler.$anonfun$crawl$4.200]    at scala.collection.TraversableOnce.nonEmpty(TraversableOnce.scala:111)
    2017-10-19 17:59:13 ERROR [Crawler.$anonfun$crawl$4.200]    at scala.collection.TraversableOnce.nonEmpty$(TraversableOnce.scala:111)
    2017-10-19 17:59:13 ERROR [Crawler.$anonfun$crawl$4.200]    at scala.collection.immutable.StringOps.nonEmpty(StringOps.scala:29)
    2017-10-19 17:59:13 ERROR [Crawler.$anonfun$crawl$4.200]    at com.testerhome.appcrawler.Crawler.refreshPage(Crawler.scala:553)
    2017-10-19 17:59:13 ERROR [Crawler.$anonfun$crawl$4.200]    at com.testerhome.appcrawler.Crawler.doElementAction(Crawler.scala:1048)
    2017-10-19 17:59:13 ERROR [Crawler.$anonfun$crawl$4.200]    at com.testerhome.appcrawler.Crawler.crawl(Crawler.scala:809)
    2017-10-19 17:59:13 ERROR [Crawler.$anonfun$crawl$4.200]    at com.testerhome.appcrawler.Crawler.$anonfun$crawl$1(Crawler.scala:173)
    2017-10-19 17:59:13 ERROR [Crawler.$anonfun$crawl$4.200]    at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
    2017-10-19 17:59:13 ERROR [Crawler.$anonfun$crawl$4.200]    at scala.util.Try$.apply(Try.scala:209)
    2017-10-19 17:59:13 ERROR [Crawler.$anonfun$crawl$4.200]    at com.testerhome.appcrawler.Crawler.crawl(Crawler.scala:173)
    2017-10-19 17:59:13 ERROR [Crawler.$anonfun$crawl$4.200]    at com.testerhome.appcrawler.Crawler.start(Crawler.scala:157)
    2017-10-19 17:59:13 ERROR [Crawler.$anonfun$crawl$4.200]    at com.testerhome.appcrawler.AppCrawler$.startCrawl(AppCrawler.scala:342)
    2017-10-19 17:59:13 ERROR [Crawler.$anonfun$crawl$4.200]    at com.testerhome.appcrawler.AppCrawler$.parseParams(AppCrawler.scala:310)
    2017-10-19 17:59:13 ERROR [Crawler.$anonfun$crawl$4.200]    at com.testerhome.appcrawler.AppCrawler$.main(AppCrawler.scala:90)
    2017-10-19 17:59:13 ERROR [Crawler.$anonfun$crawl$4.200]    at com.testerhome.appcrawler.AppCrawler.main(AppCrawler.scala)
    
  • 问题已解决,wda 的问题,xocde9 目前只能用 ios11 设备跑

  • wda 上了该问题的解法了:https://github.com/facebook/WebDriverAgent/issues/703

    xcode9 目前看必须用 ios11 的设备跑,就没有问题

  • @seveniruby 谢谢,看到了。。

    <XCUIElementTypeOther type=\"XCUIElementTypeOther\" value=\"AX error -25205\" name=\"AX error -25205\" label=\"AX error -25205\" enabled=\"true\" visible=\"true\" x=\"0\" y=\"0\" width=\"320\" height=\"568\">
    

    有一个新的问题,最新版的 appium 在 IOS 上获取的信息好奇怪啊,所有元素的 name 都是 AX error -25205,请问你遇到么?

  • @seveniruby 支持 macaca 的哪个版本呢?

  • 提供个 yml 配置文件的样本吧

  • AppCrawler 使用 Macaca 问题 at 2017年10月17日

    什么时候计划搞一下呢,macaca 最新版本已经支持 xcode9,appium 还不支持

  • 哪里有配置文件的详细说明?

    2017-10-17 12:33:47 INFO [Runtimes$.eval.65] driver.swipe(0.9, 0,5, 0.1, 0.5)
    <console>:12: error: overloaded method value swipe with alternatives:
      (startX: Double,endX: Double,startY: Double,endY: Double)Option[_] <and>
      (direction: String)Unit
     cannot be applied to (Double, Int, Int, Double, Double)
           driver.swipe(0.9, 0,5, 0.1, 0.5)
                  ^
    

    api 报错

  • 好帖子,顶起

  • 尴尬了

    undef: __Z12__gcov_flushv
    Undefined symbols for architecture x86_64:
      "__gcov_flush()", referenced from:
          -[TestAppDelegate applicationDidEnterBackground:] in TestAppDelegate.o
    ld: symbol(s) not found for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    Showing first 200 warnings only
    
  • 什么原理?

  • Mark,还是棒棒的

  • #2 楼 @cobbxia 学院派 什么意思?

  • 好文章,期待落地效果分析。。。

    之前有了解过这块,有部分公司是 hook uicontrol 的 action,将动作名称设为 id,id 会更有意义一些,且唯一

  • 对呀,薪资范围很重要哇

  • 前端 4:1 ~ 5:1 是比较正常的, 服务端的话比例会更高一些

  • #7 楼 @jet 这个对 group 是会执行一次,我一个 group 里头会有多条用例,需要执行多次