Calabash Calabash 的那些坑

apogee · July 26, 2014 · Last by 米阳MeYoung replied at November 02, 2015 · 1172 hits

引子

所谓坑,就是正常走路也会掉井里,碰到坑可以绕道走,名曰workaround。

例子

举例来说,keyboard_enter_text 用来模拟键盘输入,大部分时候没问题,有时候会输入错误字符, 如果安装了calabash-ios 0.9.169或更新版本,也许就没问题了,如果在0.9.168以下,解决方法是

query("textField marked:'some mark'", [{setText:'some text'}]) 

这个问题看起来已经在最新版本中解决:https://github.com/calabash/calabash-ios/issues/400

再举一个例子,在calabash-ios 0.9.168下面,RESET_BETWEEN_SCENARIOS=1 这个设置在我这里不起作用. 这个问题的后果可大可小,对我的测试脚本来说是一个blocker, 不解决的话整个测试没法往下走, 原因是reset_app_jail方法有问题
(reset_app_jail方法即将被reset_app_sandbox取代)

def reset_app_jail(sdk, app_path)
app = File.basename(app_path)
bundle = `find "#{ENV['HOME']}/Library/Application Support/iPhone Simulator/#{sdk}/Applications/" -type d -depth 2 -name #{app} | head -n 1`
return if bundle.empty? # Assuming we're already clean

sandbox = File.dirname(bundle)
['Library', 'Documents', 'tmp'].each do |dir|
FileUtils.rm_rf(File.join(sandbox, dir))
end
end

问题在于测试app对应的本地Simulator目录,只有最新版本的SDK对应目录会被reset,意味着如果指定了DEVICE_TARGET没有对应最新的SDK版本, reset_app_jail方法不会起作用。

接下来,要看reset_app_jail如果工作,是否能清理干净,Calabash仅仅“保守”删除了'Library', 'Documents', 'tmp'这三个文件夹,如果你的app在本地保存的数据不在这三个文件夹之内就不会被删除,所以如果你有更多的清理需求,需要自定义reset_app_jail方法,手动删除。

这个问题上个星期被解决,更多详细内容,请参考
https://github.com/calabash/calabash-ios/issues/376
https://github.com/calabash/calabash-ios/pull/440

结尾

碰到坑虽然不是好事,却是学习Calabash的好机会,掉进去的坑多了,对Calabash也就有了更多了解。
最后,使用Calabash需要时不时看看下面两个列表,时不时看看Calabash“天气预报”
Calabash-ios:https://github.com/calabash/calabash-ios/issues
Calabash-android:https://github.com/calabash/calabash-android/issues

共收到 5 条回复 时间 点赞

大赞~~回来我再来仔细看~~~

输入文字的方法我一般用set_text,可以直接输入中文

我觉得calabash-ios最大的坑是不支持webview;

#2楼 @noshuai ios 可以, android 不行。所以android和ios还是独立开来写自动化比较好

#4楼 @lihuazhang calabash-android 是支持安卓app中的webview吧。 我们现在安卓 和 ios基本是一套代码。

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up