appium-webdriveragent 8.12.2 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/PrivateHeaders/XCTest/XCTestManager_ManagerInterface-Protocol.h +1 -0
- package/WebDriverAgent.xcodeproj/project.pbxproj +12 -0
- package/WebDriverAgentLib/Categories/FBXCElementSnapshotWrapper+Helpers.h +4 -9
- package/WebDriverAgentLib/Categories/FBXCElementSnapshotWrapper+Helpers.m +13 -25
- package/WebDriverAgentLib/Categories/XCUIApplication+FBAlert.m +2 -2
- package/WebDriverAgentLib/Categories/XCUIApplication+FBHelpers.m +4 -20
- package/WebDriverAgentLib/Categories/XCUIElement+FBAccessibility.m +15 -4
- package/WebDriverAgentLib/Categories/XCUIElement+FBCaching.h +0 -3
- package/WebDriverAgentLib/Categories/XCUIElement+FBCaching.m +1 -22
- package/WebDriverAgentLib/Categories/XCUIElement+FBFind.m +1 -1
- package/WebDriverAgentLib/Categories/XCUIElement+FBIsVisible.m +28 -173
- package/WebDriverAgentLib/Categories/XCUIElement+FBPickerWheel.m +1 -3
- package/WebDriverAgentLib/Categories/XCUIElement+FBScrolling.m +33 -30
- package/WebDriverAgentLib/Categories/XCUIElement+FBTyping.m +4 -8
- package/WebDriverAgentLib/Categories/XCUIElement+FBUID.m +2 -2
- package/WebDriverAgentLib/Categories/XCUIElement+FBUtilities.h +3 -36
- package/WebDriverAgentLib/Categories/XCUIElement+FBUtilities.m +10 -68
- package/WebDriverAgentLib/Categories/XCUIElement+FBVisibleFrame.h +36 -0
- package/WebDriverAgentLib/Categories/XCUIElement+FBVisibleFrame.m +53 -0
- package/WebDriverAgentLib/Categories/XCUIElement+FBWebDriverAttributes.m +7 -20
- package/WebDriverAgentLib/Commands/FBCustomCommands.m +2 -1
- package/WebDriverAgentLib/Commands/FBElementCommands.m +25 -47
- package/WebDriverAgentLib/Commands/FBFindElementCommands.m +10 -9
- package/WebDriverAgentLib/Commands/FBSessionCommands.m +0 -8
- package/WebDriverAgentLib/FBAlert.m +6 -5
- package/WebDriverAgentLib/Info.plist +2 -2
- package/WebDriverAgentLib/Routing/FBElementCache.h +4 -10
- package/WebDriverAgentLib/Routing/FBElementCache.m +4 -33
- package/WebDriverAgentLib/Routing/FBResponsePayload.m +1 -7
- package/WebDriverAgentLib/Utilities/FBConfiguration.h +0 -8
- package/WebDriverAgentLib/Utilities/FBConfiguration.m +0 -12
- package/WebDriverAgentLib/Utilities/FBSettings.h +0 -3
- package/WebDriverAgentLib/Utilities/FBSettings.m +0 -2
- package/WebDriverAgentLib/Utilities/FBTVNavigationTracker.m +1 -3
- package/WebDriverAgentLib/Utilities/FBW3CActionsSynthesizer.m +1 -1
- package/WebDriverAgentLib/Utilities/FBXCAXClientProxy.h +4 -3
- package/WebDriverAgentLib/Utilities/FBXCAXClientProxy.m +7 -11
- package/WebDriverAgentLib/Utilities/FBXCodeCompatibility.h +3 -1
- package/WebDriverAgentLib/Utilities/FBXCodeCompatibility.m +2 -2
- package/WebDriverAgentLib/Utilities/FBXPath.m +1 -4
- package/WebDriverAgentLib/Utilities/XCTestPrivateSymbols.h +3 -0
- package/WebDriverAgentLib/Utilities/XCTestPrivateSymbols.m +1 -0
- package/WebDriverAgentTests/IntegrationTests/FBElementAttributeTests.m +2 -1
- package/WebDriverAgentTests/IntegrationTests/FBElementSwipingTests.m +1 -1
- package/WebDriverAgentTests/IntegrationTests/FBW3CTouchActionsIntegrationTests.m +1 -1
- package/WebDriverAgentTests/IntegrationTests/FBXPathIntegrationTests.m +2 -2
- package/WebDriverAgentTests/IntegrationTests/XCElementSnapshotHelperTests.m +21 -10
- package/WebDriverAgentTests/IntegrationTests/XCElementSnapshotHitPointTests.m +1 -1
- package/WebDriverAgentTests/IntegrationTests/XCUIElementHelperIntegrationTests.m +5 -3
- package/WebDriverAgentTests/UnitTests/Doubles/XCElementSnapshotDouble.m +10 -0
- package/WebDriverAgentTests/UnitTests/Doubles/XCUIElementDouble.h +1 -2
- package/WebDriverAgentTests/UnitTests/Doubles/XCUIElementDouble.m +1 -1
- package/WebDriverAgentTests/UnitTests/FBElementCacheTests.m +0 -2
- package/WebDriverAgentTests/UnitTests_tvOS/Doubles/XCUIElementDouble.h +0 -1
- package/package.json +1 -1
|
@@ -18,6 +18,7 @@ NSNumber *FB_XCAXAIsVisibleAttribute;
|
|
|
18
18
|
NSString *FB_XCAXAIsVisibleAttributeName = @"XC_kAXXCAttributeIsVisible";
|
|
19
19
|
NSNumber *FB_XCAXAIsElementAttribute;
|
|
20
20
|
NSString *FB_XCAXAIsElementAttributeName = @"XC_kAXXCAttributeIsElement";
|
|
21
|
+
NSString *FB_XCAXAVisibleFrameAttributeName = @"XC_kAXXCAttributeVisibleFrame";
|
|
21
22
|
|
|
22
23
|
void (*XCSetDebugLogger)(id <XCDebugLogDelegate>);
|
|
23
24
|
id<XCDebugLogDelegate> (*XCDebugLogger)(void);
|
|
@@ -71,6 +71,7 @@
|
|
|
71
71
|
XCTAssertEqualObjects(element.wdLabel, @"Button");
|
|
72
72
|
XCTAssertNil(element.wdValue);
|
|
73
73
|
XCTAssertFalse(element.wdSelected);
|
|
74
|
+
XCTAssertTrue(element.fb_isVisible);
|
|
74
75
|
[element tap];
|
|
75
76
|
XCTAssertTrue(element.wdValue.boolValue);
|
|
76
77
|
XCTAssertTrue(element.wdSelected);
|
|
@@ -133,7 +134,7 @@
|
|
|
133
134
|
XCTAssertEqualObjects(element.wdType, @"XCUIElementTypeSlider");
|
|
134
135
|
XCTAssertNil(element.wdName);
|
|
135
136
|
XCTAssertNil(element.wdLabel);
|
|
136
|
-
|
|
137
|
+
XCTAssertTrue([element.wdValue containsString:@"50"]);
|
|
137
138
|
}
|
|
138
139
|
|
|
139
140
|
- (void)testActivityIndicatorAttributes
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
}
|
|
73
73
|
[self.scrollView fb_swipeWithDirection:@"up" velocity:@2500];
|
|
74
74
|
FBAssertInvisibleCell(@"0");
|
|
75
|
-
[self.scrollView fb_swipeWithDirection:@"down" velocity:@
|
|
75
|
+
[self.scrollView fb_swipeWithDirection:@"down" velocity:@3000];
|
|
76
76
|
FBAssertVisibleCell(@"0");
|
|
77
77
|
}
|
|
78
78
|
|
|
@@ -424,7 +424,7 @@
|
|
|
424
424
|
timeout:2.0]
|
|
425
425
|
timeoutErrorMessage:@"Picker wheel value has not been changed after 2 seconds timeout"]
|
|
426
426
|
spinUntilTrue:^BOOL{
|
|
427
|
-
|
|
427
|
+
return ![[self.pickerWheel fb_takeSnapshot:NO].value isEqualToString:previousValue];
|
|
428
428
|
}
|
|
429
429
|
error:&error]);
|
|
430
430
|
XCTAssertNil(error);
|
|
@@ -43,9 +43,9 @@
|
|
|
43
43
|
- (id<FBXCElementSnapshot>)destinationSnapshot
|
|
44
44
|
{
|
|
45
45
|
XCUIElement *matchingElement = self.testedView.buttons.allElementsBoundByIndex.firstObject;
|
|
46
|
-
FBAssertWaitTillBecomesTrue(nil != matchingElement
|
|
46
|
+
FBAssertWaitTillBecomesTrue(nil != [matchingElement fb_takeSnapshot:YES]);
|
|
47
47
|
|
|
48
|
-
id<FBXCElementSnapshot> snapshot = matchingElement.
|
|
48
|
+
id<FBXCElementSnapshot> snapshot = matchingElement.lastSnapshot;
|
|
49
49
|
// Over iOS13, snapshot returns a child.
|
|
50
50
|
// The purpose of here is return a single element to replace children with an empty array for testing.
|
|
51
51
|
snapshot.children = @[];
|
|
@@ -44,7 +44,8 @@
|
|
|
44
44
|
@"Deadlock app",
|
|
45
45
|
@"Touch",
|
|
46
46
|
]];
|
|
47
|
-
NSArray<id<FBXCElementSnapshot>> *matchingSnapshots = [[FBXCElementSnapshotWrapper ensureWrapped:
|
|
47
|
+
NSArray<id<FBXCElementSnapshot>> *matchingSnapshots = [[FBXCElementSnapshotWrapper ensureWrapped:
|
|
48
|
+
[self.testedView fb_takeSnapshot:YES]]
|
|
48
49
|
fb_descendantsMatchingType:XCUIElementTypeButton];
|
|
49
50
|
XCTAssertEqual(matchingSnapshots.count, expectedLabels.count);
|
|
50
51
|
NSArray<NSString *> *labels = [matchingSnapshots valueForKeyPath:@"@distinctUnionOfObjects.label"];
|
|
@@ -59,7 +60,8 @@
|
|
|
59
60
|
{
|
|
60
61
|
XCUIElement *button = self.testedApplication.buttons[@"Alerts"];
|
|
61
62
|
FBAssertWaitTillBecomesTrue(button.exists);
|
|
62
|
-
id<FBXCElementSnapshot> windowSnapshot = [[FBXCElementSnapshotWrapper ensureWrapped:
|
|
63
|
+
id<FBXCElementSnapshot> windowSnapshot = [[FBXCElementSnapshotWrapper ensureWrapped:
|
|
64
|
+
[self.testedView fb_takeSnapshot:YES]]
|
|
63
65
|
fb_parentMatchingType:XCUIElementTypeWindow];
|
|
64
66
|
XCTAssertNotNil(windowSnapshot);
|
|
65
67
|
XCTAssertEqual(windowSnapshot.elementType, XCUIElementTypeWindow);
|
|
@@ -86,7 +88,8 @@
|
|
|
86
88
|
{
|
|
87
89
|
XCUIElement *todayPickerWheel = self.testedApplication.pickerWheels[@"Today"];
|
|
88
90
|
FBAssertWaitTillBecomesTrue(todayPickerWheel.exists);
|
|
89
|
-
id<FBXCElementSnapshot> datePicker = [[FBXCElementSnapshotWrapper ensureWrapped:
|
|
91
|
+
id<FBXCElementSnapshot> datePicker = [[FBXCElementSnapshotWrapper ensureWrapped:
|
|
92
|
+
[todayPickerWheel fb_takeSnapshot:YES]]
|
|
90
93
|
fb_parentMatchingOneOfTypes:@[@(XCUIElementTypeDatePicker), @(XCUIElementTypeWindow)]];
|
|
91
94
|
XCTAssertNotNil(datePicker);
|
|
92
95
|
XCTAssertEqual(datePicker.elementType, XCUIElementTypeDatePicker);
|
|
@@ -96,7 +99,8 @@
|
|
|
96
99
|
{
|
|
97
100
|
XCUIElement *todayPickerWheel = self.testedApplication.pickerWheels[@"Today"];
|
|
98
101
|
FBAssertWaitTillBecomesTrue(todayPickerWheel.exists);
|
|
99
|
-
id<FBXCElementSnapshot> otherSnapshot =[[FBXCElementSnapshotWrapper ensureWrapped:
|
|
102
|
+
id<FBXCElementSnapshot> otherSnapshot =[[FBXCElementSnapshotWrapper ensureWrapped:
|
|
103
|
+
[todayPickerWheel fb_takeSnapshot:YES]]
|
|
100
104
|
fb_parentMatchingOneOfTypes:@[@(XCUIElementTypeAny)]];
|
|
101
105
|
XCTAssertNotNil(otherSnapshot);
|
|
102
106
|
}
|
|
@@ -105,7 +109,8 @@
|
|
|
105
109
|
{
|
|
106
110
|
XCUIElement *todayPickerWheel = self.testedApplication.pickerWheels[@"Today"];
|
|
107
111
|
FBAssertWaitTillBecomesTrue(todayPickerWheel.exists);
|
|
108
|
-
id<FBXCElementSnapshot> otherSnapshot = [[FBXCElementSnapshotWrapper ensureWrapped:
|
|
112
|
+
id<FBXCElementSnapshot> otherSnapshot = [[FBXCElementSnapshotWrapper ensureWrapped:
|
|
113
|
+
[todayPickerWheel fb_takeSnapshot:YES]]
|
|
109
114
|
fb_parentMatchingOneOfTypes:@[@(XCUIElementTypeTab), @(XCUIElementTypeLink)]];
|
|
110
115
|
XCTAssertNil(otherSnapshot);
|
|
111
116
|
}
|
|
@@ -136,8 +141,9 @@
|
|
|
136
141
|
@(XCUIElementTypeCollectionView),
|
|
137
142
|
@(XCUIElementTypeTable),
|
|
138
143
|
];
|
|
139
|
-
id<FBXCElementSnapshot> scrollView = [[FBXCElementSnapshotWrapper ensureWrapped:
|
|
140
|
-
|
|
144
|
+
id<FBXCElementSnapshot> scrollView = [[FBXCElementSnapshotWrapper ensureWrapped:
|
|
145
|
+
[threeStaticText fb_takeSnapshot:YES]]
|
|
146
|
+
fb_parentMatchingOneOfTypes:acceptedParents
|
|
141
147
|
filter:^BOOL(id<FBXCElementSnapshot> snapshot) {
|
|
142
148
|
return [[FBXCElementSnapshotWrapper ensureWrapped:snapshot] isWDVisible];
|
|
143
149
|
}];
|
|
@@ -153,7 +159,8 @@
|
|
|
153
159
|
@(XCUIElementTypeCollectionView),
|
|
154
160
|
@(XCUIElementTypeTable),
|
|
155
161
|
];
|
|
156
|
-
id<FBXCElementSnapshot> scrollView = [[FBXCElementSnapshotWrapper ensureWrapped:
|
|
162
|
+
id<FBXCElementSnapshot> scrollView = [[FBXCElementSnapshotWrapper ensureWrapped:
|
|
163
|
+
[threeStaticText fb_takeSnapshot:YES]]
|
|
157
164
|
fb_parentMatchingOneOfTypes:acceptedParents
|
|
158
165
|
filter:^BOOL(id<FBXCElementSnapshot> snapshot) {
|
|
159
166
|
return NO;
|
|
@@ -165,7 +172,9 @@
|
|
|
165
172
|
{
|
|
166
173
|
XCUIElement *scrollView = self.testedApplication.scrollViews[@"scrollView"];
|
|
167
174
|
FBAssertWaitTillBecomesTrue(self.testedApplication.staticTexts[@"3"].fb_isVisible);
|
|
168
|
-
NSArray *cells = [[FBXCElementSnapshotWrapper ensureWrapped:
|
|
175
|
+
NSArray *cells = [[FBXCElementSnapshotWrapper ensureWrapped:
|
|
176
|
+
[scrollView fb_takeSnapshot:YES]]
|
|
177
|
+
fb_descendantsCellSnapshots];
|
|
169
178
|
XCTAssertGreaterThanOrEqual(cells.count, 10);
|
|
170
179
|
id<FBXCElementSnapshot> element = cells.firstObject;
|
|
171
180
|
XCTAssertEqualObjects(element.label, @"0");
|
|
@@ -192,7 +201,9 @@
|
|
|
192
201
|
{
|
|
193
202
|
FBAssertWaitTillBecomesTrue(self.testedApplication.staticTexts[@"3"].fb_isVisible);
|
|
194
203
|
XCUIElement *threeStaticText = self.testedApplication.staticTexts[@"3"];
|
|
195
|
-
id<FBXCElementSnapshot> xcuiElementCell = [[FBXCElementSnapshotWrapper ensureWrapped:
|
|
204
|
+
id<FBXCElementSnapshot> xcuiElementCell = [[FBXCElementSnapshotWrapper ensureWrapped:
|
|
205
|
+
[threeStaticText fb_takeSnapshot:YES]]
|
|
206
|
+
fb_parentCellSnapshot];
|
|
196
207
|
XCTAssertEqual(xcuiElementCell.elementType, 75);
|
|
197
208
|
}
|
|
198
209
|
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
[self launchApplication];
|
|
24
24
|
[self goToAttributesPage];
|
|
25
25
|
XCUIElement *dstBtn = self.testedApplication.buttons[@"not_accessible"];
|
|
26
|
-
CGPoint hitPoint = [FBXCElementSnapshotWrapper ensureWrapped:dstBtn
|
|
26
|
+
CGPoint hitPoint = [FBXCElementSnapshotWrapper ensureWrapped:[dstBtn fb_takeSnapshot:NO]].fb_hitPoint.CGPointValue;
|
|
27
27
|
XCTAssertTrue(hitPoint.x > 0 && hitPoint.y > 0);
|
|
28
28
|
}
|
|
29
29
|
|
|
@@ -41,9 +41,11 @@
|
|
|
41
41
|
[allElements addObjectsFromArray:windows];
|
|
42
42
|
|
|
43
43
|
NSMutableArray<id<FBXCElementSnapshot>> *buttonSnapshots = [NSMutableArray array];
|
|
44
|
-
[buttonSnapshots addObject:[buttons.firstObject fb_takeSnapshot]];
|
|
45
|
-
|
|
46
|
-
NSArray<XCUIElement *> *result = [self.testedApplication fb_filterDescendantsWithSnapshots:buttonSnapshots
|
|
44
|
+
[buttonSnapshots addObject:[buttons.firstObject fb_takeSnapshot:YES]];
|
|
45
|
+
|
|
46
|
+
NSArray<XCUIElement *> *result = [self.testedApplication fb_filterDescendantsWithSnapshots:buttonSnapshots
|
|
47
|
+
selfUID:nil
|
|
48
|
+
onlyChildren:NO];
|
|
47
49
|
XCTAssertEqual(1, result.count);
|
|
48
50
|
XCTAssertEqual([result.firstObject elementType], XCUIElementTypeButton);
|
|
49
51
|
}
|
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
@property (nonatomic, readwrite, nullable) id lastSnapshot;
|
|
20
20
|
@property (nonatomic, assign) BOOL fb_isObstructedByAlert;
|
|
21
21
|
@property (nonatomic, readonly, nonnull) NSString *fb_cacheId;
|
|
22
|
-
@property (nonatomic, nullable) NSNumber *fb_isResolvedFromCache;
|
|
23
22
|
@property (nonatomic, readwrite, copy, nonnull) NSDictionary *wdRect;
|
|
24
23
|
@property (nonatomic, readwrite, assign) CGRect wdFrame;
|
|
25
24
|
@property (nonatomic, readwrite, copy, nonnull) NSString *wdUID;
|
|
@@ -39,7 +38,7 @@
|
|
|
39
38
|
@property (nonatomic, readwrite, getter=isWDAccessibilityContainer) BOOL wdAccessibilityContainer;
|
|
40
39
|
|
|
41
40
|
- (void)resolve;
|
|
42
|
-
- (id _Nonnull)fb_takeSnapshot;
|
|
41
|
+
- (id _Nonnull)fb_takeSnapshot:(BOOL)inDepth;
|
|
43
42
|
- (nullable id)query;
|
|
44
43
|
|
|
45
44
|
// Checks
|
|
@@ -43,10 +43,8 @@
|
|
|
43
43
|
XCUIElement *element = (XCUIElement *)XCUIElementDouble.new;
|
|
44
44
|
NSString *uuid = [self.cache storeElement:element];
|
|
45
45
|
XCTAssertNotNil(uuid, @"Stored index should be higher than 0");
|
|
46
|
-
XCTAssertFalse(element.fb_isResolvedFromCache.boolValue);
|
|
47
46
|
XCUIElement *cachedElement = [self.cache elementForUUID:uuid];
|
|
48
47
|
XCTAssertEqual(element, cachedElement);
|
|
49
|
-
XCTAssertTrue(element.fb_isResolvedFromCache.boolValue);
|
|
50
48
|
}
|
|
51
49
|
|
|
52
50
|
- (void)testFetchingBadIndex
|
|
@@ -18,7 +18,6 @@
|
|
|
18
18
|
@property (nonatomic, readwrite, assign) CGRect frame;
|
|
19
19
|
@property (nonatomic, readwrite, nullable) id lastSnapshot;
|
|
20
20
|
@property (nonatomic, assign) BOOL fb_isObstructedByAlert;
|
|
21
|
-
@property (nonatomic, nullable) NSNumber *fb_isResolvedFromCache;
|
|
22
21
|
@property (nonatomic, readwrite, copy, nonnull) NSDictionary *wdRect;
|
|
23
22
|
@property (nonatomic, readwrite, assign) CGRect wdFrame;
|
|
24
23
|
@property (nonatomic, readwrite, copy, nonnull) NSString *wdUID;
|