diff --git a/dev/integration_tests/ios_platform_view_tests/ios/PlatformViewUITests/PlatformViewUITests.m b/dev/integration_tests/ios_platform_view_tests/ios/PlatformViewUITests/PlatformViewUITests.m index 61a26c8f53..d4e2da6ed0 100644 --- a/dev/integration_tests/ios_platform_view_tests/ios/PlatformViewUITests/PlatformViewUITests.m +++ b/dev/integration_tests/ios_platform_view_tests/ios/PlatformViewUITests/PlatformViewUITests.m @@ -26,29 +26,34 @@ static const CGFloat kStandardTimeOut = 60.0; [super setUp]; self.continueAfterFailure = NO; - // Retry launching the app if it fails to launch. - // This is trying to fix a "failed to terminate" failure, which is likely a bug in Xcode. - // The solution is based on https://stackoverflow.com/questions/41872848/xctests-failing-to-launch-app-in-simulator-intermittently - int remainingLaunchCount = 10; - while (true) { - self.app = [[XCUIApplication alloc] init]; - [self.app launch]; - remainingLaunchCount -= 1; + // Delete the previously installed app if needed before running. + // This is to address "Failed to terminate" failure. + // The solution is based on https://stackoverflow.com/questions/50016018/uitest-failed-to-terminate-com-test-abc3708-after-60-0s-state-is-still-runnin + XCUIApplication *springboard = [[XCUIApplication alloc] initWithBundleIdentifier:@"com.apple.springboard"]; + [springboard activate]; + XCUIElement *appIcon = springboard.icons[@"ios_platform_view_tests"]; + + if ([appIcon waitForExistenceWithTimeout:kStandardTimeOut]) { + NSLog(@"Deleting previously installed app."); + + // Make icons wiggle + [appIcon pressForDuration:3]; + + // Tap the "x" button + [appIcon.buttons[@"DeleteButton"] tap]; + // Tap the delete confirmation + [springboard.alerts.buttons[@"Delete App"] tap]; + // Tap the second delete confirmation + [springboard.alerts.buttons[@"Delete"] tap]; + // Press home button to stop wiggling + [XCUIDevice.sharedDevice pressButton:XCUIDeviceButtonHome]; [NSThread sleepForTimeInterval:3]; - if (self.app.exists) { - // success launch - break; - } - - if (remainingLaunchCount > 0) { - NSLog(@"Retry launch with remaining launch count %d", remainingLaunchCount); - [self.app terminate]; - [NSThread sleepForTimeInterval:3]; - continue; - } - - NSLog(@"Failed to launch"); + } else { + NSLog(@"No previously installed app found."); } + + self.app = [[XCUIApplication alloc] init]; + [self.app launch]; } - (void)tearDown {