Support idb/physical devices for navigation
Summary: idb has a command for doing the same now. Reviewed By: timur-valiev Differential Revision: D30277192 fbshipit-source-id: eb46cdc7a7218077a7da90f6182d5f17bfcc758a
This commit is contained in:
committed by
Facebook GitHub Bot
parent
dd47d08444
commit
87e5e18c46
@@ -69,8 +69,10 @@ export default class IOSDevice extends BaseDevice {
|
||||
}
|
||||
|
||||
navigateToLocation(location: string) {
|
||||
const command = `xcrun simctl openurl ${this.serial} "${location}"`;
|
||||
exec(command);
|
||||
return this.iOSBridge.navigate(this.serial, location).catch((err) => {
|
||||
console.warn(`Failed to navigate to location ${location}:`, err);
|
||||
return err;
|
||||
});
|
||||
}
|
||||
|
||||
startLogging() {
|
||||
|
||||
@@ -27,6 +27,7 @@ export interface IOSBridge {
|
||||
deviceType: DeviceType,
|
||||
) => child_process.ChildProcessWithoutNullStreams;
|
||||
screenshot: (serial: string) => Promise<Buffer>;
|
||||
navigate: (serial: string, location: string) => Promise<void>;
|
||||
}
|
||||
|
||||
async function isAvailable(idbPath: string): Promise<boolean> {
|
||||
@@ -119,6 +120,20 @@ export async function idbScreenshot(serial: string): Promise<Buffer> {
|
||||
return runScreenshotCommand(command, imagePath);
|
||||
}
|
||||
|
||||
export async function xcrunNavigate(
|
||||
serial: string,
|
||||
location: string,
|
||||
): Promise<void> {
|
||||
exec(`xcrun simctl io ${serial} launch url "${location}"`);
|
||||
}
|
||||
|
||||
export async function idbNavigate(
|
||||
serial: string,
|
||||
location: string,
|
||||
): Promise<void> {
|
||||
exec(`idb open --udid ${serial} "${location}"`);
|
||||
}
|
||||
|
||||
export async function makeIOSBridge(
|
||||
idbPath: string,
|
||||
isXcodeDetected: boolean,
|
||||
@@ -129,6 +144,7 @@ export async function makeIOSBridge(
|
||||
return {
|
||||
startLogListener: idbStartLogListener.bind(null, idbPath),
|
||||
screenshot: idbScreenshot,
|
||||
navigate: idbNavigate,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -137,6 +153,7 @@ export async function makeIOSBridge(
|
||||
return {
|
||||
startLogListener: xcrunStartLogListener,
|
||||
screenshot: xcrunScreenshot,
|
||||
navigate: xcrunNavigate,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -116,3 +116,21 @@ test.unix('uses idb to take screenshots when available', async () => {
|
||||
'idb screenshot --udid deadbeef /temp/00000000-0000-0000-0000-000000000000.png',
|
||||
);
|
||||
});
|
||||
|
||||
test('uses xcrun to navigate with no idb when xcode is detected', async () => {
|
||||
const ib = await makeIOSBridge('', true);
|
||||
|
||||
ib.navigate('deadbeef', 'fb://dummy');
|
||||
|
||||
expect(exec).toHaveBeenCalledWith(
|
||||
'xcrun simctl io deadbeef launch url "fb://dummy"',
|
||||
);
|
||||
});
|
||||
|
||||
test('uses idb to navigate when available', async () => {
|
||||
const ib = await makeIOSBridge('/usr/local/bin/idb', true, async (_) => true);
|
||||
|
||||
ib.navigate('deadbeef', 'fb://dummy');
|
||||
|
||||
expect(exec).toHaveBeenCalledWith('idb open --udid deadbeef "fb://dummy"');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user