@@ -114,6 +114,7 @@ public final class EventGenerator {
114114 public func waitUntilWindowIsReady( timeout: TimeInterval = 3 ) throws {
115115 do {
116116 try self . waitUntil ( self . isWindowReady, timeout: timeout)
117+ try self . waitUntilAccessibilityActivate ( )
117118 try self . waitUntilRunloopIsFlushed ( timeout: timeout)
118119 } catch {
119120 throw HammerError . windowIsNotReadyForInteraction
@@ -181,6 +182,38 @@ public final class EventGenerator {
181182 try self . sendMarkerEvent { try ? waiter. complete ( ) }
182183 try waiter. start ( )
183184 }
185+
186+ // MARK: - Accessibility initialization
187+
188+ private var isAccessibilityActivated = false
189+
190+ private func waitUntilAccessibilityActivate( ) throws {
191+ UIApplication . shared. accessibilityActivate ( )
192+ if self . isAccessibilityActivated {
193+ return
194+ }
195+
196+ // The first time the accessibility engine is activated in a simulator it needs more time to warm up
197+ // and start producing consistent results, after that only a short delay per test case is enough
198+ let simAccessibilityActivatedKey = " accessibility_activated "
199+ let simAccessibilityActivated = UserDefaults . standard. bool ( forKey: simAccessibilityActivatedKey)
200+ if !simAccessibilityActivated {
201+ print ( " Activating accessibility engine for the first time in this simulator and waiting 5s " )
202+ } else {
203+ print ( " Activating accessibility engine and waiting 0.1s " )
204+ }
205+
206+ try self . wait (
207+ simAccessibilityActivated
208+ ? EventGenerator . settings. accessibilityActivateDelay // Default: 0.02s
209+ : EventGenerator . settings. accessibilityActivateFirstTimeDelay // Default: 5.0s
210+ )
211+
212+ self . isAccessibilityActivated = true
213+ if !simAccessibilityActivated {
214+ UserDefaults . standard. set ( true , forKey: simAccessibilityActivatedKey)
215+ }
216+ }
184217}
185218
186219// Bypasses deprecation warning for `isIgnoringInteractionEvents`
0 commit comments