AppCrawler 运行脚本执行 iOS 遍历,appium 报错

carrie · 2017年05月09日 · 最后由 hcxyzlm 回复于 2020年05月19日 · 2537 次阅读

运行了脚本执行 iOS 遍历,脚本命令是 java -jar appcrawler-2.0.1.jar -a /Users/carrie/Downloads/***.ipa --capability automationName=XCUITest -p ios -c config.yml,WDA 和 app 安装成功并连接成功后,手机上的 app 启动,但界面停留在进入 app 的初始页面没有进行任何操作,appcrawler 在 refresh page 时提示:
2017-05-09 10:46:11 ERROR [AppiumClient.asyncTask.145] 20 seconds timeout
2017-05-09 10:46:11 TRACE [AppiumClient.apply$mcVI$sp.336] get page source error

appium 一直提示:
[xmldom error] element parse error: TypeError: source.indexOf is not a function
@#[line:0,col:undefined]
[xmldom error] element parse error: TypeError: source.indexOf is not a function
@#[line:0,col:undefined]

请问有同学遇到过这样的问题吗?是因为 WDA 返回的页面 DOM 结构解析不成功?我手动运行 WDA 在 mac 上看 app 的页面元素都是可以查看的,还是本机还需要安装什么呢?

共收到 16 条回复 时间 点赞

解决了,mac 和 xcode 升级到最高版本就没问题了

carrie 回复

有真机跑起来 appcrawler 的经验么?

王明海 回复

已经在真机跑起来了,但还遇到了一些问题正在看

直接在这篇帖子里面讲一下最近使用 appcrawler 对 iOS 真机进行自动化遍历的进展吧,看看其他同学有没有遇到类似情况。定义了遍历配置的 yml 文件,因为 noReset 定义为 false,所以每次都是新装;按照我在配置文件中的定义,进入 app 首页后的操作是首先允许消息推送,然后进入登录页,输入用户名密码后点击登录。
1.但是对是否允许发送推送的系统弹框,虽然 yml 文件定义的是允许,仍然点击了 “不允许” 按钮;
2.输入了用户名和密码后,没有点击登录就结束了遍历,也没有报错。仔细看了 appcrawler 的日志,有一句日志如下:
2017-05-10 18:08:17 ERROR [Crawler.isExit.372] appNameRecord last 5 List(xx 开发版, xx 开发版, xx 开发版, xx 开发版, xx 开发版)

看了一下 appcrawler 的源代码,在 Crawler.scala 文件中 isExit() 函数体找到这样一句:
if (appNameRecord.last(5).forall(conf.appWhiteList.contains(_) == false)) {
log.error(s"appNameRecord last 5 ${appNameRecord.last(5)}")
return true
}

看来是输入密码完成后,判断是否需要退出遍历的时候中了这一句判断退出了,以至于点击登录按钮那一步根本没有进行。至于原因还不知道。

@Carrue 可以贴一下 ios 需要哪些启动参数吗

@charles
有配置文件:
java -jar appcrawler-2.0.1.jar --capability udid=d231d751d21a49b9e74baa8063b0d105ce93d76b,automationName=XCUITest -p ios -c config.yml

没有配置文件:
java -jar appcrawler-2.0.1.jar -a xxx.ipa --capability udid=d231d751d21a49b9e74baa8063b0d105ce93d76b,automationName=XCUITest,platformVersion=10.1.1

都是真机运行

carrie 回复

apiium 是使用终端里面的还是使用 appium-desktop 的 那个里面的参数包含哪些可以也贴下吗?我的报一个这样的错误:[XCUITest] Error: Platform version must be 9.3 or above. '9.2' is not supported. 但是我已经使用了 iOS 10.0 的手机啦

王明海 回复

我用的是 npm 安装的 appium,用 appium-desktop 也 OK 不报错的,你这个报错是 XCUITest 报错的,你看看你的 XCode 版本号是多少

王明海 回复

遇到这样的报错,你先自己写一段小代码试试看会不会报错,这个报错是 appium 的输出而且是 XCUITest 报的错,应该跟 appcrawler 无关,你先试着定位问题。

carrie 回复

你好 我也遇到这个问题 xcode 是 8.3.3 吗

carrie #11 · 2017年07月07日 Author
weiweiliu 回复

我的 xcode 是 8.3.2,系统是 macOS sierra 10.12.4

carrie 回复

谢谢 根据你的回答 我升级 xcode 就解决了 我有个问题想请教 现在你定位 ios 的元素 用的什么工具 appium 的 inspector xcode8 已经不支持了 你使用的什么工具呢?
我安装 appinspector 这个工具 macaca doctor 检查没问题 但启动 appinspector 打开浏览器 报出 server internal error 纠结啊

没有配置文件,我报了这个错误能否帮忙看下:

2017-09-26 15:32:12 INFO [Crawler.setupAppium.253] use AppiumClient
Exception in thread "main" org.openqa.selenium.WebDriverException: An unknown server-side error occurred while processing the command. Original error: Platform version must be 9.3 or above. '9.2' is not supported. (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 302 milliseconds
Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
System info: host: 'localhost', ip: '127.0.0.1', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.12.5', java.version: '1.8.0_91'
Driver info: io.appium.java_client.ios.IOSDriver
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

我这边所有的弹框都拿不到数据。也是显示

get page source error

弹框不仅仅系统的弹框,估计写在 window 上面的弹框都遍历到数据
想知道你们解决弹框问题的

@Test_Sir 我和你报同样的错,
@Carrue 麻烦楼主给解答一下,我的 xcode 是 9.3 的,难道 appcrawler 只支持 9.2 的吗??

我这边也遇到了弹框一直点击不到,然后一直卡在那里,有什么解决办法吗

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册