按照 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 用全英文的吧。中文看起来有些地方实在别扭
从你的 log 看,你的 adb 执行
"D:\Program Files (x86)\seleniumTools\adt-bundle-windows-x86-20130917\sdk\platform-tools\adb.exe" -s emulator-5554 "shell \"echo 'ping'\""
这条命令时出错了,把 adb 命令的帮助信息打印出来了。(看起来是命令有语法错误,不过我之前没遇到过,需要你给一下 appium 版本才能确认)
然后由于这个出错,appium 重启了 adb server。然后后面出现了:
info: [debug] Starting logcat capture
info: [debug] Attempting to uninstall app
info: [debug] Not uninstalling app since server not started with --full-reset
info: [debug] Cleaning up android objects
info: [debug] Cleaning up appium session
表示终于成功连上设备了,但在它准备卸载应用时由于 appium server 启动参数中没有加入 --full-reset
,所以没有卸载,然后就关闭 session 了。
建议你把测试脚本完整代码、appium 版本、appium 启动参数都提供一下。
PS:代码块不要用引用语法。。。看得比较痛苦。。。
最好的资料就是 appium 官方的文档。
#4 楼 @xcgspring 关于你这个框架,我大致看了一下介绍,有些问题想问一下。如果问得不好或理解不对的地方,请见谅:
1、 你的目标群体是什么?手工测试人员/写过自动化脚本的人/对自动化测试和开发都有较深入了解的人/开发?看了你的示例代码后感觉前两个类型的人不一定搞的定,后两个类型的可能会偏向于使用符合一些规范的工具,如 selenium,selendroid,appium,他们都符合 webdriver API 规范。
2、从你的描述来看,你希望解决的痛点是 如果没有好的编程经验,一段时间的迭代之后,测试脚本库就会臃肿不堪,没法维护,于是我们又得重写脚本 , 对于 tester,换一个项目的成本很高,之前项目的经验有时候很难在现有的项目复用,但通过你的示例代码我没看出 AXUI 对于这两个痛点有很好的解决办法(目前只发现它相比 webdriver 多了对 windows desktop 程序的支持)
3、把 UI 逻辑和测试脚本分离是一个很好的想法,但通过 xml 来实现会不会导致易用性/可读性不是太友好?而且 selenium 的 PageObject 设计模式也能做到类似效果。
4、通过扩展支持更多 API 这个想法也很赞,而且拓展方法看起来也不是太复杂。不过你的框架本来是为了 windows desktop 的 UI 自动化设计的,让它完整支持其他 API 会不会有难度?通过扩展支持大量平台的测试框架目前我比较了解的是 robotframework ,它的办法是 API 什么的都不限定,只限定用例的编写格式,降低跨平台用例的学习难度。
请附上 appium server 的 log 。
光凭上面你给的信息定位不了原因。
升级是指使用其他浏览器?
你可以看看 crosswalk,把 chrome 内核打包到 app 中。
#6 楼 @wangquan2596489 麻烦更新一下标题并把尽量详细的解决方案附到正文中,方便后面的人查看。谢谢!