appium-webdriveragent 9.6.3 → 9.7.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 CHANGED
@@ -1,3 +1,9 @@
1
+ ## [9.7.0](https://github.com/appium/WebDriverAgent/compare/v9.6.3...v9.7.0) (2025-05-20)
2
+
3
+ ### Features
4
+
5
+ * add placeholderValue to page source tree ([#1016](https://github.com/appium/WebDriverAgent/issues/1016)) ([509c207](https://github.com/appium/WebDriverAgent/commit/509c207b1366dd8582ba273edcdf77bfb30f53c9))
6
+
1
7
  ## [9.6.3](https://github.com/appium/WebDriverAgent/compare/v9.6.2...v9.6.3) (2025-05-18)
2
8
 
3
9
  ### Miscellaneous Chores
@@ -37,6 +37,7 @@
37
37
  #import "XCUIElement+FBUtilities.h"
38
38
  #import "XCUIElement+FBWebDriverAttributes.h"
39
39
  #import "XCUIElementQuery.h"
40
+ #import "FBElementHelpers.h"
40
41
 
41
42
  static NSString* const FBUnknownBundleId = @"unknown";
42
43
 
@@ -45,6 +46,7 @@ static NSString* const FBExclusionAttributeEnabled = @"enabled";
45
46
  static NSString* const FBExclusionAttributeVisible = @"visible";
46
47
  static NSString* const FBExclusionAttributeAccessible = @"accessible";
47
48
  static NSString* const FBExclusionAttributeFocused = @"focused";
49
+ static NSString* const FBExclusionAttributePlaceholderValue = @"placeholderValue";
48
50
 
49
51
 
50
52
  _Nullable id extractIssueProperty(id issue, NSString *propertyName) {
@@ -201,28 +203,15 @@ NSDictionary<NSString *, NSString *> *customExclusionAttributesMap(void) {
201
203
  info[@"label"] = FBValueOrNull(wrappedSnapshot.wdLabel);
202
204
  info[@"rect"] = wrappedSnapshot.wdRect;
203
205
 
204
- NSDictionary<NSString *, NSString * (^)(void)> *attributeBlocks = @{
205
- FBExclusionAttributeFrame: ^{
206
- return NSStringFromCGRect(wrappedSnapshot.wdFrame);
207
- },
208
- FBExclusionAttributeEnabled: ^{
209
- return [@([wrappedSnapshot isWDEnabled]) stringValue];
210
- },
211
- FBExclusionAttributeVisible: ^{
212
- return [@([wrappedSnapshot isWDVisible]) stringValue];
213
- },
214
- FBExclusionAttributeAccessible: ^{
215
- return [@([wrappedSnapshot isWDAccessible]) stringValue];
216
- },
217
- FBExclusionAttributeFocused: ^{
218
- return [@([wrappedSnapshot isWDFocused]) stringValue];
219
- }
220
- };
206
+ NSDictionary<NSString *, NSString *(^)(void)> *attributeBlocks = [self fb_attributeBlockMapForWrappedSnapshot:wrappedSnapshot];
207
+
208
+ NSSet *nonPrefixedKeys = [NSSet setWithObjects:FBExclusionAttributeFrame,
209
+ FBExclusionAttributePlaceholderValue, nil];
221
210
 
222
211
  for (NSString *key in attributeBlocks) {
223
212
  if (excludedAttributes == nil || ![excludedAttributes containsObject:key]) {
224
213
  NSString *value = ((NSString * (^)(void))attributeBlocks[key])();
225
- if ([key isEqualToString:FBExclusionAttributeFrame]) {
214
+ if ([nonPrefixedKeys containsObject:key]) {
226
215
  info[key] = value;
227
216
  } else {
228
217
  info[[NSString stringWithFormat:@"is%@", [key capitalizedString]]] = value;
@@ -248,6 +237,43 @@ NSDictionary<NSString *, NSString *> *customExclusionAttributesMap(void) {
248
237
  return info;
249
238
  }
250
239
 
240
+ // Helper used by `dictionaryForElement:` to assemble attribute value blocks,
241
+ // including both common attributes and conditionally included ones like placeholderValue.
242
+ + (NSDictionary<NSString *, NSString *(^)(void)> *)fb_attributeBlockMapForWrappedSnapshot:(FBXCElementSnapshotWrapper *)wrappedSnapshot
243
+
244
+ {
245
+ // Base attributes common to every element
246
+ NSMutableDictionary<NSString *, NSString *(^)(void)> *blocks =
247
+ [@{
248
+ FBExclusionAttributeFrame: ^{
249
+ return NSStringFromCGRect(wrappedSnapshot.wdFrame);
250
+ },
251
+ FBExclusionAttributeEnabled: ^{
252
+ return [@([wrappedSnapshot isWDEnabled]) stringValue];
253
+ },
254
+ FBExclusionAttributeVisible: ^{
255
+ return [@([wrappedSnapshot isWDVisible]) stringValue];
256
+ },
257
+ FBExclusionAttributeAccessible: ^{
258
+ return [@([wrappedSnapshot isWDAccessible]) stringValue];
259
+ },
260
+ FBExclusionAttributeFocused: ^{
261
+ return [@([wrappedSnapshot isWDFocused]) stringValue];
262
+ }
263
+ } mutableCopy];
264
+
265
+ XCUIElementType elementType = wrappedSnapshot.elementType;
266
+
267
+ // Text-input placeholder (only for elements that support inner text)
268
+ if (FBDoesElementSupportInnerText(elementType)) {
269
+ blocks[FBExclusionAttributePlaceholderValue] = ^{
270
+ return (NSString *)FBValueOrNull(wrappedSnapshot.wdPlaceholderValue);
271
+ };
272
+ }
273
+
274
+ return [blocks copy];
275
+ }
276
+
251
277
  + (NSDictionary *)accessibilityInfoForElement:(id<FBXCElementSnapshot>)snapshot
252
278
  {
253
279
  FBXCElementSnapshotWrapper *wrappedSnapshot = [FBXCElementSnapshotWrapper ensureWrapped:snapshot];
@@ -15,11 +15,11 @@
15
15
  <key>CFBundlePackageType</key>
16
16
  <string>FMWK</string>
17
17
  <key>CFBundleShortVersionString</key>
18
- <string>9.6.3</string>
18
+ <string>9.7.0</string>
19
19
  <key>CFBundleSignature</key>
20
20
  <string>????</string>
21
21
  <key>CFBundleVersion</key>
22
- <string>9.6.3</string>
22
+ <string>9.7.0</string>
23
23
  <key>NSPrincipalClass</key>
24
24
  <string/>
25
25
  </dict>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appium-webdriveragent",
3
- "version": "9.6.3",
3
+ "version": "9.7.0",
4
4
  "description": "Package bundling WebDriverAgent",
5
5
  "main": "./build/index.js",
6
6
  "types": "./build/index.d.ts",