appium-webdriveragent 13.2.4 → 14.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 +16 -0
- package/WebDriverAgent.xcodeproj/project.pbxproj +15 -15
- package/WebDriverAgentLib/Categories/XCUIApplication+FBHelpers.m +12 -1
- package/WebDriverAgentLib/Categories/XCUIElement+FBWebDriverAttributes.m +5 -0
- package/WebDriverAgentLib/Info.plist +2 -2
- package/WebDriverAgentLib/Routing/FBElement.h +3 -0
- package/WebDriverAgentLib/Utilities/FBConfiguration.h +18 -0
- package/WebDriverAgentLib/Utilities/FBConfiguration.m +11 -0
- package/WebDriverAgentLib/Utilities/FBSettings.h +1 -0
- package/WebDriverAgentLib/Utilities/FBSettings.m +1 -0
- package/WebDriverAgentLib/Utilities/FBSettingsHandler.m +7 -0
- package/WebDriverAgentLib/Utilities/FBXPath.m +22 -0
- package/WebDriverAgentTests/IntegrationTests/FBElementAttributeTests.m +9 -0
- package/WebDriverAgentTests/UnitTests/Doubles/XCUIElementDouble.h +1 -0
- package/WebDriverAgentTests/UnitTests/Doubles/XCUIElementDouble.m +1 -0
- package/WebDriverAgentTests/UnitTests/FBXPathTests.m +2 -2
- package/WebDriverAgentTests/UnitTests_tvOS/Doubles/XCUIElementDouble.h +1 -0
- package/WebDriverAgentTests/UnitTests_tvOS/Doubles/XCUIElementDouble.m +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
## [14.0.0](https://github.com/appium/WebDriverAgent/compare/v13.3.0...v14.0.0) (2026-06-09)
|
|
2
|
+
|
|
3
|
+
### ⚠ BREAKING CHANGES
|
|
4
|
+
|
|
5
|
+
* bump the deployment target to 15
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* bump the deployment target to 15 ([#1152](https://github.com/appium/WebDriverAgent/issues/1152)) ([74498f7](https://github.com/appium/WebDriverAgent/commit/74498f79c9f00678f2bc37b9afb50f70e30d0f88))
|
|
10
|
+
|
|
11
|
+
## [13.3.0](https://github.com/appium/WebDriverAgent/compare/v13.2.4...v13.3.0) (2026-06-09)
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* Expose native isAccessibilityElement ([#1146](https://github.com/appium/WebDriverAgent/issues/1146)) ([e615621](https://github.com/appium/WebDriverAgent/commit/e6156212e6fba6af98a69a400f5fa18b67f1e3e3))
|
|
16
|
+
|
|
1
17
|
## [13.2.4](https://github.com/appium/WebDriverAgent/compare/v13.2.3...v13.2.4) (2026-06-08)
|
|
2
18
|
|
|
3
19
|
### Bug Fixes
|
|
@@ -52,7 +52,6 @@
|
|
|
52
52
|
641EE5D92240C5CA00173FCB /* XCUIElement+FBPickerWheel.m in Sources */ = {isa = PBXBuildFile; fileRef = 7136A4781E8918E60024FC3D /* XCUIElement+FBPickerWheel.m */; };
|
|
53
53
|
641EE5DA2240C5CA00173FCB /* XCUIApplicationProcessDelay.m in Sources */ = {isa = PBXBuildFile; fileRef = 6385F4A5220A40760095BBDB /* XCUIApplicationProcessDelay.m */; };
|
|
54
54
|
641EE5DB2240C5CA00173FCB /* FBXPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 711084431DA3AA7500F913D6 /* FBXPath.m */; };
|
|
55
|
-
71B2E0042733FB970074B004 /* FBXPathExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 71B2E0022733FB970074B002 /* FBXPathExtensions.m */; };
|
|
56
55
|
641EE5DC2240C5CA00173FCB /* XCUIApplication+FBAlert.m in Sources */ = {isa = PBXBuildFile; fileRef = 719CD8FB2126C88B00C7D0C2 /* XCUIApplication+FBAlert.m */; };
|
|
57
56
|
641EE5DE2240C5CA00173FCB /* XCUIApplication+FBTouchAction.m in Sources */ = {isa = PBXBuildFile; fileRef = 71BD20721F86116100B36EC2 /* XCUIApplication+FBTouchAction.m */; };
|
|
58
57
|
641EE5DF2240C5CA00173FCB /* FBWebServer.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB78D1CAEDF0C008C271F /* FBWebServer.m */; };
|
|
@@ -317,7 +316,6 @@
|
|
|
317
316
|
64E3502F2AC0B6FE005F3ACB /* NSDictionary+FBUtf8SafeDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 716F0D9F2A16CA1000CDD977 /* NSDictionary+FBUtf8SafeDictionary.h */; };
|
|
318
317
|
711084441DA3AA7500F913D6 /* FBXPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 711084421DA3AA7500F913D6 /* FBXPath.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
|
319
318
|
711084451DA3AA7500F913D6 /* FBXPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 711084431DA3AA7500F913D6 /* FBXPath.m */; };
|
|
320
|
-
71B2E0062733FB970074B006 /* FBXPathExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 71B2E0022733FB970074B002 /* FBXPathExtensions.m */; };
|
|
321
319
|
7119097C2152580600BA3C7E /* XCUIScreen.h in Headers */ = {isa = PBXBuildFile; fileRef = 7119097B2152580600BA3C7E /* XCUIScreen.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
|
322
320
|
7119E1EC1E891F8600D0B125 /* FBPickerWheelSelectTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 7119E1EB1E891F8600D0B125 /* FBPickerWheelSelectTests.m */; };
|
|
323
321
|
711CD03425ED1106001C01D2 /* XCUIScreenDataSource-Protocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 711CD03325ED1106001C01D2 /* XCUIScreenDataSource-Protocol.h */; };
|
|
@@ -469,6 +467,8 @@
|
|
|
469
467
|
71B155DC230711E900646AFB /* FBCommandStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 71B155DB230711E900646AFB /* FBCommandStatus.m */; };
|
|
470
468
|
71B155DF23080CA600646AFB /* FBProtocolHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 71B155DD23080CA600646AFB /* FBProtocolHelpers.h */; };
|
|
471
469
|
71B155E123080CA600646AFB /* FBProtocolHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = 71B155DE23080CA600646AFB /* FBProtocolHelpers.m */; };
|
|
470
|
+
71B2E0042733FB970074B004 /* FBXPathExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 71B2E0022733FB970074B002 /* FBXPathExtensions.m */; };
|
|
471
|
+
71B2E0062733FB970074B006 /* FBXPathExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 71B2E0022733FB970074B002 /* FBXPathExtensions.m */; };
|
|
472
472
|
71B49EC71ED1A58100D51AD6 /* XCUIElement+FBUID.h in Headers */ = {isa = PBXBuildFile; fileRef = 71B49EC51ED1A58100D51AD6 /* XCUIElement+FBUID.h */; };
|
|
473
473
|
71B49EC81ED1A58100D51AD6 /* XCUIElement+FBUID.m in Sources */ = {isa = PBXBuildFile; fileRef = 71B49EC61ED1A58100D51AD6 /* XCUIElement+FBUID.m */; };
|
|
474
474
|
71BB58DE2B9631B700CB9BFE /* FBVideoRecordingTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 71BB58DD2B9631B700CB9BFE /* FBVideoRecordingTests.m */; };
|
|
@@ -535,6 +535,7 @@
|
|
|
535
535
|
71F5BE50252F14EB00EE9EBA /* FBExceptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 71F5BE4D252F14EB00EE9EBA /* FBExceptions.h */; };
|
|
536
536
|
71F5BE51252F14EB00EE9EBA /* FBExceptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F5BE4E252F14EB00EE9EBA /* FBExceptions.m */; };
|
|
537
537
|
71F5BE52252F14EB00EE9EBA /* FBExceptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F5BE4E252F14EB00EE9EBA /* FBExceptions.m */; };
|
|
538
|
+
A1B2C3D4E5F600000000001B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A1B2C3D4E5F600000000001A /* Assets.xcassets */; };
|
|
538
539
|
AABBCCDDEEFF001122334457 /* SceneDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = AABBCCDDEEFF001122334456 /* SceneDelegate.m */; };
|
|
539
540
|
AD35D06C1CF1C35500870A75 /* WebDriverAgentLib.framework in Copy frameworks */ = {isa = PBXBuildFile; fileRef = EE158A991CBD452B00A3E3F0 /* WebDriverAgentLib.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
|
540
541
|
AD6C26941CF2379700F8B5FF /* FBAlert.h in Headers */ = {isa = PBXBuildFile; fileRef = AD6C26921CF2379700F8B5FF /* FBAlert.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
|
@@ -832,7 +833,6 @@
|
|
|
832
833
|
F59CD6D52EF16E5E00F91287 /* XCUIElement+FBCustomActions.m in Sources */ = {isa = PBXBuildFile; fileRef = F59CD6D32EF16E5E00F91287 /* XCUIElement+FBCustomActions.m */; };
|
|
833
834
|
F59CD6D62EF16E5E00F91287 /* XCUIElement+FBCustomActions.h in Headers */ = {isa = PBXBuildFile; fileRef = F59CD6D22EF16E5E00F91287 /* XCUIElement+FBCustomActions.h */; };
|
|
834
835
|
F59CD6D72EF16E5E00F91287 /* XCUIElement+FBCustomActions.m in Sources */ = {isa = PBXBuildFile; fileRef = F59CD6D32EF16E5E00F91287 /* XCUIElement+FBCustomActions.m */; };
|
|
835
|
-
A1B2C3D4E5F600000000001B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A1B2C3D4E5F600000000001A /* Assets.xcassets */; };
|
|
836
836
|
/* End PBXBuildFile section */
|
|
837
837
|
|
|
838
838
|
/* Begin PBXContainerItemProxy section */
|
|
@@ -982,8 +982,6 @@
|
|
|
982
982
|
64B26509228CE4FF002A5025 /* FBTVNavigationTracker-Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "FBTVNavigationTracker-Private.h"; sourceTree = "<group>"; };
|
|
983
983
|
711084421DA3AA7500F913D6 /* FBXPath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBXPath.h; sourceTree = "<group>"; };
|
|
984
984
|
711084431DA3AA7500F913D6 /* FBXPath.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FBXPath.m; sourceTree = "<group>"; };
|
|
985
|
-
71B2E0012733FB970074B001 /* FBXPathExtensions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FBXPathExtensions.h; sourceTree = "<group>"; };
|
|
986
|
-
71B2E0022733FB970074B002 /* FBXPathExtensions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FBXPathExtensions.m; sourceTree = "<group>"; };
|
|
987
985
|
7119097B2152580600BA3C7E /* XCUIScreen.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XCUIScreen.h; sourceTree = "<group>"; };
|
|
988
986
|
7119E1EB1E891F8600D0B125 /* FBPickerWheelSelectTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FBPickerWheelSelectTests.m; sourceTree = "<group>"; };
|
|
989
987
|
711CD03325ED1106001C01D2 /* XCUIScreenDataSource-Protocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "XCUIScreenDataSource-Protocol.h"; sourceTree = "<group>"; };
|
|
@@ -1090,6 +1088,8 @@
|
|
|
1090
1088
|
71B155DB230711E900646AFB /* FBCommandStatus.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FBCommandStatus.m; sourceTree = "<group>"; };
|
|
1091
1089
|
71B155DD23080CA600646AFB /* FBProtocolHelpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FBProtocolHelpers.h; sourceTree = "<group>"; };
|
|
1092
1090
|
71B155DE23080CA600646AFB /* FBProtocolHelpers.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FBProtocolHelpers.m; sourceTree = "<group>"; };
|
|
1091
|
+
71B2E0012733FB970074B001 /* FBXPathExtensions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FBXPathExtensions.h; sourceTree = "<group>"; };
|
|
1092
|
+
71B2E0022733FB970074B002 /* FBXPathExtensions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FBXPathExtensions.m; sourceTree = "<group>"; };
|
|
1093
1093
|
71B49EC51ED1A58100D51AD6 /* XCUIElement+FBUID.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "XCUIElement+FBUID.h"; sourceTree = "<group>"; };
|
|
1094
1094
|
71B49EC61ED1A58100D51AD6 /* XCUIElement+FBUID.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "XCUIElement+FBUID.m"; sourceTree = "<group>"; };
|
|
1095
1095
|
71BB58DD2B9631B700CB9BFE /* FBVideoRecordingTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FBVideoRecordingTests.m; sourceTree = "<group>"; };
|
|
@@ -1125,6 +1125,7 @@
|
|
|
1125
1125
|
71F5BE33252E5B2200EE9EBA /* FBElementSwipingTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FBElementSwipingTests.m; sourceTree = "<group>"; };
|
|
1126
1126
|
71F5BE4D252F14EB00EE9EBA /* FBExceptions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FBExceptions.h; sourceTree = "<group>"; };
|
|
1127
1127
|
71F5BE4E252F14EB00EE9EBA /* FBExceptions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FBExceptions.m; sourceTree = "<group>"; };
|
|
1128
|
+
A1B2C3D4E5F600000000001A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = WebDriverAgentRunner/Assets.xcassets; sourceTree = SOURCE_ROOT; };
|
|
1128
1129
|
AABBCCDDEEFF001122334455 /* SceneDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SceneDelegate.h; sourceTree = "<group>"; };
|
|
1129
1130
|
AABBCCDDEEFF001122334456 /* SceneDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SceneDelegate.m; sourceTree = "<group>"; };
|
|
1130
1131
|
AD42DD2A1CF121E600806E5D /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = "<group>"; };
|
|
@@ -1379,7 +1380,6 @@
|
|
|
1379
1380
|
EE9AB7921CAEDF0C008C271F /* FBRuntimeUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FBRuntimeUtils.m; sourceTree = "<group>"; };
|
|
1380
1381
|
EE9AB7FC1CAEE048008C271F /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = WebDriverAgentRunner/Info.plist; sourceTree = SOURCE_ROOT; };
|
|
1381
1382
|
EE9AB7FD1CAEE048008C271F /* UITestingUITests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = UITestingUITests.m; path = WebDriverAgentRunner/UITestingUITests.m; sourceTree = SOURCE_ROOT; };
|
|
1382
|
-
A1B2C3D4E5F600000000001A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = WebDriverAgentRunner/Assets.xcassets; sourceTree = SOURCE_ROOT; };
|
|
1383
1383
|
EE9AB8031CAEE182008C271F /* build.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = build.sh; sourceTree = "<group>"; };
|
|
1384
1384
|
EE9B75D41CF7956C00275851 /* IntegrationApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = IntegrationApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
1385
1385
|
EE9B75EC1CF7956C00275851 /* IntegrationTests_1.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = IntegrationTests_1.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
@@ -2012,11 +2012,11 @@
|
|
|
2012
2012
|
714D88CA2733FB970074A925 /* FBXMLGenerationOptions.h */,
|
|
2013
2013
|
714D88CB2733FB970074A925 /* FBXMLGenerationOptions.m */,
|
|
2014
2014
|
712A0C861DA3E55D007D02E5 /* FBXPath-Private.h */,
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
|
|
2015
|
+
711084421DA3AA7500F913D6 /* FBXPath.h */,
|
|
2016
|
+
711084431DA3AA7500F913D6 /* FBXPath.m */,
|
|
2017
|
+
71B2E0012733FB970074B001 /* FBXPathExtensions.h */,
|
|
2018
|
+
71B2E0022733FB970074B002 /* FBXPathExtensions.m */,
|
|
2019
|
+
EE6B64FB1D0F86EF00E85F5D /* XCTestPrivateSymbols.h */,
|
|
2020
2020
|
EE6B64FC1D0F86EF00E85F5D /* XCTestPrivateSymbols.m */,
|
|
2021
2021
|
633E904A220DEE7F007CADF9 /* XCUIApplicationProcessDelay.h */,
|
|
2022
2022
|
6385F4A5220A40760095BBDB /* XCUIApplicationProcessDelay.m */,
|
|
@@ -3976,13 +3976,13 @@
|
|
|
3976
3976
|
"$(SDKROOT)/usr/include/libxml2",
|
|
3977
3977
|
"$(SRCROOT)/Modules",
|
|
3978
3978
|
);
|
|
3979
|
-
IPHONEOS_DEPLOYMENT_TARGET =
|
|
3979
|
+
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
|
3980
3980
|
MTL_ENABLE_DEBUG_INFO = YES;
|
|
3981
3981
|
ONLY_ACTIVE_ARCH = YES;
|
|
3982
3982
|
SDKROOT = iphoneos;
|
|
3983
3983
|
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
|
3984
3984
|
TARGETED_DEVICE_FAMILY = "1,2";
|
|
3985
|
-
TVOS_DEPLOYMENT_TARGET =
|
|
3985
|
+
TVOS_DEPLOYMENT_TARGET = 15.0;
|
|
3986
3986
|
VALIDATE_WORKSPACE = NO;
|
|
3987
3987
|
};
|
|
3988
3988
|
name = Debug;
|
|
@@ -4039,12 +4039,12 @@
|
|
|
4039
4039
|
"$(SDKROOT)/usr/include/libxml2",
|
|
4040
4040
|
"$(SRCROOT)/Modules",
|
|
4041
4041
|
);
|
|
4042
|
-
IPHONEOS_DEPLOYMENT_TARGET =
|
|
4042
|
+
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
|
4043
4043
|
MTL_ENABLE_DEBUG_INFO = NO;
|
|
4044
4044
|
SDKROOT = iphoneos;
|
|
4045
4045
|
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
|
4046
4046
|
TARGETED_DEVICE_FAMILY = "1,2";
|
|
4047
|
-
TVOS_DEPLOYMENT_TARGET =
|
|
4047
|
+
TVOS_DEPLOYMENT_TARGET = 15.0;
|
|
4048
4048
|
VALIDATE_PRODUCT = YES;
|
|
4049
4049
|
VALIDATE_WORKSPACE = NO;
|
|
4050
4050
|
};
|
|
@@ -44,6 +44,7 @@ static NSString* const FBExclusionAttributeFrame = @"frame";
|
|
|
44
44
|
static NSString* const FBExclusionAttributeEnabled = @"enabled";
|
|
45
45
|
static NSString* const FBExclusionAttributeVisible = @"visible";
|
|
46
46
|
static NSString* const FBExclusionAttributeAccessible = @"accessible";
|
|
47
|
+
static NSString* const FBExclusionAttributeNativeAccessibilityElement = @"nativeAccessibilityElement";
|
|
47
48
|
static NSString* const FBExclusionAttributeFocused = @"focused";
|
|
48
49
|
static NSString* const FBExclusionAttributePlaceholderValue = @"placeholderValue";
|
|
49
50
|
static NSString* const FBExclusionAttributeNativeFrame = @"nativeFrame";
|
|
@@ -51,6 +52,13 @@ static NSString* const FBExclusionAttributeTraits = @"traits";
|
|
|
51
52
|
static NSString* const FBExclusionAttributeMinValue = @"minValue";
|
|
52
53
|
static NSString* const FBExclusionAttributeMaxValue = @"maxValue";
|
|
53
54
|
|
|
55
|
+
static NSString *FBJsonPrefixedAttributeKey(NSString *key)
|
|
56
|
+
{
|
|
57
|
+
return [NSString stringWithFormat:@"is%@%@",
|
|
58
|
+
[[key substringToIndex:1] uppercaseString],
|
|
59
|
+
[key substringFromIndex:1]];
|
|
60
|
+
}
|
|
61
|
+
|
|
54
62
|
_Nullable id extractIssueProperty(id issue, NSString *propertyName) {
|
|
55
63
|
SEL selector = NSSelectorFromString(propertyName);
|
|
56
64
|
NSMethodSignature *methodSignature = [issue methodSignatureForSelector:selector];
|
|
@@ -223,7 +231,7 @@ NSDictionary<NSString *, NSString *> *customExclusionAttributesMap(void) {
|
|
|
223
231
|
if ([nonPrefixedKeys containsObject:key]) {
|
|
224
232
|
info[key] = value;
|
|
225
233
|
} else {
|
|
226
|
-
info[
|
|
234
|
+
info[FBJsonPrefixedAttributeKey(key)] = value;
|
|
227
235
|
}
|
|
228
236
|
}
|
|
229
237
|
}
|
|
@@ -268,6 +276,9 @@ NSDictionary<NSString *, NSString *> *customExclusionAttributesMap(void) {
|
|
|
268
276
|
},
|
|
269
277
|
FBExclusionAttributeAccessible: ^{
|
|
270
278
|
return [@([wrappedSnapshot isWDAccessible]) stringValue];
|
|
279
|
+
},
|
|
280
|
+
FBExclusionAttributeNativeAccessibilityElement: ^{
|
|
281
|
+
return [@([wrappedSnapshot isWDNativeAccessibilityElement]) stringValue];
|
|
271
282
|
},
|
|
272
283
|
FBExclusionAttributeFocused: ^{
|
|
273
284
|
return [@([wrappedSnapshot isWDFocused]) stringValue];
|
|
@@ -15,11 +15,11 @@
|
|
|
15
15
|
<key>CFBundlePackageType</key>
|
|
16
16
|
<string>FMWK</string>
|
|
17
17
|
<key>CFBundleShortVersionString</key>
|
|
18
|
-
<string>
|
|
18
|
+
<string>14.0.0</string>
|
|
19
19
|
<key>CFBundleSignature</key>
|
|
20
20
|
<string>????</string>
|
|
21
21
|
<key>CFBundleVersion</key>
|
|
22
|
-
<string>
|
|
22
|
+
<string>14.0.0</string>
|
|
23
23
|
<key>NSPrincipalClass</key>
|
|
24
24
|
<string/>
|
|
25
25
|
</dict>
|
|
@@ -55,6 +55,9 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
55
55
|
/*! Whether element is accessible */
|
|
56
56
|
@property (nonatomic, readonly, getter = isWDAccessible) BOOL wdAccessible;
|
|
57
57
|
|
|
58
|
+
/*! The raw, native `isAccessibilityElement` value reported by the accessibility framework, without WebDriverAgent's custom computation applied by `wdAccessible` */
|
|
59
|
+
@property (nonatomic, readonly, getter = isWDNativeAccessibilityElement) BOOL wdNativeAccessibilityElement;
|
|
60
|
+
|
|
58
61
|
/*! Whether element is an accessibility container (contains children of any depth that are accessible) */
|
|
59
62
|
@property (nonatomic, readonly, getter = isWDAccessibilityContainer) BOOL wdAccessibilityContainer;
|
|
60
63
|
|
|
@@ -366,6 +366,24 @@ typedef NS_ENUM(NSInteger, FBConfigurationKeyboardPreference) {
|
|
|
366
366
|
+ (void)setIncludeNativeFrameInPageSource:(BOOL)enabled;
|
|
367
367
|
+ (BOOL)includeNativeFrameInPageSource;
|
|
368
368
|
|
|
369
|
+
/**
|
|
370
|
+
* Whether to include the `nativeAccessibilityElement` attribute in the XML page source.
|
|
371
|
+
*
|
|
372
|
+
* When enabled, the XML representation will contain the raw, native
|
|
373
|
+
* `isAccessibilityElement` value as reported by the accessibility framework,
|
|
374
|
+
* without the custom computation that WebDriverAgent applies to the
|
|
375
|
+
* `accessible` attribute (cell/text field special cases and parent absorption).
|
|
376
|
+
*
|
|
377
|
+
* This is useful for consumers that need to reason about the unmodified
|
|
378
|
+
* accessibility flag alongside the computed `accessible` value.
|
|
379
|
+
*
|
|
380
|
+
* The value is disabled by default to keep the default page source stable.
|
|
381
|
+
*
|
|
382
|
+
* @param enabled Either YES or NO
|
|
383
|
+
*/
|
|
384
|
+
+ (void)setIncludeNativeAccessibilityElementInPageSource:(BOOL)enabled;
|
|
385
|
+
+ (BOOL)includeNativeAccessibilityElementInPageSource;
|
|
386
|
+
|
|
369
387
|
/**
|
|
370
388
|
* Whether to include `minValue`/`maxValue` attributes in the page source.
|
|
371
389
|
* These attributes are retrieved from native element snapshots and represent
|
|
@@ -61,6 +61,7 @@ static UIInterfaceOrientation FBScreenshotOrientation;
|
|
|
61
61
|
#endif
|
|
62
62
|
static BOOL FBShouldIncludeHittableInPageSource = NO;
|
|
63
63
|
static BOOL FBShouldIncludeNativeFrameInPageSource = NO;
|
|
64
|
+
static BOOL FBShouldIncludeNativeAccessibilityElementInPageSource = NO;
|
|
64
65
|
static BOOL FBShouldIncludeMinMaxValueInPageSource = NO;
|
|
65
66
|
static BOOL FBShouldIncludeCustomActionsInPageSource = NO;
|
|
66
67
|
static BOOL FBShouldEnforceCustomSnapshots = NO;
|
|
@@ -665,6 +666,16 @@ static BOOL FBShouldEnforceCustomSnapshots = NO;
|
|
|
665
666
|
return FBShouldIncludeNativeFrameInPageSource;
|
|
666
667
|
}
|
|
667
668
|
|
|
669
|
+
+ (void)setIncludeNativeAccessibilityElementInPageSource:(BOOL)enabled
|
|
670
|
+
{
|
|
671
|
+
FBShouldIncludeNativeAccessibilityElementInPageSource = enabled;
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
+ (BOOL)includeNativeAccessibilityElementInPageSource
|
|
675
|
+
{
|
|
676
|
+
return FBShouldIncludeNativeAccessibilityElementInPageSource;
|
|
677
|
+
}
|
|
678
|
+
|
|
668
679
|
+ (void)setIncludeMinMaxValueInPageSource:(BOOL)enabled
|
|
669
680
|
{
|
|
670
681
|
FBShouldIncludeMinMaxValueInPageSource = enabled;
|
|
@@ -41,6 +41,7 @@ extern NSString* const FB_SETTING_LIMIT_XPATH_CONTEXT_SCOPE;
|
|
|
41
41
|
extern NSString* const FB_SETTING_AUTO_CLICK_ALERT_SELECTOR;
|
|
42
42
|
extern NSString *const FB_SETTING_INCLUDE_HITTABLE_IN_PAGE_SOURCE;
|
|
43
43
|
extern NSString *const FB_SETTING_INCLUDE_NATIVE_FRAME_IN_PAGE_SOURCE;
|
|
44
|
+
extern NSString *const FB_SETTING_INCLUDE_NATIVE_ACCESSIBILITY_ELEMENT_IN_PAGE_SOURCE;
|
|
44
45
|
extern NSString *const FB_SETTING_INCLUDE_MIN_MAX_VALUE_IN_PAGE_SOURCE;
|
|
45
46
|
extern NSString *const FB_SETTING_INCLUDE_CUSTOM_ACTIONS_IN_PAGE_SOURCE;
|
|
46
47
|
extern NSString *const FB_SETTING_ENFORCE_CUSTOM_SNAPSHOTS;
|
|
@@ -37,6 +37,7 @@ NSString* const FB_SETTING_LIMIT_XPATH_CONTEXT_SCOPE = @"limitXPathContextScope"
|
|
|
37
37
|
NSString* const FB_SETTING_AUTO_CLICK_ALERT_SELECTOR = @"autoClickAlertSelector";
|
|
38
38
|
NSString* const FB_SETTING_INCLUDE_HITTABLE_IN_PAGE_SOURCE = @"includeHittableInPageSource";
|
|
39
39
|
NSString* const FB_SETTING_INCLUDE_NATIVE_FRAME_IN_PAGE_SOURCE = @"includeNativeFrameInPageSource";
|
|
40
|
+
NSString* const FB_SETTING_INCLUDE_NATIVE_ACCESSIBILITY_ELEMENT_IN_PAGE_SOURCE = @"includeNativeAccessibilityElementInPageSource";
|
|
40
41
|
NSString* const FB_SETTING_INCLUDE_MIN_MAX_VALUE_IN_PAGE_SOURCE = @"includeMinMaxValueInPageSource";
|
|
41
42
|
NSString* const FB_SETTING_INCLUDE_CUSTOM_ACTIONS_IN_PAGE_SOURCE = @"includeCustomActionsInPageSource";
|
|
42
43
|
NSString* const FB_SETTING_ENFORCE_CUSTOM_SNAPSHOTS = @"enforceCustomSnapshots";
|
|
@@ -162,6 +162,10 @@ static NSSet<NSString *> *FBNilClearableSettingKeys(void)
|
|
|
162
162
|
[FBConfiguration setIncludeNativeFrameInPageSource:[value boolValue]];
|
|
163
163
|
return nil;
|
|
164
164
|
};
|
|
165
|
+
map[FB_SETTING_INCLUDE_NATIVE_ACCESSIBILITY_ELEMENT_IN_PAGE_SOURCE] = ^FBCommandStatus *(FBSession *session, id value) {
|
|
166
|
+
[FBConfiguration setIncludeNativeAccessibilityElementInPageSource:[value boolValue]];
|
|
167
|
+
return nil;
|
|
168
|
+
};
|
|
165
169
|
map[FB_SETTING_INCLUDE_MIN_MAX_VALUE_IN_PAGE_SOURCE] = ^FBCommandStatus *(FBSession *session, id value) {
|
|
166
170
|
[FBConfiguration setIncludeMinMaxValueInPageSource:[value boolValue]];
|
|
167
171
|
return nil;
|
|
@@ -280,6 +284,9 @@ static NSSet<NSString *> *FBNilClearableSettingKeys(void)
|
|
|
280
284
|
map[FB_SETTING_INCLUDE_NATIVE_FRAME_IN_PAGE_SOURCE] = ^id(FBSession *session) {
|
|
281
285
|
return @([FBConfiguration includeNativeFrameInPageSource]);
|
|
282
286
|
};
|
|
287
|
+
map[FB_SETTING_INCLUDE_NATIVE_ACCESSIBILITY_ELEMENT_IN_PAGE_SOURCE] = ^id(FBSession *session) {
|
|
288
|
+
return @([FBConfiguration includeNativeAccessibilityElementInPageSource]);
|
|
289
|
+
};
|
|
283
290
|
map[FB_SETTING_INCLUDE_MIN_MAX_VALUE_IN_PAGE_SOURCE] = ^id(FBSession *session) {
|
|
284
291
|
return @([FBConfiguration includeMinMaxValueInPageSource]);
|
|
285
292
|
};
|
|
@@ -120,6 +120,10 @@
|
|
|
120
120
|
|
|
121
121
|
@end
|
|
122
122
|
|
|
123
|
+
@interface FBNativeAccessibilityElementAttribute : FBElementAttribute
|
|
124
|
+
|
|
125
|
+
@end
|
|
126
|
+
|
|
123
127
|
@interface FBTraitsAttribute : FBElementAttribute
|
|
124
128
|
|
|
125
129
|
@end
|
|
@@ -409,6 +413,10 @@ static NSString *const topNodeIndexPath = @"top";
|
|
|
409
413
|
// Include nativeFrame only when requested
|
|
410
414
|
[includedAttributes removeObject:FBNativeFrameAttribute.class];
|
|
411
415
|
}
|
|
416
|
+
if (!FBConfiguration.includeNativeAccessibilityElementInPageSource) {
|
|
417
|
+
// Include the raw native accessibility flag only when requested
|
|
418
|
+
[includedAttributes removeObject:FBNativeAccessibilityElementAttribute.class];
|
|
419
|
+
}
|
|
412
420
|
if (!FBConfiguration.includeMinMaxValueInPageSource) {
|
|
413
421
|
// minValue/maxValue are retrieved from private APIs and may be slow on deep trees
|
|
414
422
|
[includedAttributes removeObject:FBMinValueAttribute.class];
|
|
@@ -686,6 +694,7 @@ static NSString *const FBAbstractMethodInvocationException = @"AbstractMethodInv
|
|
|
686
694
|
FBEnabledAttribute.class,
|
|
687
695
|
FBVisibleAttribute.class,
|
|
688
696
|
FBAccessibleAttribute.class,
|
|
697
|
+
FBNativeAccessibilityElementAttribute.class,
|
|
689
698
|
#if TARGET_OS_TV
|
|
690
699
|
FBFocusedAttribute.class,
|
|
691
700
|
#endif
|
|
@@ -954,6 +963,19 @@ static NSString *const FBAbstractMethodInvocationException = @"AbstractMethodInv
|
|
|
954
963
|
}
|
|
955
964
|
@end
|
|
956
965
|
|
|
966
|
+
@implementation FBNativeAccessibilityElementAttribute
|
|
967
|
+
|
|
968
|
+
+ (NSString *)name
|
|
969
|
+
{
|
|
970
|
+
return @"nativeAccessibilityElement";
|
|
971
|
+
}
|
|
972
|
+
|
|
973
|
+
+ (NSString *)valueForElement:(id<FBElement>)element
|
|
974
|
+
{
|
|
975
|
+
return FBBoolToString(element.wdNativeAccessibilityElement);
|
|
976
|
+
}
|
|
977
|
+
@end
|
|
978
|
+
|
|
957
979
|
@implementation FBTraitsAttribute
|
|
958
980
|
|
|
959
981
|
+ (NSString *)name
|
|
@@ -41,6 +41,15 @@
|
|
|
41
41
|
XCTAssertFalse(buttonElement.isWDAccessibilityContainer);
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
+
- (void)testNativeAccessibilityElementAttribute
|
|
45
|
+
{
|
|
46
|
+
// wdNativeAccessibilityElement must expose the raw, native isAccessibilityElement flag
|
|
47
|
+
// without WebDriverAgent's custom computation applied by wdAccessible
|
|
48
|
+
XCUIElement *buttonElement = self.testedApplication.buttons[@"Button"];
|
|
49
|
+
XCTAssertTrue(buttonElement.exists);
|
|
50
|
+
XCTAssertEqual(buttonElement.wdNativeAccessibilityElement, buttonElement.fb_isAccessibilityElement);
|
|
51
|
+
}
|
|
52
|
+
|
|
44
53
|
- (void)testContainerAccessibilityAttributes
|
|
45
54
|
{
|
|
46
55
|
// "not_accessible" isn't accessibility element, but contains accessibility elements, so it is accessibility container
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
@property (nonatomic, readwrite) NSUInteger wdIndex;
|
|
32
32
|
@property (nonatomic, readwrite, getter=isWDVisible) BOOL wdVisible;
|
|
33
33
|
@property (nonatomic, readwrite, getter=isWDAccessible) BOOL wdAccessible;
|
|
34
|
+
@property (nonatomic, readwrite, getter=isWDNativeAccessibilityElement) BOOL wdNativeAccessibilityElement;
|
|
34
35
|
@property (nonatomic, readwrite, getter = isWDFocused) BOOL wdFocused;
|
|
35
36
|
@property (nonatomic, readwrite, getter = isWDHittable) BOOL wdHittable;
|
|
36
37
|
@property (nonatomic, copy, readwrite, nullable) NSString *wdPlaceholderValue;
|
|
@@ -92,8 +92,8 @@
|
|
|
92
92
|
NSString *resultXml = [self xmlStringWithElement:(id<FBXCElementSnapshot>)element
|
|
93
93
|
xpathQuery:[NSString stringWithFormat:@"//%@[@*]", element.wdType]
|
|
94
94
|
excludingAttributes:@[@"visible"]];
|
|
95
|
-
NSString *expectedXml = [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<%@ type=\"%@\" value=\"%@\" name=\"%@\" label=\"%@\" enabled=\"%@\" visible=\"%@\" accessible=\"%@\" x=\"%@\" y=\"%@\" width=\"%@\" height=\"%@\" index=\"%lu\" hittable=\"%@\" traits=\"%@\" nativeFrame=\"%@\" customActions=\"%@\" private_indexPath=\"top\"/>\n",
|
|
96
|
-
element.wdType, element.wdType, @"йоло<>&"", element.wdName, @"a b", FBBoolToString(element.wdEnabled), FBBoolToString(element.wdVisible), FBBoolToString(element.wdAccessible), element.wdRect[@"x"], element.wdRect[@"y"], element.wdRect[@"width"], element.wdRect[@"height"], element.wdIndex, FBBoolToString(element.wdHittable), element.wdTraits, NSStringFromCGRect(element.wdNativeFrame), element.wdCustomActions];
|
|
95
|
+
NSString *expectedXml = [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<%@ type=\"%@\" value=\"%@\" name=\"%@\" label=\"%@\" enabled=\"%@\" visible=\"%@\" accessible=\"%@\" nativeAccessibilityElement=\"%@\" x=\"%@\" y=\"%@\" width=\"%@\" height=\"%@\" index=\"%lu\" hittable=\"%@\" traits=\"%@\" nativeFrame=\"%@\" customActions=\"%@\" private_indexPath=\"top\"/>\n",
|
|
96
|
+
element.wdType, element.wdType, @"йоло<>&"", element.wdName, @"a b", FBBoolToString(element.wdEnabled), FBBoolToString(element.wdVisible), FBBoolToString(element.wdAccessible), FBBoolToString(element.wdNativeAccessibilityElement), element.wdRect[@"x"], element.wdRect[@"y"], element.wdRect[@"width"], element.wdRect[@"height"], element.wdIndex, FBBoolToString(element.wdHittable), element.wdTraits, NSStringFromCGRect(element.wdNativeFrame), element.wdCustomActions];
|
|
97
97
|
XCTAssertEqualObjects(expectedXml, resultXml);
|
|
98
98
|
}
|
|
99
99
|
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
@property (nonatomic, readwrite) NSUInteger wdIndex;
|
|
30
30
|
@property (nonatomic, readwrite, getter=isWDVisible) BOOL wdVisible;
|
|
31
31
|
@property (nonatomic, readwrite, getter=isWDAccessible) BOOL wdAccessible;
|
|
32
|
+
@property (nonatomic, readwrite, getter=isWDNativeAccessibilityElement) BOOL wdNativeAccessibilityElement;
|
|
32
33
|
@property (nonatomic, readwrite, getter=isWDFocused) BOOL wdFocused;
|
|
33
34
|
@property (nonatomic, readwrite, getter = isWDHittable) BOOL wdHittable;
|
|
34
35
|
@property (copy, nonnull) NSArray *children;
|