【问题标题】:Why can't Calabash interact with my iOS app in the simulator?为什么 Calabash 不能在模拟器中与我的 iOS 应用程序交互?
【发布时间】:2015-05-01 21:23:58
【问题描述】:

我正在将 Calabash 集成到一个大型项目中。我有 Calabash 在测试应用程序中工作,所以我知道我的安装和环境设置正确。我正在使用可访问性标签和 .feature 文件来点击按钮并在字段中输入文本。效果很好。

但是,我的“真实”项目更大、更复杂。即使配置与我的测试应用程序相同(请参阅下面的统计信息),当我在真实应用程序上运行一个简单的 .feature 文件时,我会得到不稳定的结果:大约 80% 的时间,它甚至在通过“ .feature 文件的“给定”行,并最终超时并显示此消息:

Retrying.. HTTPClient::ReceiveTimeoutError: (execution expired)

我注意到,在这些情况下,当我尝试使用鼠标与之交互时,应用程序完全没有响应。它似乎已经冻结了。还有一个 UIAlertView 应该出现,但从未出现。请注意,当我从 XCode(相同的“-cal”目标)启动模拟器时,它从不 冻结。我可以与之交互,UIAlert 出现,一切正常。

另外 20% 的时间,它将使它在我的 .feature 文件中比这更进一步——它会有效地通过“Given”行,并且可能还有其他行,只要它们不涉及与屏幕的交互。任何敲击或键入命令都会导致它挂起并最终超时,并显示与上述相同的“执行过期”消息。

经过大量调查,我已经消除了此应用程序的环境/配置与我的测试应用程序之间可能存在的任何差异,并确定我的应用程序一定有一些 Calabash 真的不喜欢的地方!不幸的是,我对葫芦不熟悉,不知道从哪里开始寻找。任何帮助将不胜感激。

Calabash 团队要求的诊断:

> xcode-select --print-path
/Applications/Xcode.app/Contents/Developer
> xcodebuild -version
Xcode 6.1
Build version 6A1052d
> calabash-ios version
0.11.3
> calabash.framework/Resources/version
0.11.3
irb(main):006:0> server_version
{
                    "app_version" => "0.10",
                        "outcome" => "SUCCESS",
                         "app_id" => "<redacted>",
           "simulator_device" => "iPhone",
                        "version" => "0.11.3",
                       "app_name" => "<redacted>",
    "iphone_app_emulated_on_ipad" => false,
                          "4inch" => true,
                            "git" => {
        "remote_origin" => "git@github.com:calabash/calabash-ios-server.git",
               "branch" => "master",
             "revision" => "40c6245"
    },
          "screen_dimensions" => {
         "scale" => 2,
         "width" => 640,
        "sample" => 1,
        "height" => 1136
    },
                    "iOS_version" => "8.1",
                         "system" => "x86_64",
                      "simulator" => ""
}

【问题讨论】:

  • 对您的应用进程进行一次旋转转储,以查看其线程在做什么。
  • 需要更多关于您用于运行测试的代码行的详细信息?您是否使用构建命令构建应用程序?还是使用来自 xcode 的构建?如果有的话,你有几个模拟器吗?你选择一个吗?您的应用名称中间是否包含空格?
  • 我知道这篇文章已经过时了,但是,如果您的应用程序在 xcode 控制台中登录太多,那么它将冻结。这是 Apple 引入的错误。您可以在此处阅读相关内容:google groups.

标签: ios ios-simulator calabash calabash-ios


【解决方案1】:

您是否尝试过将葫芦更新到 .13?并且您添加了 CFNetwork 框架吗?

您是否添加了 -force_load "$(SRCROOT)/calabash.framework/calabash" -lstdc++?

抱歉信息不足,这就是我能想到的?如果你已经解决了这个问题。你能关掉它吗?

【讨论】:

    【解决方案2】:

    你能使用 calabash-ios 控制台成功启动模拟器吗?

    尝试编辑并使用它来运行已经构建的 -cal 目标

    DEBUG=1 DEVICE_TARGET='iPhone 5s (7.1 Simulator)' SDK_VERSION=7.1 PLATFORM=iphone cucumber -v --format html --out iphone.html $BASE_PATH/your-app/features/TESTCASE.feature
    

    【讨论】:

    • SDK_VERSION 变量自 Xcode 5.1 起已弃用。 calabashapi.xamarin.com/ios/…
    • 而且这种对PLATFORM的使用是非标准的。通常,PLATFORM变量用于跨平台测试,可以是iosandroid
    【解决方案3】:

    还有一个 UIAlertView 应该出现,但从未出现。请注意,当我从 XCode(相同的“-cal”目标)启动模拟器时,它永远不会冻结。我可以与之交互,UIAlert 出现,一切正常。

    另外 20% 的时间,它会使其在我的 .feature 文件中更进一步——它会有效地通过“Given”行,可能还有其他行,只要它们不涉及与屏幕。任何敲击或键入命令都会导致它挂起并最终超时,并显示与上述相同的“执行过期”消息。

    Calabash 尝试自动关闭隐私警报。目前,无法选择退出此行为 (there is an open issue in run-loop)。

    我认为正在发生的事情是 UIAlertView 出现在仪器可以控制您的应用程序之前。有关此主题和解决方案的详细讨论可以在Managing Privacy Alerts wiki 页面上找到。

    简单地说,您需要延迟 UIAlertView 的出现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-30
      • 2021-10-09
      • 2017-11-27
      • 1970-01-01
      • 2015-08-26
      • 2020-08-21
      • 2013-01-03
      • 2015-03-17
      相关资源
      最近更新 更多