Запуск и общение Calabash android и Calabash iOS вместе
Кто-нибудь когда-нибудь пробовал запускать calabash-ios и calabash android вместе.
Предположим, я установил приложение A на Android и приложение B на iOS и хочу отправить сообщение из приложения A и проверить его в приложении B.
Пожалуйста, дайте мне знать, если кто-то сделал это, или, если у вас есть идеи, как это сделать, это будет очень полезно
С уважением, Нишант Сингх
2 ответа
Я бы сказал, что это не имеет ничего общего с calabash, так как двум процессам нужен способ синхронизации данных, поэтому вы можете попробовать что-то вроде этого. Возможно ли / легко общение между двумя процессами ruby?
Этот ответ из памяти, поэтому извинения, если что-то из этого является неправильным. Если я смогу получить мой старый код, я перепроверим это и обновлю при необходимости.
ПРИМЕЧАНИЕ. Мой опыт заключается в том, чтобы делать это с использованием реальных устройств, поэтому он может немного отличаться для симуляторов.
Для Android вы можете вручную настроить несколько экземпляров драйвера.
@android_app1 = Calabash::Android::Operations::Device.new(self, 'DEVICE_SERIAL1', 123, '/path/to/app', '/path/to/testserver', 456)
@android_app2 = Calabash::Android::Operations::Device.new(self, 'DEVICE_SERIAL2', 124, '/path/to/app', '/path/to/testserver', 457)
После создания экземпляра вы можете запускать методы на определенном устройстве, вызывая его напрямую.
@android_app1.reinstall_apps
@android_app2.reinstall_apps
Или вы можете использовать метод, чтобы определить, какое устройство является устройством по умолчанию, на котором вы хотите, чтобы оно работало. Тогда любые команды calabash будут выполняться на этом устройстве. Этот параметр применим только для Android и никак не влияет на устройства iOS.
Calabash::Android::Operations.set_default_device(@android_app2)
query("* text:'thing'") # Will be run on @android_app2
Calabash::Android::Operations.set_default_device(@android_app1)
query("* text:'some_other_thing'") # Will be run on @android_app1
Из того, что я помню для iOS, вы можете настроить драйвер iOS таким же образом, как и для случая, когда вы используете только одно устройство, которое является iOS, то есть настройку переменных среды. Чтобы использовать устройство iOS, необходимо убедиться, что есть настройка для одной из переменных среды, я думаю, что это DEVICE_ENDPOINT. Если эта переменная среды установлена с помощью ip устройства iOS, то любые команды из calabash будут отправлены на устройство iOS. Если для него задана пустая строка, любые команды calabash будут отправлены на устройство Android.
Предполагая, что у вас все переменные среды iOS настроены правильно, и у вас есть постоянный IPHONE_IP, который содержит IP-адрес вашего устройства iOS.
# Start app on iOS device. Assuming you have set your env vars as per the docs.
@calabash_launcher = Calabash::Cucumber::Launcher.new
@calabash_launcher.relaunch
@calabash_launcher.calabash_notify(self)
ENV['DEVICE_ENDPOINT'] = '' # Clear this env var so that android is targeted
@android_app1 = Calabash::Android::Operations::Device.new(self, 'DEVICE_SERIAL1', 123, '/path/to/app', '/path/to/testserver', 456)
@android_app2 = Calabash::Android::Operations::Device.new(self, 'DEVICE_SERIAL2', 124, '/path/to/app', '/path/to/testserver', 457)
# Do some stuff declaring which device to act on each time.
@android_app1.reinstall_apps # Runs on @android_app1
@android_app2.reinstall_apps # Runs on @android_app2
# Do some stuff by defining which device you want to be used
Calabash::Android::Operations.set_default_device(@android_app2)
query("* text:'thing'") # Will be run on @android_app2
Calabash::Android::Operations.set_default_device(@android_app1)
query("* text:'some_other_thing'") # Will be run on @android_app1
# Now to use the iOS device
ENV['DEVICE_ENDPOINT'] = IPHONE_IP # Set so that calabash knows to use iOS device
query("* text:'thing'") # Will be run on iOS device
ENV['DEVICE_ENDPOINT'] = ''
query("* text:'thing'") # Will be run on @android_app1 as it is still set to be the default android device
Я закончил тем, что создал класс, который занимался этим для меня, так как это раздражает необходимость добавлять и удалять env var и переключаться между устройствами. Я также закончил тем, что отошел от сложной кроссплатформенной реализации нескольких устройств в пользу использования имитаций. Надеюсь, что это работает для вас!