Skip to content

Commit

Permalink
[platform_view]delete previously installed app if needed (#110201)
Browse files Browse the repository at this point in the history
  • Loading branch information
hellohuanlin authored Aug 25, 2022
1 parent 605661c commit 5217f89
Showing 1 changed file with 26 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,29 +26,34 @@ - (void)setUp {
[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 {
Expand Down

0 comments on commit 5217f89

Please sign in to comment.