有没有人尝试过同时运行calabash-ios和calabash android。
假设我已经在 android 中安装了应用程序 A,在 iOS 上安装了应用程序 B,并希望从应用程序 A 发送一些消息并在应用程序 B 中验证。
如果有人这样做了,或者知道如何做到这一点,请告诉我,这将非常有帮助。
问候尼桑特·辛格
我会说这与葫芦无关,因为 2 个进程需要一种方法来同步数据,因此您可能想尝试这样的事情 两个 ruby 进程之间的通信可能/容易吗?
这个答案来自记忆,所以如果其中任何一个不正确,请道歉。如果我能掌握我的旧代码,我会重新检查并在必要时进行更新。
注意:我的经验是使用真实设备执行此操作,因此模拟器可能略有不同。
对于安卓,您可以手动配置驱动程序的多个实例。
@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
或者,可以使用一种方法来定义哪个设备是要在其上运行的默认设备。 然后,任何葫芦命令都将在该设备上运行。 此设置仅适用于安卓设备,不会以任何方式影响 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 设备。 如果将其设置为空字符串,则任何葫芦命令都将发送到 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 并在设备之间切换会很烦人。 我最终也放弃了复杂的跨平台多设备实现,转而使用模拟。 希望这对你有用!