运行和通信Calabash android和calabash iOS

时间:2016-02-01 12:23:44

标签: calabash calabash-ios calabash-android

有没有人尝试过一起运行calabash-ios和calabash android。

假设我在iOS上安装了应用程序A,在iOS上安装了应用程序,并希望从应用程序A发送一些消息并在应用程序B中验证。

如果有人这样做了,或者知道如何做到这一点,请告诉我这将非常有用。

此致 Nishant Singh

2 个答案:

答案 0 :(得分:0)

这个答案来自记忆,如果有任何不正确的话,请道歉。如果我能掌握旧代码,我会重新检查并在必要时进行更新。

注意:我的经验是使用真实设备进行此操作,因此模拟器可能略有不同。

对于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。如果使用iOS设备的IP设置此环境变量,则来自calabash的任何命令都将发送到iOS设备。如果它被设置为空字符串,那么任何calabash命令都将被发送到Android设备。

假设您已正确配置iOS环境变量,并且您拥有包含iOS设备IP的常量IPHONE_IP。

# 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,并在设备之间切换。我也最终摆脱了复杂的跨平台多设备实现,转而使用模拟。希望这对你有用!

答案 1 :(得分:0)

我想说这与calabash无关,因为2个进程需要一种方法来同步数据,因此你可能想尝试这样的事情Is communication between two ruby processes possible/easy?