你在添加 nativeInstrumentsLib
这种方法中有看到这样的 log 吗:
info: [debug] Creating instruments
info: On some xcode 6 platforms, instruments-without-delay does not work. If you experience this, you will need to re-run appium with the --native-instruments-lib flag
info: [debug] Preparing uiauto bootstrap
XCode 6 以上需要用最新的 instruments-without-delay
,估计 appium 1.3.7 还没更新到最新的 instruments-without-delay
。
另外,如果你要使用你自己编译的 instruments ,估计要传 desired_caps['nativeInstrumentsLib'] = True
来让 appium 使用你自己的 instruments 。
对于在 appium 中去掉 delay ,目前 instruments-without-delay
应该是唯一办法。
点击动态键盘这个是测试点吗?是的话估计要 分割按钮 + 图形识别 + 坐标 。
如果不是测试点,想办法直接输入那个框的值就好了。
要找到合适的方法确实比较花时间,大赞!
#5 楼 @dream_tiwan 这么看你的 log 能正常输出啊(别管 log 里有没有 error ,这个工具只是负责把 iOS log 输出到 console 里面而已)。
不过建议你还是参考一下 @luis 的说法,先保证你的应用使用正确的编译方式吧。真机运行限制还是挺多的。
官网文档可以看这里: https://github.com/appium/appium/tree/master/docs/cn/appium-setup
应用闪退查 logcat 啊,看 appium log 不够的。
传送门:
https://github.com/appium/appium/blob/master/docs/cn/writing-running-appium/server-args.cn.md
那些不是 capabilities,是 server 启动参数。
Google 之前请先看官方文档
开发者账号不是这么用的。。。你的 app 没有源码,所以你也不可能改得了它的签名。
从你的 log 来看,你还没走到那一步(必须要 developer 签名的错误信息是instruments Permission to debug com.xxxx.xxxxx was denied , The app must be signed with a devepoment identity (e.g. iOS Developer)
)
你这个错误的原因是运行 ./deviceconsole -u (your phone udid)
这个命令出错。
如果你使用 npm 安装 appium 的,你可以去 /lib/node_modules/appium/build/
下运行 ./deviceconsole -u 8bfe0b4ff5aleac8981524cf50edc6710041ed2a
看看输出结果是什么。
如果是使用 appium.app,你用命令行在 appium.app 这个文件夹里找一下 deviceconsole 在哪里,然后再运行上面那个命令。
按照 appium 官方的说法,加上 --native-instruments-lib
会有 delay,不加上的话默认是去掉 delay 的。
或者你在用例初始化 driver 的 Capability 里面加上 nativeInstrumentsLib:true 试试(这不是实际代码,只是表达这个意思)?
参考官网这里的说明:http://appium.io/slate/en/v1.3.6/?python#ios-only
对, appium.app 就是 appium.dmg 里面那个应用。
运行脚本就是把代码拷到一个文件里面然后运行那个文件啊。
我不大记得 appium.app 有没有重放功能了。。。你可以找一下。
#8 楼 @fanfaneve 这个是 instrument 内部的 1s delay,详细可见:https://github.com/facebook/instruments-without-delay
appium 启动时加上 --native-instruments-lib false
可以去掉这个 delay 。你在 mac 下用 appium.app 的话这个 delay 默认是加上的。
参照官方教程:https://developer.chrome.com/devtools/docs/remote-debugging#debugging-webviews
你先确定一下这几点:
WebView.setWebContentsDebuggingEnabled(true);
从 log 来看两台电脑之间通讯没啥问题。问题出在 mac 安装 app 前面的步骤,这里应该是环境配置的问题。
在官方论坛找到这个:https://discuss.appium.io/t/log-capture-did-not-start-in-a-reasonable-amount-of-time/1204/20
你参考一下 43d 的解决方案。
PS:请加头像
大赞!!
#4 楼 @tianya0035 Appium 除了 adb ,还会用 selendroid,uiautomator,chromedriver。
帮你 @shixue33 ,她对 robotium 应该比较熟。
查到 chromedriver 在 Android Emulator 上确实有这个 bug :
https://code.google.com/p/chromedriver/issues/detail?id=792&can=1&q=screenshot&colspec=ID%20Status%20Pri%20Owner%20Summary
Appium 也有讨论过这个问题:
https://github.com/appium/appium/issues/3224
因为你没提到你的测试环境,我也不能确定你的问题是否就是上面的 bug 。
另外,根据你的 log ,你使用的是 chromedriver 2.10,官网最新是 2.15 。你可以升级后再试试。
PS:请加头像。。。
这个标题。。。换个没有那么具有迷惑性的吧。。。我还以为是介绍原理。。。
操作 webview 在 4.4 或以上 appium 直接用 chromedriver(就是根据你开 appium session 时使用的 caps 转化成 chromedriver 的 caps 然后开启 chromedriver 的 session。因为都遵循 webdriver 规范,简单处理后把请求转发给 chromedriver 就好了)。
chromedriver 源码,有兴趣可以深入探究:https://code.google.com/p/chromium/codesearch#chromium/src/chrome/test/chromedriver/README.txt&q=file:test/chromedriver/README.txt&sq=package:chromium&l=1
chromedriver 的具体原理是通过 chrome 的 remote debugging 来控制 chrome 的。你可以参考这个帖子:
http://testerhome.com/topics/1719
iOS 的 webview:
http://testerhome.com/topics/2047
除此之外,还可以调用 selendroid 控制 webview 。selendroid 控制 webview 使用的是 AndroidAtom.java,简单的说就是往 webview 注入 javascript 事件。
这个帖子的跟帖里各路大神有简单讨论了一下 selendroid/robotium 的 webview 原理:
http://testerhome.com/topics/2234
#9 楼 @bueaty 先声明一下,我不是大神。。。
显示网络异常,然后找挂机元素就出现 SessionNotFoundException
这个错误?
建议你参考这个帖子,把你的问题描述清楚,并把必要的 log 附上:
http://testerhome.com/topics/2287
#2 楼 @fanfaneve 能给个时间对比吗?
例如用 UIAutomation 执行你上面脚本这么多操作需要多少时间(s),用 Appium 执行同样操作是多少时间(s)。既然想优化,那就要先有指标作参考。
或者你可以打开 appium server 的 --log-timestamp
选项,在 log 里面增加时间戳,然后把 log 贴出来看看到底时间都去哪里了。
Appium 相比 UIAutomation 会慢的可能原因有:
我是勤劳的传送门:https://github.com/cosysoft/device
学习了!
提个小问题:在 Marven central repository 下载的 javadoc 的 html 文档中没有带有 UTF-8 编码声明,如果浏览器默认编码不是 utf-8 或者没打开自动检测编码,会显示乱码。建议这个 javadoc 用全英文的吧。中文看起来有些地方实在别扭