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.
Files changed (56) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/PrivateHeaders/XCTest/XCTestManager_ManagerInterface-Protocol.h +1 -0
  3. package/WebDriverAgent.xcodeproj/project.pbxproj +12 -0
  4. package/WebDriverAgentLib/Categories/FBXCElementSnapshotWrapper+Helpers.h +4 -9
  5. package/WebDriverAgentLib/Categories/FBXCElementSnapshotWrapper+Helpers.m +13 -25
  6. package/WebDriverAgentLib/Categories/XCUIApplication+FBAlert.m +2 -2
  7. package/WebDriverAgentLib/Categories/XCUIApplication+FBHelpers.m +4 -20
  8. package/WebDriverAgentLib/Categories/XCUIElement+FBAccessibility.m +15 -4
  9. package/WebDriverAgentLib/Categories/XCUIElement+FBCaching.h +0 -3
  10. package/WebDriverAgentLib/Categories/XCUIElement+FBCaching.m +1 -22
  11. package/WebDriverAgentLib/Categories/XCUIElement+FBFind.m +1 -1
  12. package/WebDriverAgentLib/Categories/XCUIElement+FBIsVisible.m +28 -173
  13. package/WebDriverAgentLib/Categories/XCUIElement+FBPickerWheel.m +1 -3
  14. package/WebDriverAgentLib/Categories/XCUIElement+FBScrolling.m +33 -30
  15. package/WebDriverAgentLib/Categories/XCUIElement+FBTyping.m +4 -8
  16. package/WebDriverAgentLib/Categories/XCUIElement+FBUID.m +2 -2
  17. package/WebDriverAgentLib/Categories/XCUIElement+FBUtilities.h +3 -36
  18. package/WebDriverAgentLib/Categories/XCUIElement+FBUtilities.m +10 -68
  19. package/WebDriverAgentLib/Categories/XCUIElement+FBVisibleFrame.h +36 -0
  20. package/WebDriverAgentLib/Categories/XCUIElement+FBVisibleFrame.m +53 -0
  21. package/WebDriverAgentLib/Categories/XCUIElement+FBWebDriverAttributes.m +7 -20
  22. package/WebDriverAgentLib/Commands/FBCustomCommands.m +2 -1
  23. package/WebDriverAgentLib/Commands/FBElementCommands.m +25 -47
  24. package/WebDriverAgentLib/Commands/FBFindElementCommands.m +10 -9
  25. package/WebDriverAgentLib/Commands/FBSessionCommands.m +0 -8
  26. package/WebDriverAgentLib/FBAlert.m +6 -5
  27. package/WebDriverAgentLib/Info.plist +2 -2
  28. package/WebDriverAgentLib/Routing/FBElementCache.h +4 -10
  29. package/WebDriverAgentLib/Routing/FBElementCache.m +4 -33
  30. package/WebDriverAgentLib/Routing/FBResponsePayload.m +1 -7
  31. package/WebDriverAgentLib/Utilities/FBConfiguration.h +0 -8
  32. package/WebDriverAgentLib/Utilities/FBConfiguration.m +0 -12
  33. package/WebDriverAgentLib/Utilities/FBSettings.h +0 -3
  34. package/WebDriverAgentLib/Utilities/FBSettings.m +0 -2
  35. package/WebDriverAgentLib/Utilities/FBTVNavigationTracker.m +1 -3
  36. package/WebDriverAgentLib/Utilities/FBW3CActionsSynthesizer.m +1 -1
  37. package/WebDriverAgentLib/Utilities/FBXCAXClientProxy.h +4 -3
  38. package/WebDriverAgentLib/Utilities/FBXCAXClientProxy.m +7 -11
  39. package/WebDriverAgentLib/Utilities/FBXCodeCompatibility.h +3 -1
  40. package/WebDriverAgentLib/Utilities/FBXCodeCompatibility.m +2 -2
  41. package/WebDriverAgentLib/Utilities/FBXPath.m +1 -4
  42. package/WebDriverAgentLib/Utilities/XCTestPrivateSymbols.h +3 -0
  43. package/WebDriverAgentLib/Utilities/XCTestPrivateSymbols.m +1 -0
  44. package/WebDriverAgentTests/IntegrationTests/FBElementAttributeTests.m +2 -1
  45. package/WebDriverAgentTests/IntegrationTests/FBElementSwipingTests.m +1 -1
  46. package/WebDriverAgentTests/IntegrationTests/FBW3CTouchActionsIntegrationTests.m +1 -1
  47. package/WebDriverAgentTests/IntegrationTests/FBXPathIntegrationTests.m +2 -2
  48. package/WebDriverAgentTests/IntegrationTests/XCElementSnapshotHelperTests.m +21 -10
  49. package/WebDriverAgentTests/IntegrationTests/XCElementSnapshotHitPointTests.m +1 -1
  50. package/WebDriverAgentTests/IntegrationTests/XCUIElementHelperIntegrationTests.m +5 -3
  51. package/WebDriverAgentTests/UnitTests/Doubles/XCElementSnapshotDouble.m +10 -0
  52. package/WebDriverAgentTests/UnitTests/Doubles/XCUIElementDouble.h +1 -2
  53. package/WebDriverAgentTests/UnitTests/Doubles/XCUIElementDouble.m +1 -1
  54. package/WebDriverAgentTests/UnitTests/FBElementCacheTests.m +0 -2
  55. package/WebDriverAgentTests/UnitTests_tvOS/Doubles/XCUIElementDouble.h +0 -1
  56. 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
- XCTAssertEqualObjects(element.wdValue, @"50%");
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:@2500];
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
- return ![self.pickerWheel.fb_takeSnapshot.value isEqualToString:previousValue];
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.fb_takeSnapshot);
46
+ FBAssertWaitTillBecomesTrue(nil != [matchingElement fb_takeSnapshot:YES]);
47
47
 
48
- id<FBXCElementSnapshot> snapshot = matchingElement.fb_takeSnapshot;
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:self.testedView.fb_takeSnapshot]
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:button.fb_takeSnapshot]
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:todayPickerWheel.fb_takeSnapshot]
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:todayPickerWheel.fb_takeSnapshot]
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:todayPickerWheel.fb_takeSnapshot]
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:threeStaticText.fb_takeSnapshot]
140
- fb_parentMatchingOneOfTypes:acceptedParents
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:threeStaticText.fb_takeSnapshot]
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:scrollView.fb_takeSnapshot] fb_descendantsCellSnapshots];
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:threeStaticText.fb_takeSnapshot] fb_parentCellSnapshot];
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.fb_takeSnapshot].fb_hitPoint.CGPointValue;
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 selfUID:nil onlyChildren:NO];
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
  }
@@ -98,4 +98,14 @@
98
98
  return @[];
99
99
  }
100
100
 
101
+ - (NSArray *)_allDescendants
102
+ {
103
+ return @[];
104
+ }
105
+
106
+ - (CGRect)visibleFrame
107
+ {
108
+ return CGRectZero;
109
+ }
110
+
101
111
  @end
@@ -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
@@ -68,7 +68,7 @@
68
68
  self.didResolve = YES;
69
69
  }
70
70
 
71
- - (id)fb_takeSnapshot
71
+ - (id _Nonnull)fb_takeSnapshot:(BOOL)inDepth;
72
72
  {
73
73
  return [self lastSnapshot];
74
74
  }
@@ -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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appium-webdriveragent",
3
- "version": "8.12.2",
3
+ "version": "9.0.0",
4
4
  "description": "Package bundling WebDriverAgent",
5
5
  "main": "./build/index.js",
6
6
  "types": "./build/index.d.ts",