diff --git a/dev/devicelab/bin/tasks/native_platform_view_ui_tests_ios.dart b/dev/devicelab/bin/tasks/native_platform_view_ui_tests_ios.dart index 8c4602c86867c..48b0325b1069a 100644 --- a/dev/devicelab/bin/tasks/native_platform_view_ui_tests_ios.dart +++ b/dev/devicelab/bin/tasks/native_platform_view_ui_tests_ios.dart @@ -15,6 +15,17 @@ Future main() async { final String projectDirectory = '${flutterDirectory.path}/dev/integration_tests/ios_platform_view_tests'; await inDirectory(projectDirectory, () async { + + // To address "Failed to terminate" failure. + section('Uninstall previously installed app'); + + await flutter( + 'install', + options: [ + '--uninstall-only', + ], + ); + section('Build clean'); await flutter('clean'); 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 63ea56625cd25..8663abc234d44 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,45 +26,6 @@ - (void)setUp { [super setUp]; self.continueAfterFailure = NO; - // 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."); - - // It's possible that app icon is not hittable yet. - NSPredicate *hittable = [NSPredicate predicateWithFormat:@"exists == YES AND hittable == YES"]; - [self expectationForPredicate:hittable evaluatedWithObject:appIcon handler:nil]; - [self waitForExpectationsWithTimeout:kStandardTimeOut handler:nil]; - - // Pressing for 2 seconds will bring up context menu. - // Pressing for 3 seconds will dismiss the context menu and make icons wiggle. - [appIcon pressForDuration:2]; - - // The "Remove App" button in context menu. - XCUIElement *contextMenuRemoveButton = springboard.buttons[@"Remove App"]; - XCTAssert([contextMenuRemoveButton waitForExistenceWithTimeout:kStandardTimeOut], @"The context menu remove app button must appear."); - [contextMenuRemoveButton tap]; - - // Tap the delete confirmation - XCUIElement *deleteConfirmationButton = springboard.alerts.buttons[@"Delete App"]; - XCTAssert([deleteConfirmationButton waitForExistenceWithTimeout:kStandardTimeOut], @"The first delete confirmation button must appear."); - [deleteConfirmationButton tap]; - - // Tap the second delete confirmation - XCUIElement *secondDeleteConfirmationButton = springboard.alerts.buttons[@"Delete"]; - XCTAssert([secondDeleteConfirmationButton waitForExistenceWithTimeout:kStandardTimeOut], @"The second delete confirmation button must appear."); - [secondDeleteConfirmationButton tap]; - - [NSThread sleepForTimeInterval:3]; - } else { - NSLog(@"No previously installed app found."); - } - self.app = [[XCUIApplication alloc] init]; [self.app launch]; }