Skip to content

feat: [SDK-4364] add .NET MAUI SDK support to Appium harness#32

Merged
fadi-george merged 10 commits intomainfrom
fg/dotnet
Apr 25, 2026
Merged

feat: [SDK-4364] add .NET MAUI SDK support to Appium harness#32
fadi-george merged 10 commits intomainfrom
fg/dotnet

Conversation

@fadi-george
Copy link
Copy Markdown
Contributor

@fadi-george fadi-george commented Apr 24, 2026

Description

Wires the shared Appium harness up to drive the .NET MAUI demo app (paired with OneSignal-DotNet-SDK#173). Linear: SDK-4364.

While in here, also picked off a handful of pre-existing flakes and rough edges that were biting across all SDKs.

Details

.NET MAUI support

  • run-local.sh learns a dotnet SDK type alongside flutter / react-native / cordova. Builds the demo via dotnet build for the right RID (iossimulator-arm64 / iossimulator-x64 / net10.0-android), with the same source-hash caching the other SDKs use so unchanged trees skip the build entirely. Splits the SDK + bindings into their own cached build pass so demo-only edits don't pay the SDK build cost.
  • Android Debug builds explicitly turn off Fast Deployment (EmbedAssembliesIntoApk=true, AndroidUseFastDeployment=false) - without it monodroid aborts at startup with "No assemblies found" because Appium just installs the APK rather than running -t:Run.
  • wdio.android.conf.ts picks per-SDK appActivity / appWaitActivity values; .NET MAUI's launcher activity is crc64...MainActivity rather than the RN/Flutter conventions.
  • helpers/selectors.ts adds a .NET-specific locator strategy (MAUI exposes accessibility ids differently from the others on Android).

Cross-SDK fixes that fell out of running on .NET

  • Stale IAM window handles. 03_iam would occasionally try to act on a webview handle that had already been torn down by the time the assertion ran; now we re-query handles instead of caching them across awaits.
  • Foreground banner for iOS notifications. Switched the iOS notification flow to assert against the foreground in-app banner instead of the system banner, which is far more reliable across Xcode versions and matches what the other SDKs were already doing on Android.
  • Banner image assertion simplified to just check presence rather than scraping pixel coordinates.
  • Flutter setValue shim moved into the WebDriver proxy so it isn't sprinkled across specs.
  • Logger removed along with most of the await pause(...) calls - they were masking real waits with arbitrary sleeps. Specs now wait on actual conditions.

What is not changing

  • No spec coverage was dropped; the spec list (01_user through 12_activity) is the same set that runs against the other SDKs.
  • No changes to the existing Flutter / React Native / Cordova build paths beyond the small refactors called out above (foreground banner, setValue shim, scroll-into-view).

Testing

Ran the full suite locally end-to-end against:

  • iOS simulator (iPhone 17, iOS 26.2) for all four SDKs (flutter, react-native, cordova, dotnet) via ./scripts/run-local.sh --platform=ios --sdk=<...>.
  • Android emulator for the same four SDKs via --platform=android --sdk=<...>.

All 12 specs pass on every combination, including 12_activity.spec.ts against the rebuilt .NET Live Activity widget extension from the companion PR.

Made with Cursor

@fadi-george fadi-george requested a review from a team as a code owner April 24, 2026 23:18
Comment thread appium/tests/specs/12_activity.spec.ts
@fadi-george fadi-george merged commit d19279b into main Apr 25, 2026
1 check passed
@fadi-george fadi-george deleted the fg/dotnet branch April 25, 2026 00:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants