为什么Calabash无法在模拟器中与我的iOS应用互动?

时间:2014-10-28 16:35:38

标签: ios ios-simulator calabash calabash-ios

我正在将Calabash整合到一个大型项目中。我让Calabash在测试应用程序中工作,所以我知道我的安装和环境设置正确。我正在使用辅助功能标签和.feature文件来点击按钮并在字段中键入文本。它很棒。

然而,我的真实"项目更大,更复杂。即使配置与我的测试应用程序相同(参见下面的统计数据),当我在真实应用程序上运行一个简单的.feature文件时,我得到了不稳定的结果:大约80%的时间,它甚至在它通过&之前挂起#34;给定" .feature文件的行,并最终超时显示此消息:

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

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

另外20%的时间,它会使我的.feature文件更进一步 - 它将有效地通过"给定" ,只要它们不涉及与屏幕交互。任何点击或键入命令都会导致它挂起并最终超时,执行过期"执行过期"消息如上。

经过大量调查后,我已经消除了此应用程序的环境/配置与我的测试应用程序之间的任何可能区别,并确定我的应用程序必须有一些关于Calabash真的不喜欢的东西!不幸的是,我对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" => ""
}

3 个答案:

答案 0 :(得分:1)

您是否尝试过将葫芦更新为.13?你有没有添加CFNetwork框架?

并且你添加了-force_load“$(SRCROOT)/calabash.framework/calabash”-lstdc ++?

抱歉缺乏信息,这是我能想到的全部内容吗?如果你已经解决了这个问题。你能关闭吗?

答案 1 :(得分:0)

您可以使用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

答案 2 :(得分:0)

  

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

     

另外20%的时间,它会使我的.feature文件更进一步 - 它将有效地通过&#34;给定&#34;只要它们不涉及与屏幕交互,就可以使用其他行。任何点击或键入命令都会导致它挂起并最终超时,执行过期&#34;执行过期&#34;消息如上。

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

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

简而言之,您需要延迟UIAlertView的外观。