Skip to content

test(e2e): fix the iOS 17 and 26 nightly failures - #3969

Merged
isekovanic merged 1 commit into
developfrom
ci/e2e-nightly-ios-versions
Nov 10, 2026
Merged

isekovanic merged 1 commit into
developfrom
ci/e2e-nightly-ios-versions

Conversation

@testableapple

Copy link
Copy Markdown
Member

Ticket: https://linear.app/stream/issue/RN-520

🎯 Goal

Follow-up to #3965, which moved the nightly onto Flutter's OS matrix. Its first run on the branch (42874414367) showed:

  • Android: every version passed and the coverage map was built.
  • iOS 26.2: hit the 120-minute test-step limit. One pass on a macos-15 runner takes about 105 minutes, and that pass had 27 failures.
  • iOS 17.5, which the suite had never run on, had its own failures.

🛠 Implementation details

iOS 26 and later

  • System alert buttons match label + button traits twice: a wrapper (_UIInterfaceActionCustomViewRepresentationView) and the action view (_UIAlertControllerActionView), with the same frame. Detox then fails on multiple matches, which caused 15 of the 27 failures (Delete, Block, Leave, Flag). Alert buttons are now tapped at index: 0. I checked the matches on a local iOS 27 simulator.

iOS 17

  • Detox never counts the menu's transparent message-overlay-backdrop as visible. closeContextMenu now waits for the backdrop to exist, taps a point on it away from the menu, and taps again until it is gone. This fixed 4 moderation tests.
  • The channel hidden under an open thread is still reported. On iOS, assertMessages counts only matches on screen.
  • Taps during animations: the "N Replies" label and the poll's multiple-votes switch now use waitToSettleAndClick. Message-list swipes retry while Detox reports the list as not hittable (a thread still sliding in).

One SDK bug: RN-521. On iOS 17, "scroll to bottom" leaves the newest message's footer under the composer. test_reloadsSkippedMessages_whenScrolledToTheBottom is skipped on iOS below 18 through the new itExceptOnOldIOS. That helper reads the simulator's runtime, and the Fastfile's test-id parser recognizes it.

Timeout: the iOS nightly job gets 360 minutes and its test step 300, as in the Flutter nightly.

🧪 Testing

  • iOS 17.5, iPhone 15 Pro:
    • Before the fixes, the full suite had 22 failures.
    • After the first round, a full run had 174 passed and 3 failed.
    • Those 3 were then fixed, and each passed twice when re-run.
  • The alert matcher was checked on iOS 27.1 with a probe test.
  • Nightly on this branch: 42902107500.
    • Android API 36 coverage batch 0 failed when the emulator died mid-run (RN-513). Its tests keep their previous coverage in the map.
  • eslint, prettier, actionlint and tsc -p e2e are clean.

☑️ Checklist

  • I have signed the Stream CLA (required)
  • PR targets the develop branch
  • Documentation is updated
  • New code is tested in main example apps, including all possible scenarios
    • SampleApp iOS and Android
    • Expo iOS and Android

@isekovanic
isekovanic merged commit 76e9bb2 into develop Nov 10, 2026
32 of 34 checks passed
@isekovanic
isekovanic deleted the ci/e2e-nightly-ios-versions branch November 10, 2026 22:19
@stream-ci-bot

Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 10.0.1 🎉

The release is available on:

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants