Почему Calabash не может взаимодействовать с моим iOS-приложением в симуляторе?

Я нахожусь в процессе интеграции Calabash в большой проект. У меня есть Calabash, работающий в тестовом приложении, поэтому я знаю, что моя установка и среда настроены правильно. Я использую метки специальных возможностей и файлы .feature, чтобы нажимать кнопки и вводить текст в поля. Это прекрасно работает.

Однако мой «настоящий» проект намного больше и сложнее. Несмотря на то, что конфигурация идентична моему тестовому приложению (см. статистику ниже), когда я запускаю простой файл .feature в реальном приложении, я получаю неустойчивые результаты: примерно в 80% случаев оно зависает, даже не пройдя " Given" в файле .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" => "[email protected]: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" => ""
}

person todd412    schedule 28.10.2014    source источник
comment
Возьмите spindump, сфокусированный на процессе вашего приложения, чтобы увидеть, чем занимаются его потоки.   -  person Jeremy Huddleston Sequoia    schedule 29.10.2014
comment
Нужна дополнительная информация о том, какую строку кода вы используете для запуска тестов? Вы создаете приложение с помощью команды сборки? или использовать сборку из xcode? У вас есть несколько симуляторов? Если да, то вы выбираете один? Имя вашего приложения содержит пробелы посередине?   -  person Chathura Palihakkara    schedule 29.10.2014
comment
Я знаю, что этот пост устарел, но если ваше приложение слишком много регистрируется в консоли xcode, оно зависнет. Это ошибка, представленная Apple. Вы можете прочитать об этом здесь: группы Google.   -  person Sophy Swicz    schedule 20.01.2015


Ответы (3)


Вы пытались обновить калебас до .13? а вы добавили фреймворк CFNetwork?

а вы добавили -force_load "$(SRCROOT)/calabash.framework/calabash" -lstdc++?

извините за отсутствие информации, это все, что я мог придумать? если вы решили проблему. не могли бы вы закрыть его?

person s5v    schedule 20.04.2015

Можете ли вы успешно запустить симулятор с помощью консоли 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
person Chathura Palihakkara    schedule 29.10.2014
comment
Переменная SDK_VERSION устарела, начиная с Xcode 5.1. calabashapi.xamarin.com/ios/ - person jmoody; 01.05.2015
comment
И такое использование PLATFORM нестандартно. Обычно переменная PLATFORM используется при кроссплатформенном тестировании и может иметь значение ios или android. - person jmoody; 01.05.2015

Также есть UIAlertView, который должен появиться, но никогда не появляется. Обратите внимание, что когда я запускаю симулятор из XCode (та же цель -cal), он никогда не зависает. Я могу взаимодействовать с ним, появляется UIAlert, все работает нормально.

В остальных 20% случаев он продвинется немного глубже в мой файл .feature, чем это, — он будет эффективно передавать заданную строку и, возможно, другие, если они не связаны с взаимодействием с экраном. Любое касание или ввод команд приведет к зависанию и, в конечном итоге, к истечению времени с тем же сообщением об истечении срока выполнения, что и выше.

Calabash пытается автоматически отклонить предупреждения о конфиденциальности. На данный момент невозможно отказаться от такого поведения (существует нерешенная проблема -петля).

Я думаю, что происходит то, что UIAlertView появляется прежде, чем инструменты смогут взять под контроль ваше приложение. Подробное обсуждение этой темы и решения можно найти на Управление оповещениями о конфиденциальности.

Вкратце, вам нужно отсрочить появление UIAlertView.

person jmoody    schedule 01.05.2015