@limrun/appium-xcuitest-driver 10.4.3-lim.1
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 +2600 -0
- package/LICENSE +201 -0
- package/README.md +55 -0
- package/build/index.d.ts +5 -0
- package/build/index.js +41 -0
- package/build/lib/app-infos-cache.d.ts +62 -0
- package/build/lib/app-infos-cache.d.ts.map +1 -0
- package/build/lib/app-infos-cache.js +180 -0
- package/build/lib/app-infos-cache.js.map +1 -0
- package/build/lib/app-utils.d.ts +89 -0
- package/build/lib/app-utils.d.ts.map +1 -0
- package/build/lib/app-utils.js +657 -0
- package/build/lib/app-utils.js.map +1 -0
- package/build/lib/commands/active-app-info.d.ts +9 -0
- package/build/lib/commands/active-app-info.d.ts.map +1 -0
- package/build/lib/commands/active-app-info.js +14 -0
- package/build/lib/commands/active-app-info.js.map +1 -0
- package/build/lib/commands/advanced-battery-types.d.ts +444 -0
- package/build/lib/commands/advanced-battery-types.d.ts.map +1 -0
- package/build/lib/commands/advanced-battery-types.js +8 -0
- package/build/lib/commands/advanced-battery-types.js.map +1 -0
- package/build/lib/commands/alert.d.ts +45 -0
- package/build/lib/commands/alert.d.ts.map +1 -0
- package/build/lib/commands/alert.js +87 -0
- package/build/lib/commands/alert.js.map +1 -0
- package/build/lib/commands/app-management.d.ts +153 -0
- package/build/lib/commands/app-management.d.ts.map +1 -0
- package/build/lib/commands/app-management.js +323 -0
- package/build/lib/commands/app-management.js.map +1 -0
- package/build/lib/commands/app-strings.d.ts +16 -0
- package/build/lib/commands/app-strings.d.ts.map +1 -0
- package/build/lib/commands/app-strings.js +30 -0
- package/build/lib/commands/app-strings.js.map +1 -0
- package/build/lib/commands/appearance.d.ts +22 -0
- package/build/lib/commands/appearance.d.ts.map +1 -0
- package/build/lib/commands/appearance.js +74 -0
- package/build/lib/commands/appearance.js.map +1 -0
- package/build/lib/commands/audit.d.ts +43 -0
- package/build/lib/commands/audit.d.ts.map +1 -0
- package/build/lib/commands/audit.js +31 -0
- package/build/lib/commands/audit.js.map +1 -0
- package/build/lib/commands/battery.d.ts +13 -0
- package/build/lib/commands/battery.d.ts.map +1 -0
- package/build/lib/commands/battery.js +49 -0
- package/build/lib/commands/battery.js.map +1 -0
- package/build/lib/commands/bidi/constants.d.ts +6 -0
- package/build/lib/commands/bidi/constants.d.ts.map +1 -0
- package/build/lib/commands/bidi/constants.js +10 -0
- package/build/lib/commands/bidi/constants.js.map +1 -0
- package/build/lib/commands/bidi/models.d.ts +9 -0
- package/build/lib/commands/bidi/models.d.ts.map +1 -0
- package/build/lib/commands/bidi/models.js +54 -0
- package/build/lib/commands/bidi/models.js.map +1 -0
- package/build/lib/commands/bidi/types.d.ts +26 -0
- package/build/lib/commands/bidi/types.d.ts.map +1 -0
- package/build/lib/commands/bidi/types.js +4 -0
- package/build/lib/commands/bidi/types.js.map +1 -0
- package/build/lib/commands/biometric.d.ts +32 -0
- package/build/lib/commands/biometric.d.ts.map +1 -0
- package/build/lib/commands/biometric.js +54 -0
- package/build/lib/commands/biometric.js.map +1 -0
- package/build/lib/commands/certificate.d.ts +50 -0
- package/build/lib/commands/certificate.d.ts.map +1 -0
- package/build/lib/commands/certificate.js +454 -0
- package/build/lib/commands/certificate.js.map +1 -0
- package/build/lib/commands/clipboard.d.ts +21 -0
- package/build/lib/commands/clipboard.d.ts.map +1 -0
- package/build/lib/commands/clipboard.js +36 -0
- package/build/lib/commands/clipboard.js.map +1 -0
- package/build/lib/commands/condition.d.ts +102 -0
- package/build/lib/commands/condition.d.ts.map +1 -0
- package/build/lib/commands/condition.js +146 -0
- package/build/lib/commands/condition.js.map +1 -0
- package/build/lib/commands/content-size.d.ts +30 -0
- package/build/lib/commands/content-size.d.ts.map +1 -0
- package/build/lib/commands/content-size.js +67 -0
- package/build/lib/commands/content-size.js.map +1 -0
- package/build/lib/commands/context.d.ts +191 -0
- package/build/lib/commands/context.d.ts.map +1 -0
- package/build/lib/commands/context.js +625 -0
- package/build/lib/commands/context.js.map +1 -0
- package/build/lib/commands/deviceInfo.d.ts +12 -0
- package/build/lib/commands/deviceInfo.d.ts.map +1 -0
- package/build/lib/commands/deviceInfo.js +25 -0
- package/build/lib/commands/deviceInfo.js.map +1 -0
- package/build/lib/commands/element.d.ts +108 -0
- package/build/lib/commands/element.d.ts.map +1 -0
- package/build/lib/commands/element.js +395 -0
- package/build/lib/commands/element.js.map +1 -0
- package/build/lib/commands/enum.d.ts +105 -0
- package/build/lib/commands/enum.d.ts.map +1 -0
- package/build/lib/commands/enum.js +113 -0
- package/build/lib/commands/enum.js.map +1 -0
- package/build/lib/commands/execute.d.ts +33 -0
- package/build/lib/commands/execute.d.ts.map +1 -0
- package/build/lib/commands/execute.js +142 -0
- package/build/lib/commands/execute.js.map +1 -0
- package/build/lib/commands/file-movement.d.ts +90 -0
- package/build/lib/commands/file-movement.d.ts.map +1 -0
- package/build/lib/commands/file-movement.js +477 -0
- package/build/lib/commands/file-movement.js.map +1 -0
- package/build/lib/commands/find.d.ts +21 -0
- package/build/lib/commands/find.d.ts.map +1 -0
- package/build/lib/commands/find.js +199 -0
- package/build/lib/commands/find.js.map +1 -0
- package/build/lib/commands/general.d.ts +137 -0
- package/build/lib/commands/general.d.ts.map +1 -0
- package/build/lib/commands/general.js +270 -0
- package/build/lib/commands/general.js.map +1 -0
- package/build/lib/commands/geolocation.d.ts +57 -0
- package/build/lib/commands/geolocation.d.ts.map +1 -0
- package/build/lib/commands/geolocation.js +58 -0
- package/build/lib/commands/geolocation.js.map +1 -0
- package/build/lib/commands/gesture.d.ts +283 -0
- package/build/lib/commands/gesture.d.ts.map +1 -0
- package/build/lib/commands/gesture.js +565 -0
- package/build/lib/commands/gesture.js.map +1 -0
- package/build/lib/commands/hid-event.d.ts +2773 -0
- package/build/lib/commands/hid-event.d.ts.map +1 -0
- package/build/lib/commands/hid-event.js +1633 -0
- package/build/lib/commands/hid-event.js.map +1 -0
- package/build/lib/commands/increase-contrast.d.ts +24 -0
- package/build/lib/commands/increase-contrast.d.ts.map +1 -0
- package/build/lib/commands/increase-contrast.js +49 -0
- package/build/lib/commands/increase-contrast.js.map +1 -0
- package/build/lib/commands/iohid.d.ts +1372 -0
- package/build/lib/commands/iohid.d.ts.map +1 -0
- package/build/lib/commands/iohid.js +63 -0
- package/build/lib/commands/iohid.js.map +1 -0
- package/build/lib/commands/keyboard.d.ts +32 -0
- package/build/lib/commands/keyboard.d.ts.map +1 -0
- package/build/lib/commands/keyboard.js +67 -0
- package/build/lib/commands/keyboard.js.map +1 -0
- package/build/lib/commands/keychains.d.ts +10 -0
- package/build/lib/commands/keychains.d.ts.map +1 -0
- package/build/lib/commands/keychains.js +22 -0
- package/build/lib/commands/keychains.js.map +1 -0
- package/build/lib/commands/localization.d.ts +17 -0
- package/build/lib/commands/localization.d.ts.map +1 -0
- package/build/lib/commands/localization.js +34 -0
- package/build/lib/commands/localization.js.map +1 -0
- package/build/lib/commands/location.d.ts +40 -0
- package/build/lib/commands/location.d.ts.map +1 -0
- package/build/lib/commands/location.js +121 -0
- package/build/lib/commands/location.js.map +1 -0
- package/build/lib/commands/lock.d.ts +23 -0
- package/build/lib/commands/lock.d.ts.map +1 -0
- package/build/lib/commands/lock.js +49 -0
- package/build/lib/commands/lock.js.map +1 -0
- package/build/lib/commands/log.d.ts +68 -0
- package/build/lib/commands/log.d.ts.map +1 -0
- package/build/lib/commands/log.js +287 -0
- package/build/lib/commands/log.js.map +1 -0
- package/build/lib/commands/memory.d.ts +11 -0
- package/build/lib/commands/memory.d.ts.map +1 -0
- package/build/lib/commands/memory.js +49 -0
- package/build/lib/commands/memory.js.map +1 -0
- package/build/lib/commands/navigation.d.ts +44 -0
- package/build/lib/commands/navigation.d.ts.map +1 -0
- package/build/lib/commands/navigation.js +121 -0
- package/build/lib/commands/navigation.js.map +1 -0
- package/build/lib/commands/notifications.d.ts +28 -0
- package/build/lib/commands/notifications.d.ts.map +1 -0
- package/build/lib/commands/notifications.js +64 -0
- package/build/lib/commands/notifications.js.map +1 -0
- package/build/lib/commands/pasteboard.d.ts +23 -0
- package/build/lib/commands/pasteboard.d.ts.map +1 -0
- package/build/lib/commands/pasteboard.js +43 -0
- package/build/lib/commands/pasteboard.js.map +1 -0
- package/build/lib/commands/pcap.d.ts +54 -0
- package/build/lib/commands/pcap.d.ts.map +1 -0
- package/build/lib/commands/pcap.js +149 -0
- package/build/lib/commands/pcap.js.map +1 -0
- package/build/lib/commands/performance.d.ts +85 -0
- package/build/lib/commands/performance.d.ts.map +1 -0
- package/build/lib/commands/performance.js +331 -0
- package/build/lib/commands/performance.js.map +1 -0
- package/build/lib/commands/permissions.d.ts +36 -0
- package/build/lib/commands/permissions.d.ts.map +1 -0
- package/build/lib/commands/permissions.js +80 -0
- package/build/lib/commands/permissions.js.map +1 -0
- package/build/lib/commands/proxy-helper.d.ts +15 -0
- package/build/lib/commands/proxy-helper.d.ts.map +1 -0
- package/build/lib/commands/proxy-helper.js +117 -0
- package/build/lib/commands/proxy-helper.js.map +1 -0
- package/build/lib/commands/record-audio.d.ts +69 -0
- package/build/lib/commands/record-audio.d.ts.map +1 -0
- package/build/lib/commands/record-audio.js +228 -0
- package/build/lib/commands/record-audio.js.map +1 -0
- package/build/lib/commands/recordscreen.d.ts +89 -0
- package/build/lib/commands/recordscreen.d.ts.map +1 -0
- package/build/lib/commands/recordscreen.js +326 -0
- package/build/lib/commands/recordscreen.js.map +1 -0
- package/build/lib/commands/screenshots.d.ts +16 -0
- package/build/lib/commands/screenshots.d.ts.map +1 -0
- package/build/lib/commands/screenshots.js +129 -0
- package/build/lib/commands/screenshots.js.map +1 -0
- package/build/lib/commands/simctl.d.ts +27 -0
- package/build/lib/commands/simctl.d.ts.map +1 -0
- package/build/lib/commands/simctl.js +65 -0
- package/build/lib/commands/simctl.js.map +1 -0
- package/build/lib/commands/source.d.ts +16 -0
- package/build/lib/commands/source.d.ts.map +1 -0
- package/build/lib/commands/source.js +128 -0
- package/build/lib/commands/source.js.map +1 -0
- package/build/lib/commands/timeouts.d.ts +53 -0
- package/build/lib/commands/timeouts.d.ts.map +1 -0
- package/build/lib/commands/timeouts.js +71 -0
- package/build/lib/commands/timeouts.js.map +1 -0
- package/build/lib/commands/types.d.ts +539 -0
- package/build/lib/commands/types.d.ts.map +1 -0
- package/build/lib/commands/types.js +3 -0
- package/build/lib/commands/types.js.map +1 -0
- package/build/lib/commands/web.d.ts +297 -0
- package/build/lib/commands/web.d.ts.map +1 -0
- package/build/lib/commands/web.js +1029 -0
- package/build/lib/commands/web.js.map +1 -0
- package/build/lib/commands/xctest-record-screen.d.ts +92 -0
- package/build/lib/commands/xctest-record-screen.d.ts.map +1 -0
- package/build/lib/commands/xctest-record-screen.js +193 -0
- package/build/lib/commands/xctest-record-screen.js.map +1 -0
- package/build/lib/commands/xctest.d.ts +71 -0
- package/build/lib/commands/xctest.d.ts.map +1 -0
- package/build/lib/commands/xctest.js +257 -0
- package/build/lib/commands/xctest.js.map +1 -0
- package/build/lib/css-converter.d.ts +10 -0
- package/build/lib/css-converter.d.ts.map +1 -0
- package/build/lib/css-converter.js +258 -0
- package/build/lib/css-converter.js.map +1 -0
- package/build/lib/desired-caps.d.ts +506 -0
- package/build/lib/desired-caps.d.ts.map +1 -0
- package/build/lib/desired-caps.js +400 -0
- package/build/lib/desired-caps.js.map +1 -0
- package/build/lib/device-connections-factory.d.ts +13 -0
- package/build/lib/device-connections-factory.d.ts.map +1 -0
- package/build/lib/device-connections-factory.js +244 -0
- package/build/lib/device-connections-factory.js.map +1 -0
- package/build/lib/device-log/helpers.d.ts +10 -0
- package/build/lib/device-log/helpers.d.ts.map +1 -0
- package/build/lib/device-log/helpers.js +37 -0
- package/build/lib/device-log/helpers.js.map +1 -0
- package/build/lib/device-log/ios-crash-log.d.ts +34 -0
- package/build/lib/device-log/ios-crash-log.d.ts.map +1 -0
- package/build/lib/device-log/ios-crash-log.js +141 -0
- package/build/lib/device-log/ios-crash-log.js.map +1 -0
- package/build/lib/device-log/ios-device-log.d.ts +19 -0
- package/build/lib/device-log/ios-device-log.d.ts.map +1 -0
- package/build/lib/device-log/ios-device-log.js +42 -0
- package/build/lib/device-log/ios-device-log.js.map +1 -0
- package/build/lib/device-log/ios-log.d.ts +24 -0
- package/build/lib/device-log/ios-log.d.ts.map +1 -0
- package/build/lib/device-log/ios-log.js +50 -0
- package/build/lib/device-log/ios-log.js.map +1 -0
- package/build/lib/device-log/ios-performance-log.d.ts +18 -0
- package/build/lib/device-log/ios-performance-log.d.ts.map +1 -0
- package/build/lib/device-log/ios-performance-log.js +43 -0
- package/build/lib/device-log/ios-performance-log.js.map +1 -0
- package/build/lib/device-log/ios-simulator-log.d.ts +38 -0
- package/build/lib/device-log/ios-simulator-log.d.ts.map +1 -0
- package/build/lib/device-log/ios-simulator-log.js +184 -0
- package/build/lib/device-log/ios-simulator-log.js.map +1 -0
- package/build/lib/device-log/line-consuming-log.d.ts +9 -0
- package/build/lib/device-log/line-consuming-log.d.ts.map +1 -0
- package/build/lib/device-log/line-consuming-log.js +16 -0
- package/build/lib/device-log/line-consuming-log.js.map +1 -0
- package/build/lib/device-log/safari-console-log.d.ts +67 -0
- package/build/lib/device-log/safari-console-log.d.ts.map +1 -0
- package/build/lib/device-log/safari-console-log.js +81 -0
- package/build/lib/device-log/safari-console-log.js.map +1 -0
- package/build/lib/device-log/safari-network-log.d.ts +75 -0
- package/build/lib/device-log/safari-network-log.d.ts.map +1 -0
- package/build/lib/device-log/safari-network-log.js +47 -0
- package/build/lib/device-log/safari-network-log.js.map +1 -0
- package/build/lib/doctor/checks.d.ts +3 -0
- package/build/lib/doctor/checks.d.ts.map +1 -0
- package/build/lib/doctor/checks.js +39 -0
- package/build/lib/doctor/checks.js.map +1 -0
- package/build/lib/doctor/optional-checks.d.ts +46 -0
- package/build/lib/doctor/optional-checks.d.ts.map +1 -0
- package/build/lib/doctor/optional-checks.js +129 -0
- package/build/lib/doctor/optional-checks.js.map +1 -0
- package/build/lib/doctor/required-checks.d.ts +42 -0
- package/build/lib/doctor/required-checks.d.ts.map +1 -0
- package/build/lib/doctor/required-checks.js +94 -0
- package/build/lib/doctor/required-checks.js.map +1 -0
- package/build/lib/doctor/utils.d.ts +8 -0
- package/build/lib/doctor/utils.d.ts.map +1 -0
- package/build/lib/doctor/utils.js +21 -0
- package/build/lib/doctor/utils.js.map +1 -0
- package/build/lib/driver.d.ts +2429 -0
- package/build/lib/driver.d.ts.map +1 -0
- package/build/lib/driver.js +1967 -0
- package/build/lib/driver.js.map +1 -0
- package/build/lib/execute-method-map.d.ts +552 -0
- package/build/lib/execute-method-map.d.ts.map +1 -0
- package/build/lib/execute-method-map.js +586 -0
- package/build/lib/execute-method-map.js.map +1 -0
- package/build/lib/ios-fs-helpers.d.ts +75 -0
- package/build/lib/ios-fs-helpers.d.ts.map +1 -0
- package/build/lib/ios-fs-helpers.js +370 -0
- package/build/lib/ios-fs-helpers.js.map +1 -0
- package/build/lib/ios-generic-simulators.d.ts +6 -0
- package/build/lib/ios-generic-simulators.d.ts.map +1 -0
- package/build/lib/ios-generic-simulators.js +14 -0
- package/build/lib/ios-generic-simulators.js.map +1 -0
- package/build/lib/logger.d.ts +3 -0
- package/build/lib/logger.d.ts.map +1 -0
- package/build/lib/logger.js +6 -0
- package/build/lib/logger.js.map +1 -0
- package/build/lib/method-map.d.ts +229 -0
- package/build/lib/method-map.d.ts.map +1 -0
- package/build/lib/method-map.js +200 -0
- package/build/lib/method-map.js.map +1 -0
- package/build/lib/real-device-clients/base-device-client.d.ts +22 -0
- package/build/lib/real-device-clients/base-device-client.d.ts.map +1 -0
- package/build/lib/real-device-clients/base-device-client.js +14 -0
- package/build/lib/real-device-clients/base-device-client.js.map +1 -0
- package/build/lib/real-device-clients/py-ios-device-client.d.ts +21 -0
- package/build/lib/real-device-clients/py-ios-device-client.d.ts.map +1 -0
- package/build/lib/real-device-clients/py-ios-device-client.js +125 -0
- package/build/lib/real-device-clients/py-ios-device-client.js.map +1 -0
- package/build/lib/real-device-management.d.ts +53 -0
- package/build/lib/real-device-management.d.ts.map +1 -0
- package/build/lib/real-device-management.js +128 -0
- package/build/lib/real-device-management.js.map +1 -0
- package/build/lib/real-device.d.ts +112 -0
- package/build/lib/real-device.d.ts.map +1 -0
- package/build/lib/real-device.js +352 -0
- package/build/lib/real-device.js.map +1 -0
- package/build/lib/simulator-management.d.ts +96 -0
- package/build/lib/simulator-management.d.ts.map +1 -0
- package/build/lib/simulator-management.js +278 -0
- package/build/lib/simulator-management.js.map +1 -0
- package/build/lib/stubs.d.ts +3 -0
- package/build/lib/stubs.d.ts.map +1 -0
- package/build/lib/stubs.js +3 -0
- package/build/lib/stubs.js.map +1 -0
- package/build/lib/types.d.ts +31 -0
- package/build/lib/types.d.ts.map +1 -0
- package/build/lib/types.js +3 -0
- package/build/lib/types.js.map +1 -0
- package/build/lib/utils.d.ts +191 -0
- package/build/lib/utils.d.ts.map +1 -0
- package/build/lib/utils.js +549 -0
- package/build/lib/utils.js.map +1 -0
- package/build/lib/xcrun.d.ts +3 -0
- package/build/lib/xcrun.d.ts.map +1 -0
- package/build/lib/xcrun.js +17 -0
- package/build/lib/xcrun.js.map +1 -0
- package/index.js +7 -0
- package/lib/app-infos-cache.js +187 -0
- package/lib/app-utils.js +710 -0
- package/lib/commands/active-app-info.js +12 -0
- package/lib/commands/advanced-battery-types.ts +454 -0
- package/lib/commands/alert.js +88 -0
- package/lib/commands/app-management.js +346 -0
- package/lib/commands/app-strings.js +30 -0
- package/lib/commands/appearance.js +71 -0
- package/lib/commands/audit.js +31 -0
- package/lib/commands/battery.js +45 -0
- package/lib/commands/bidi/constants.ts +6 -0
- package/lib/commands/bidi/models.ts +55 -0
- package/lib/commands/bidi/types.ts +31 -0
- package/lib/commands/biometric.js +53 -0
- package/lib/commands/certificate.js +497 -0
- package/lib/commands/clipboard.js +35 -0
- package/lib/commands/condition.js +155 -0
- package/lib/commands/content-size.js +68 -0
- package/lib/commands/context.js +705 -0
- package/lib/commands/deviceInfo.js +27 -0
- package/lib/commands/element.js +423 -0
- package/lib/commands/enum.ts +108 -0
- package/lib/commands/execute.js +153 -0
- package/lib/commands/file-movement.js +510 -0
- package/lib/commands/find.js +205 -0
- package/lib/commands/general.js +278 -0
- package/lib/commands/geolocation.js +56 -0
- package/lib/commands/gesture.js +596 -0
- package/lib/commands/hid-event.ts +1634 -0
- package/lib/commands/increase-contrast.js +50 -0
- package/lib/commands/iohid.js +64 -0
- package/lib/commands/keyboard.js +62 -0
- package/lib/commands/keychains.js +18 -0
- package/lib/commands/localization.js +30 -0
- package/lib/commands/location.js +131 -0
- package/lib/commands/lock.js +46 -0
- package/lib/commands/log.js +327 -0
- package/lib/commands/memory.js +51 -0
- package/lib/commands/navigation.js +125 -0
- package/lib/commands/notifications.js +66 -0
- package/lib/commands/pasteboard.js +42 -0
- package/lib/commands/pcap.js +168 -0
- package/lib/commands/performance.js +392 -0
- package/lib/commands/permissions.js +85 -0
- package/lib/commands/proxy-helper.js +122 -0
- package/lib/commands/record-audio.js +264 -0
- package/lib/commands/recordscreen.js +391 -0
- package/lib/commands/screenshots.js +137 -0
- package/lib/commands/simctl.js +71 -0
- package/lib/commands/source.js +131 -0
- package/lib/commands/timeouts.js +68 -0
- package/lib/commands/types.ts +648 -0
- package/lib/commands/web.js +1113 -0
- package/lib/commands/xctest-record-screen.js +204 -0
- package/lib/commands/xctest.js +285 -0
- package/lib/css-converter.js +311 -0
- package/lib/desired-caps.js +396 -0
- package/lib/device-connections-factory.js +269 -0
- package/lib/device-log/helpers.ts +40 -0
- package/lib/device-log/ios-crash-log.ts +166 -0
- package/lib/device-log/ios-device-log.ts +51 -0
- package/lib/device-log/ios-log.ts +70 -0
- package/lib/device-log/ios-performance-log.ts +50 -0
- package/lib/device-log/ios-simulator-log.ts +202 -0
- package/lib/device-log/line-consuming-log.ts +16 -0
- package/lib/device-log/safari-console-log.ts +117 -0
- package/lib/device-log/safari-network-log.ts +120 -0
- package/lib/doctor/checks.ts +3 -0
- package/lib/doctor/optional-checks.ts +173 -0
- package/lib/doctor/required-checks.ts +120 -0
- package/lib/doctor/utils.ts +18 -0
- package/lib/driver.js +2316 -0
- package/lib/execute-method-map.ts +585 -0
- package/lib/ios-fs-helpers.js +355 -0
- package/lib/ios-generic-simulators.js +11 -0
- package/lib/logger.js +5 -0
- package/lib/method-map.js +196 -0
- package/lib/real-device-clients/base-device-client.ts +34 -0
- package/lib/real-device-clients/py-ios-device-client.ts +149 -0
- package/lib/real-device-management.js +133 -0
- package/lib/real-device.js +347 -0
- package/lib/simulator-management.js +324 -0
- package/lib/stubs.ts +3 -0
- package/lib/types.ts +33 -0
- package/lib/utils.js +551 -0
- package/lib/xcrun.js +16 -0
- package/package.json +175 -0
- package/scripts/build-docs.js +56 -0
- package/scripts/build-wda.js +42 -0
- package/scripts/download-wda-sim.mjs +68 -0
- package/scripts/image-mounter.mjs +239 -0
- package/scripts/open-wda.mjs +15 -0
- package/scripts/tunnel-creation.mjs +359 -0
- package/scripts/utils.js +16 -0
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.assertIDB = assertIDB;
|
|
7
|
+
exports.parseXCTestStdout = parseXCTestStdout;
|
|
8
|
+
exports.mobileRunXCTest = mobileRunXCTest;
|
|
9
|
+
exports.mobileInstallXCTestBundle = mobileInstallXCTestBundle;
|
|
10
|
+
exports.mobileListXCTestBundles = mobileListXCTestBundles;
|
|
11
|
+
exports.mobileListXCTestsInTestBundle = mobileListXCTestsInTestBundle;
|
|
12
|
+
const bluebird_1 = __importDefault(require("bluebird"));
|
|
13
|
+
const support_1 = require("appium/support");
|
|
14
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
15
|
+
const driver_1 = require("appium/driver");
|
|
16
|
+
const XCTEST_TIMEOUT = 360000; // 60 minute timeout
|
|
17
|
+
const xctestLog = support_1.logger.getLogger('XCTest');
|
|
18
|
+
/**
|
|
19
|
+
* Asserts that IDB is present and that launchWithIDB was used
|
|
20
|
+
*
|
|
21
|
+
* @param {XCUITestDriver['opts']} opts Opts object from the driver instance
|
|
22
|
+
*/
|
|
23
|
+
function assertIDB(opts) {
|
|
24
|
+
if (!this.device?.idb || !opts.launchWithIDB) {
|
|
25
|
+
throw new Error(`To use XCTest runner, IDB (https://github.com/facebook/idb) must be installed ` +
|
|
26
|
+
`and sessions must be run with the "launchWithIDB" capability`);
|
|
27
|
+
}
|
|
28
|
+
return this.device.idb;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Parse the stdout of XC test log
|
|
32
|
+
* @param {string} stdout A line of standard out from `idb xctest run ...`
|
|
33
|
+
* @returns {XCTestResult[]|string[]} results The final output of the XCTest run
|
|
34
|
+
*/
|
|
35
|
+
function parseXCTestStdout(stdout) {
|
|
36
|
+
// Parses a 'key' into JSON format
|
|
37
|
+
function parseKey(name) {
|
|
38
|
+
const words = name.split(' ');
|
|
39
|
+
let out = '';
|
|
40
|
+
for (const word of words) {
|
|
41
|
+
out += word.substr(0, 1).toUpperCase() + word.substr(1);
|
|
42
|
+
}
|
|
43
|
+
return out.substr(0, 1).toLowerCase() + out.substr(1);
|
|
44
|
+
}
|
|
45
|
+
// Parses a 'value' into JSON format
|
|
46
|
+
function parseValue(value) {
|
|
47
|
+
value = value || '';
|
|
48
|
+
switch (value.toLowerCase()) {
|
|
49
|
+
case 'true':
|
|
50
|
+
return true;
|
|
51
|
+
case 'false':
|
|
52
|
+
return false;
|
|
53
|
+
case '':
|
|
54
|
+
return null;
|
|
55
|
+
default:
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
if (!isNaN(value)) {
|
|
59
|
+
if (!lodash_1.default.isString(value)) {
|
|
60
|
+
return 0;
|
|
61
|
+
}
|
|
62
|
+
else if (value.indexOf('.') > 0) {
|
|
63
|
+
return parseFloat(value);
|
|
64
|
+
}
|
|
65
|
+
return parseInt(value, 10);
|
|
66
|
+
}
|
|
67
|
+
return value;
|
|
68
|
+
}
|
|
69
|
+
if (!stdout) {
|
|
70
|
+
return [];
|
|
71
|
+
}
|
|
72
|
+
// Parse each line into an array
|
|
73
|
+
const lines = stdout.trim().split('\n');
|
|
74
|
+
// One single string, just return the string
|
|
75
|
+
if (lines.length === 1 && !lines[0].includes('|')) {
|
|
76
|
+
return [lines[0]];
|
|
77
|
+
}
|
|
78
|
+
/** @type {XCTestResult[]} */
|
|
79
|
+
const results = [];
|
|
80
|
+
for (const line of lines) {
|
|
81
|
+
// The properties are split up by pipes and each property
|
|
82
|
+
// has the format "Some Key : Some Value"
|
|
83
|
+
const properties = line.split('|');
|
|
84
|
+
// Parse each property
|
|
85
|
+
/** @type {XCTestResult} */
|
|
86
|
+
const output = /** @type {any} */ ({});
|
|
87
|
+
let entryIndex = 0;
|
|
88
|
+
for (const prop of properties) {
|
|
89
|
+
if (entryIndex === 0) {
|
|
90
|
+
// The first property only contains one string that contains
|
|
91
|
+
// the test name (e.g.: 'XCTesterAppUITests - XCTesterAppUITests.XCTesterAppUITests/testExample')
|
|
92
|
+
output.testName = prop.trim();
|
|
93
|
+
}
|
|
94
|
+
else if (prop.trim().startsWith('Location')) {
|
|
95
|
+
// The Location property has a value that comes after 'Location' without colon.
|
|
96
|
+
// e.g. Location /path/to/XCTesterAppUITests/XCTesterAppUITests.swift:36
|
|
97
|
+
output.location = prop.substring(prop.indexOf('Location') + 8).trim();
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
let [key, value] = prop.split(':');
|
|
101
|
+
output[parseKey(key.trim())] = parseValue(value ? value.trim() : '');
|
|
102
|
+
}
|
|
103
|
+
entryIndex++;
|
|
104
|
+
}
|
|
105
|
+
// keep backward compatibility
|
|
106
|
+
// old pattern: XCTesterAppUITests - XCTesterAppUITests.XCTesterAppUITests/testExample | Passed: True | Crashed: False | Duration: 1.485 | Failure message: | Location :0
|
|
107
|
+
// latest pattern: XCTesterAppUITests - XCTesterAppUITests.XCTesterAppUITests/testExample | Status: passed | Duration: 1.9255789518356323
|
|
108
|
+
if (!output.passed) {
|
|
109
|
+
output.passed = output.status === 'passed';
|
|
110
|
+
output.crashed = output.status === 'crashed';
|
|
111
|
+
}
|
|
112
|
+
else if (!output.status) {
|
|
113
|
+
if (output.passed) {
|
|
114
|
+
output.status = 'passed';
|
|
115
|
+
}
|
|
116
|
+
else if (output.crashed) {
|
|
117
|
+
output.status = 'crashed';
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
output.status = 'failed';
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Add this line to the results
|
|
124
|
+
results.push(output);
|
|
125
|
+
}
|
|
126
|
+
return results;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* @typedef {Error} XCUITestError
|
|
130
|
+
*
|
|
131
|
+
* @property {number} code Subprocess exit code
|
|
132
|
+
* @property {string} signal The signal (SIG*) that caused the process to fail
|
|
133
|
+
* @property {XCTestResult[]} results The output of the failed test (if there is output)
|
|
134
|
+
*/
|
|
135
|
+
/**
|
|
136
|
+
* Run a native XCTest script.
|
|
137
|
+
*
|
|
138
|
+
* Launches a subprocess that runs the XC Test and blocks until it is completed. Parses the stdout of the process and returns its result as an array.
|
|
139
|
+
*
|
|
140
|
+
* **Facebook's [IDB](https://github.com/facebook/idb) tool is required** to run such tests; see [the idb docs](https://fbidb.io/docs/test-execution/) for reference.
|
|
141
|
+
*
|
|
142
|
+
* @param {string} testRunnerBundleId - Test app bundle (e.g.: `io.appium.XCTesterAppUITests.xctrunner`)
|
|
143
|
+
* @param {string} appUnderTestBundleId - App-under-test bundle
|
|
144
|
+
* @param {string} xcTestBundleId - XCTest bundle ID
|
|
145
|
+
* @param {string[]} args - Launch arguments to start the test with (see [reference documentation](https://developer.apple.com/documentation/xctest/xcuiapplication/1500477-launcharguments))
|
|
146
|
+
* @param {'app'|'ui'|'logic'} testType - XC test type
|
|
147
|
+
* @param {import('@appium/types').StringRecord} [env] - Environment variables passed to test
|
|
148
|
+
* @param {number} timeout - Timeout (in ms) for session completion.
|
|
149
|
+
* @throws {XCUITestError} Error thrown if subprocess returns non-zero exit code
|
|
150
|
+
* @returns {Promise<import('./types').RunXCTestResult>} The array of test results
|
|
151
|
+
* @this {XCUITestDriver}
|
|
152
|
+
*/
|
|
153
|
+
async function mobileRunXCTest(testRunnerBundleId, appUnderTestBundleId, xcTestBundleId, args = [], testType = 'ui', env, timeout = XCTEST_TIMEOUT) {
|
|
154
|
+
const subproc = await assertIDB(this.opts).runXCUITest(testRunnerBundleId, appUnderTestBundleId, xcTestBundleId, { env, args, testType });
|
|
155
|
+
return await new bluebird_1.default((resolve, reject) => {
|
|
156
|
+
let mostRecentLogObject = null;
|
|
157
|
+
let xctestTimeout;
|
|
158
|
+
let lastErrorMessage = null;
|
|
159
|
+
if (timeout > 0) {
|
|
160
|
+
xctestTimeout = setTimeout(() => reject(new driver_1.errors.TimeoutError(`Timed out after '${timeout}ms' waiting for XCTest to complete`)), timeout);
|
|
161
|
+
}
|
|
162
|
+
subproc.on('output', (stdout, stderr) => {
|
|
163
|
+
if (stdout) {
|
|
164
|
+
try {
|
|
165
|
+
mostRecentLogObject = parseXCTestStdout(stdout);
|
|
166
|
+
}
|
|
167
|
+
catch (err) {
|
|
168
|
+
// Fails if log parsing fails.
|
|
169
|
+
// This is in case IDB changes the way that logs are formatted and
|
|
170
|
+
// it breaks 'parseXCTestStdout'. If that happens we still want the process
|
|
171
|
+
// to finish
|
|
172
|
+
this.log.warn(`Failed to parse logs from test output: '${stdout}'`);
|
|
173
|
+
this.log.debug(err.stack);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
if (stderr) {
|
|
177
|
+
lastErrorMessage = stderr;
|
|
178
|
+
xctestLog.error(stderr);
|
|
179
|
+
}
|
|
180
|
+
if (stdout) {
|
|
181
|
+
xctestLog.info(stdout);
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
subproc.on('exit', (code, signal) => {
|
|
185
|
+
clearTimeout(xctestTimeout);
|
|
186
|
+
if (code !== 0) {
|
|
187
|
+
const err = /** @type {any} */ (new Error(lastErrorMessage || mostRecentLogObject));
|
|
188
|
+
err.code = code;
|
|
189
|
+
if (signal != null) {
|
|
190
|
+
err.signal = signal;
|
|
191
|
+
}
|
|
192
|
+
if (mostRecentLogObject) {
|
|
193
|
+
err.result = mostRecentLogObject;
|
|
194
|
+
}
|
|
195
|
+
return reject(err);
|
|
196
|
+
}
|
|
197
|
+
resolve({
|
|
198
|
+
code,
|
|
199
|
+
signal,
|
|
200
|
+
results: mostRecentLogObject,
|
|
201
|
+
passed: true,
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Installs an XCTest bundle to the device under test.
|
|
208
|
+
*
|
|
209
|
+
* **Facebook's [IDB](https://github.com/facebook/idb) tool is required** for this command to work.
|
|
210
|
+
*
|
|
211
|
+
* @param {string} xctestApp - Path of the XCTest app (URL or filename with extension `.app`)
|
|
212
|
+
* @returns {Promise<void>}
|
|
213
|
+
* @this {XCUITestDriver}
|
|
214
|
+
*/
|
|
215
|
+
async function mobileInstallXCTestBundle(xctestApp) {
|
|
216
|
+
if (!lodash_1.default.isString(xctestApp)) {
|
|
217
|
+
throw new driver_1.errors.InvalidArgumentError(`'xctestApp' is a required parameter for 'installXCTestBundle' and ` +
|
|
218
|
+
`must be a string. Found '${xctestApp}'`);
|
|
219
|
+
}
|
|
220
|
+
xctestLog.info(`Installing bundle '${xctestApp}'`);
|
|
221
|
+
const idb = assertIDB(this.opts);
|
|
222
|
+
const res = await this.helpers.configureApp(xctestApp, '.xctest');
|
|
223
|
+
await idb.installXCTestBundle(res);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* List XCTest bundles that are installed on the device.
|
|
227
|
+
*
|
|
228
|
+
* **Facebook's [IDB](https://github.com/facebook/idb) tool is required** for this command to work.
|
|
229
|
+
*
|
|
230
|
+
* @returns {Promise<string[]>} List of XCTest bundles (e.g.: `XCTesterAppUITests.XCTesterAppUITests/testLaunchPerformance`)
|
|
231
|
+
* @this {XCUITestDriver}
|
|
232
|
+
*/
|
|
233
|
+
async function mobileListXCTestBundles() {
|
|
234
|
+
return await assertIDB(this.opts).listXCTestBundles();
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* List XCTests in a test bundle
|
|
238
|
+
*
|
|
239
|
+
* **Facebook's [IDB](https://github.com/facebook/idb) tool is required** for this command to work.
|
|
240
|
+
* @param {string} bundle - Bundle ID of the XCTest
|
|
241
|
+
*
|
|
242
|
+
* @returns {Promise<string[]>} The list of xctests in the test bundle (e.g., `['XCTesterAppUITests.XCTesterAppUITests/testExample', 'XCTesterAppUITests.XCTesterAppUITests/testLaunchPerformance']`)
|
|
243
|
+
* @this {XCUITestDriver}
|
|
244
|
+
*/
|
|
245
|
+
async function mobileListXCTestsInTestBundle(bundle) {
|
|
246
|
+
if (!lodash_1.default.isString(bundle)) {
|
|
247
|
+
throw new driver_1.errors.InvalidArgumentError(`'bundle' is a required parameter for 'listXCTestsInTestBundle' and ` +
|
|
248
|
+
`must be a string. Found '${bundle}'`);
|
|
249
|
+
}
|
|
250
|
+
const idb = assertIDB(this.opts);
|
|
251
|
+
return await idb.listXCTestsInTestBundle(bundle);
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* @typedef {import('../driver').XCUITestDriver} XCUITestDriver
|
|
255
|
+
* @typedef {import('./types').XCTestResult} XCTestResult
|
|
256
|
+
*/
|
|
257
|
+
//# sourceMappingURL=xctest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xctest.js","sourceRoot":"","sources":["../../../lib/commands/xctest.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export default CssConverter;
|
|
2
|
+
declare namespace CssConverter {
|
|
3
|
+
/**
|
|
4
|
+
* Convert a CSS selector to a iOS Class Chain selector
|
|
5
|
+
* @param {string} cssSelector CSS Selector
|
|
6
|
+
* @returns {string} The CSS selector converted to an iOS Class Chain
|
|
7
|
+
*/
|
|
8
|
+
function toIosClassChainSelector(cssSelector: string): string;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=css-converter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css-converter.d.ts","sourceRoot":"","sources":["../../lib/css-converter.js"],"names":[],"mappings":";;IA6RA;;;;OAIG;IACH,8CAHW,MAAM,GACJ,MAAM,CAoBlB"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const css_selector_parser_1 = require("css-selector-parser");
|
|
7
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
+
const driver_1 = require("appium/driver");
|
|
9
|
+
const logger_js_1 = __importDefault(require("./logger.js"));
|
|
10
|
+
const CssConverter = {};
|
|
11
|
+
const parseCssSelector = (0, css_selector_parser_1.createParser)({
|
|
12
|
+
syntax: {
|
|
13
|
+
pseudoClasses: {
|
|
14
|
+
unknown: 'accept',
|
|
15
|
+
definitions: {
|
|
16
|
+
Selector: ['has'],
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
combinators: ['>', '+', '~'],
|
|
20
|
+
attributes: {
|
|
21
|
+
operators: ['^=', '$=', '*=', '~=', '='],
|
|
22
|
+
},
|
|
23
|
+
ids: true,
|
|
24
|
+
classNames: true,
|
|
25
|
+
tag: {
|
|
26
|
+
wildcard: true,
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
substitutes: true,
|
|
30
|
+
});
|
|
31
|
+
const BOOLEAN_ATTRS = ['visible', 'accessible', 'accessibility-container', 'enabled'];
|
|
32
|
+
const NUMERIC_ATTRS = ['index'];
|
|
33
|
+
const STR_ATTRS = ['label', 'name', 'value', 'type'];
|
|
34
|
+
const ALL_ATTRS = [...BOOLEAN_ATTRS, ...NUMERIC_ATTRS, ...STR_ATTRS];
|
|
35
|
+
/**
|
|
36
|
+
* @type {[string, string[]][]}
|
|
37
|
+
*/
|
|
38
|
+
const ATTRIBUTE_ALIASES = [
|
|
39
|
+
['name', ['id']],
|
|
40
|
+
['index', ['nth-child']],
|
|
41
|
+
];
|
|
42
|
+
/**
|
|
43
|
+
* Convert hyphen separated word to camel case
|
|
44
|
+
*
|
|
45
|
+
* @param {string?} str
|
|
46
|
+
* @returns {string} The hyphen separated word translated to camel case
|
|
47
|
+
*/
|
|
48
|
+
function toCamelCase(str) {
|
|
49
|
+
if (!str) {
|
|
50
|
+
return '';
|
|
51
|
+
}
|
|
52
|
+
const tokens = str
|
|
53
|
+
.split('-')
|
|
54
|
+
.map((str) => str.charAt(0).toUpperCase() + str.slice(1).toLowerCase());
|
|
55
|
+
const out = tokens.join('');
|
|
56
|
+
return out.charAt(0).toLowerCase() + out.slice(1);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get the boolean from a CSS object. If empty, return true. If not true/false/empty, throw exception
|
|
60
|
+
*
|
|
61
|
+
* @param {import('css-selector-parser').AstAttribute|import('css-selector-parser').AstPseudoClass} cssAttr
|
|
62
|
+
* @returns {string} Either 'true' or 'false'. If value is empty, return 'true'
|
|
63
|
+
*/
|
|
64
|
+
function requireBoolean(cssAttr) {
|
|
65
|
+
// @ts-ignore We only support strings
|
|
66
|
+
const attrValue = cssAttr.value?.value;
|
|
67
|
+
const val = lodash_1.default.toLower(attrValue) || 'true'; // an omitted boolean attribute means 'true' (e.g.: input[checked] means checked is true)
|
|
68
|
+
switch (val) {
|
|
69
|
+
case '0':
|
|
70
|
+
case 'false':
|
|
71
|
+
return '0';
|
|
72
|
+
case '1':
|
|
73
|
+
case 'true':
|
|
74
|
+
return '1';
|
|
75
|
+
default:
|
|
76
|
+
throw new TypeError(`'${cssAttr.name}' must be true/1 or false/0 or empty. Found '${attrValue}'`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get the canonical form of a CSS attribute name
|
|
81
|
+
*
|
|
82
|
+
* Converts to lowercase and if an attribute name is an alias for something else, return
|
|
83
|
+
* what it is an alias for
|
|
84
|
+
*
|
|
85
|
+
* @param {import('css-selector-parser').AstAttribute|import('css-selector-parser').AstPseudoClass} cssEntity
|
|
86
|
+
* @returns {string} The canonical attribute name
|
|
87
|
+
*/
|
|
88
|
+
function requireEntityName(cssEntity) {
|
|
89
|
+
const entityName = cssEntity.name.toLowerCase();
|
|
90
|
+
// Check if it's supported and if it is, return it
|
|
91
|
+
if (ALL_ATTRS.includes(entityName)) {
|
|
92
|
+
return entityName.toLowerCase();
|
|
93
|
+
}
|
|
94
|
+
// If attrName is an alias for something else, return that
|
|
95
|
+
for (const [officialAttr, aliasAttrs] of ATTRIBUTE_ALIASES) {
|
|
96
|
+
if (aliasAttrs.includes(entityName)) {
|
|
97
|
+
return officialAttr;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
throw new Error(`'${entityName}' is not a valid attribute. ` +
|
|
101
|
+
`Supported attributes are: '${ALL_ATTRS.join(', ')}'`);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Convert a CSS attribute into a UiSelector method call
|
|
105
|
+
*
|
|
106
|
+
* @param {import('css-selector-parser').AstAttribute} cssAttr CSS attribute object
|
|
107
|
+
* @returns {string|{index: string|undefined}} CSS attribute parsed as UiSelector
|
|
108
|
+
*/
|
|
109
|
+
function parseAttr(cssAttr) {
|
|
110
|
+
// @ts-ignore We only care for strings
|
|
111
|
+
const attrValue = cssAttr.value?.value;
|
|
112
|
+
if (!lodash_1.default.isString(attrValue) && !lodash_1.default.isEmpty(attrValue)) {
|
|
113
|
+
throw new TypeError(`'${cssAttr.name}=${attrValue}' is an invalid attribute. ` +
|
|
114
|
+
`Only 'string' and empty attribute types are supported. Found '${attrValue}'`);
|
|
115
|
+
}
|
|
116
|
+
const attrName = toCamelCase(requireEntityName(cssAttr));
|
|
117
|
+
// Validate that it's a supported attribute
|
|
118
|
+
if (!STR_ATTRS.includes(attrName) && !BOOLEAN_ATTRS.includes(attrName)) {
|
|
119
|
+
throw new Error(`'${attrName}' is not supported. Supported attributes are ` +
|
|
120
|
+
`'${[...STR_ATTRS, ...BOOLEAN_ATTRS].join(', ')}'`);
|
|
121
|
+
}
|
|
122
|
+
// Parse index if it's an index attribute
|
|
123
|
+
if (attrName === 'index') {
|
|
124
|
+
return { index: attrValue };
|
|
125
|
+
}
|
|
126
|
+
if (BOOLEAN_ATTRS.includes(attrName)) {
|
|
127
|
+
return `${attrName} == ${requireBoolean(cssAttr)}`;
|
|
128
|
+
}
|
|
129
|
+
let value = attrValue || '';
|
|
130
|
+
if (value === '') {
|
|
131
|
+
return `[${attrName} LIKE ${value}]`;
|
|
132
|
+
}
|
|
133
|
+
switch (cssAttr.operator) {
|
|
134
|
+
case '=':
|
|
135
|
+
return `${attrName} == "${value}"`;
|
|
136
|
+
case '*=':
|
|
137
|
+
return `${attrName} MATCHES "${lodash_1.default.escapeRegExp(value)}"`;
|
|
138
|
+
case '^=':
|
|
139
|
+
return `${attrName} BEGINSWITH "${value}"`;
|
|
140
|
+
case '$=':
|
|
141
|
+
return `${attrName} ENDSWITH "${value}"`;
|
|
142
|
+
case '~=':
|
|
143
|
+
return `${attrName} CONTAINS "${value}"`;
|
|
144
|
+
default:
|
|
145
|
+
// Unreachable, but adding error in case a new CSS attribute is added.
|
|
146
|
+
throw new Error(`Unsupported CSS attribute operator '${cssAttr.operator}'. ` +
|
|
147
|
+
` '=', '*=', '^=', '$=' and '~=' are supported.`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Convert a CSS pseudo class to a UiSelector
|
|
152
|
+
*
|
|
153
|
+
* @param {import('css-selector-parser').AstPseudoClass} cssPseudo
|
|
154
|
+
* @returns {string|{index: string|undefined}|undefined} Pseudo selector parsed as UiSelector
|
|
155
|
+
*/
|
|
156
|
+
function parsePseudo(cssPseudo) {
|
|
157
|
+
// @ts-ignore We only care for strings
|
|
158
|
+
const argValue = cssPseudo.argument?.value;
|
|
159
|
+
if (!lodash_1.default.isString(argValue) && !lodash_1.default.isEmpty(argValue)) {
|
|
160
|
+
throw new TypeError(`'${cssPseudo.name}=${argValue}'. ` +
|
|
161
|
+
`Unsupported css pseudo class value: '${argValue}'. Only 'string' type or empty is supported.`);
|
|
162
|
+
}
|
|
163
|
+
const pseudoName = requireEntityName(cssPseudo);
|
|
164
|
+
if (BOOLEAN_ATTRS.includes(pseudoName)) {
|
|
165
|
+
return `${toCamelCase(pseudoName)} == ${requireBoolean(cssPseudo)}`;
|
|
166
|
+
}
|
|
167
|
+
if (pseudoName === 'index') {
|
|
168
|
+
return { index: argValue };
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Convert a CSS rule to a UiSelector
|
|
173
|
+
* @param {import('css-selector-parser').AstRule} cssRule CSS rule definition
|
|
174
|
+
*/
|
|
175
|
+
function parseCssRule(cssRule) {
|
|
176
|
+
if (cssRule.combinator && ![' ', '>'].includes(cssRule.combinator)) {
|
|
177
|
+
throw new Error(`'${cssRule.combinator}' is not a supported combinator. ` +
|
|
178
|
+
`Only child combinator (>) and descendant combinator are supported.`);
|
|
179
|
+
}
|
|
180
|
+
let iosClassChainSelector = '';
|
|
181
|
+
const astClassNames = /** @type {import('css-selector-parser').AstClassName[]} */ (cssRule.items.filter(({ type }) => type === 'ClassName'));
|
|
182
|
+
const classNames = astClassNames.map(({ name }) => name);
|
|
183
|
+
if (classNames.length) {
|
|
184
|
+
throw new driver_1.errors.InvalidSelectorError(`'${[cssRule || '', ...classNames].join('.')}'
|
|
185
|
+
is not a valid ios class. Must be a single string (e.g.: XCUIElementTypeWindow) without
|
|
186
|
+
dots separating them`);
|
|
187
|
+
}
|
|
188
|
+
const astTag = /** @type {import('css-selector-parser').AstTagName|undefined} */ (cssRule.items.find(({ type }) => type === 'TagName'));
|
|
189
|
+
let tagName = astTag?.name ?? '';
|
|
190
|
+
if (tagName && tagName !== '*' && !lodash_1.default.startsWith(lodash_1.default.toLower(tagName), 'xcuielementtype')) {
|
|
191
|
+
const capitalizedTagName = tagName.charAt(0).toUpperCase() + tagName.slice(1);
|
|
192
|
+
tagName = `XCUIElementType${capitalizedTagName}`;
|
|
193
|
+
}
|
|
194
|
+
iosClassChainSelector += tagName || '*';
|
|
195
|
+
/** @type {(string|{index: string|undefined}|undefined)[]} */
|
|
196
|
+
const attrs = [];
|
|
197
|
+
const astIds = /** @type {import('css-selector-parser').AstId[]} */ (cssRule.items.filter(({ type }) => type === 'Id'));
|
|
198
|
+
const ids = astIds.map(({ name }) => name);
|
|
199
|
+
if (ids.length) {
|
|
200
|
+
attrs.push(`name == "${ids[0]}"`);
|
|
201
|
+
}
|
|
202
|
+
const attributes = /** @type {import('css-selector-parser').AstAttribute[]} */ (cssRule.items.filter(({ type }) => type === 'Attribute'));
|
|
203
|
+
for (const attr of attributes) {
|
|
204
|
+
attrs.push(parseAttr(attr));
|
|
205
|
+
}
|
|
206
|
+
const pseudoClasses = /** @type {import('css-selector-parser').AstPseudoClass[]} */ (cssRule.items.filter(({ type }) => type === 'PseudoClass'));
|
|
207
|
+
for (const pseudo of pseudoClasses) {
|
|
208
|
+
attrs.push(parsePseudo(pseudo));
|
|
209
|
+
}
|
|
210
|
+
const nonIndexAttrs = attrs.filter((attr) => lodash_1.default.isString(attr));
|
|
211
|
+
if (!lodash_1.default.isEmpty(nonIndexAttrs)) {
|
|
212
|
+
iosClassChainSelector += `[\`${nonIndexAttrs.join(' AND ')}\`]`;
|
|
213
|
+
}
|
|
214
|
+
const indexAttr = attrs.find((attr) => lodash_1.default.isObject(attr) && attr.index);
|
|
215
|
+
if (indexAttr) {
|
|
216
|
+
iosClassChainSelector += `[${ /** @type { {index: string} } */(indexAttr).index}]`;
|
|
217
|
+
}
|
|
218
|
+
if (cssRule.nestedRule) {
|
|
219
|
+
iosClassChainSelector += `/${parseCssRule(cssRule.nestedRule)}`;
|
|
220
|
+
}
|
|
221
|
+
return cssRule.combinator === '>' ? iosClassChainSelector : `**/${iosClassChainSelector}`;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Convert CSS object to iOS Class Chain selector
|
|
225
|
+
*
|
|
226
|
+
* @param {import('css-selector-parser').AstSelector} css CSS object
|
|
227
|
+
* @returns {string} The CSS object parsed as a UiSelector
|
|
228
|
+
*/
|
|
229
|
+
function parseCssObject(css) {
|
|
230
|
+
if (!lodash_1.default.isEmpty(css.rules)) {
|
|
231
|
+
return parseCssRule(css.rules[0]);
|
|
232
|
+
}
|
|
233
|
+
throw new Error('No rules could be parsed out of the current selector');
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Convert a CSS selector to a iOS Class Chain selector
|
|
237
|
+
* @param {string} cssSelector CSS Selector
|
|
238
|
+
* @returns {string} The CSS selector converted to an iOS Class Chain
|
|
239
|
+
*/
|
|
240
|
+
CssConverter.toIosClassChainSelector = function toIosClassChainSelector(cssSelector) {
|
|
241
|
+
let cssObj;
|
|
242
|
+
try {
|
|
243
|
+
cssObj = parseCssSelector(cssSelector);
|
|
244
|
+
}
|
|
245
|
+
catch (e) {
|
|
246
|
+
logger_js_1.default.debug(e.stack);
|
|
247
|
+
throw new driver_1.errors.InvalidSelectorError(`Invalid CSS selector '${cssSelector}'. Reason: '${e.message}'`);
|
|
248
|
+
}
|
|
249
|
+
try {
|
|
250
|
+
return parseCssObject(cssObj);
|
|
251
|
+
}
|
|
252
|
+
catch (e) {
|
|
253
|
+
logger_js_1.default.debug(e.stack);
|
|
254
|
+
throw new driver_1.errors.InvalidSelectorError(`Unsupported CSS selector '${cssSelector}'. Reason: '${e.message}'`);
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
exports.default = CssConverter;
|
|
258
|
+
//# sourceMappingURL=css-converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css-converter.js","sourceRoot":"","sources":["../../lib/css-converter.js"],"names":[],"mappings":"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"}
|