引子

所谓坑,就是正常走路也会掉井里,碰到坑可以绕道走,名曰 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


↙↙↙阅读原文可查看相关链接,并与作者交流