forked from facebookarchive/WebDriverAgent
-
Notifications
You must be signed in to change notification settings - Fork 0
/
AVKeyboard.m
72 lines (61 loc) · 1.84 KB
/
AVKeyboard.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/**
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
#import "AVKeyboard.h"
#import "FBApplication.h"
#import "FBXCTestDaemonsProxy.h"
#import "FBErrorBuilder.h"
#import "FBRunLoopSpinner.h"
#import "FBMacros.h"
#import "XCElementSnapshot.h"
#import "XCUIElement+FBUtilities.h"
#import "XCTestDriver.h"
static const NSUInteger AVTypingFrequency = 5;
@implementation AVKeyboard
+ (BOOL)slowTypeText:(NSString *)text error:(NSError **)error
{
if (![AVKeyboard waitUntilVisibleWithError:error]) {
return NO;
}
__block BOOL didSucceed = NO;
__block NSError *innerError;
[FBRunLoopSpinner spinUntilCompletion:^(void(^completion)(void)){
[[FBXCTestDaemonsProxy testRunnerProxy] _XCT_sendString:text maximumFrequency:AVTypingFrequency completion:^(NSError *typingError){
didSucceed = (typingError == nil);
innerError = typingError;
completion();
}];
}];
if (error) {
*error = innerError;
}
return didSucceed;
}
+ (BOOL)waitUntilVisibleWithError:(NSError **)error
{
XCUIElement *keyboard =
[[[[FBRunLoopSpinner new]
timeout:5]
timeoutErrorMessage:@"Keyboard is not present"]
spinUntilNotNil:^id{
XCUIElement *foundKeyboard = [[FBApplication fb_activeApplication].query descendantsMatchingType:XCUIElementTypeKeyboard].element;
return (foundKeyboard.exists ? foundKeyboard : nil);
}
error:error];
if (!keyboard) {
return NO;
}
if (![keyboard fb_waitUntilFrameIsStable]) {
return
[[[FBErrorBuilder builder]
withDescription:@"Timeout waiting for keybord to stop animating"]
buildError:error];
}
return YES;
}
@end