Fix some iOS UI test flakes

pull/18723/head
Prashant Jaikumar 6 years ago
parent 72a2b65d67
commit 9f2258c2b6
  1. 46
      src/objective-c/manual_tests/GrpcIosTestUITests/GrpcIosTestUITests.m

@ -90,6 +90,15 @@ int const kNumIterations = 1;
XCTAssert([testApp.staticTexts[@"Call failed"] waitForExistenceWithTimeout:kWaitTime]);
}
- (void)expectCallSuccessOrFailed {
NSDate *startTime = [NSDate date];
while (![testApp.staticTexts[@"Call done"] exists] &&
![testApp.staticTexts[@"Call failed"] exists]) {
XCTAssertLessThan([[NSDate date] timeIntervalSinceDate:startTime], kWaitTime);
[NSThread sleepForTimeInterval:1];
}
}
- (void)setAirplaneMode:(BOOL)to {
[settingsApp activate];
XCUIElement *mySwitch = settingsApp.tables.element.cells.switches[@"Airplane Mode"];
@ -118,13 +127,6 @@ int const kNumIterations = 1;
[backButton tap];
}
- (void)typeText:(NSString *)text inApp:(XCUIApplication *)app {
[app typeText:text];
// Wait until all events in run loop have been processed
while (CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.1, true) == kCFRunLoopRunHandledSource)
;
}
- (int)getRandomNumberBetween:(int)min max:(int)max {
return min + arc4random_uniform((max - min + 1));
}
@ -216,24 +218,17 @@ int const kNumIterations = 1;
// Send test app to background
[XCUIDevice.sharedDevice pressButton:XCUIDeviceButtonHome];
// Open safari and goto a URL
XCUIApplication *safari =
[[XCUIApplication alloc] initWithBundleIdentifier:@"com.apple.mobilesafari"];
[safari activate];
// Ensure that safari is running in the foreground
XCTAssert([safari waitForState:XCUIApplicationStateRunningForeground timeout:5]);
// Move cursor to address bar
[safari.buttons[@"URL"] tap];
// Wait for keyboard to appear
[NSThread sleepForTimeInterval:2];
// Enter URL
[self typeText:@"http://maps.google.com" inApp:safari];
// Presses return key
[self typeText:@"\n" inApp:safari];
// Open stocks app
XCUIApplication *stocksApp =
[[XCUIApplication alloc] initWithBundleIdentifier:@"com.apple.stocks"];
[stocksApp activate];
// Ensure that stocks app is running in the foreground
XCTAssert([stocksApp waitForState:XCUIApplicationStateRunningForeground timeout:5]);
// Wait a bit
int sleepTime = [self getRandomNumberBetween:5 max:10];
NSLog(@"Sleeping for %d seconds", sleepTime);
[NSThread sleepForTimeInterval:sleepTime];
[stocksApp terminate];
// Make another unary call
[self doUnaryCall];
@ -256,8 +251,13 @@ int const kNumIterations = 1;
[self setWifi:YES];
[testApp activate];
// We expect the call to have failed because the network flapped
[self expectCallFailed];
[self pressButton:@"Stop streaming call"];
// The call will fail if the stream gets a read error, else the call will succeed.
[self expectCallSuccessOrFailed];
// Make another unary call, it should succeed
[self doUnaryCall];
[self expectCallSuccess];
}
- (void)testConcurrentCalls {

Loading…
Cancel
Save