@@ -40,6 +40,7 @@ final class RunnerTests: XCTestCase {
4040 private let postSnapshotInteractionDelay : TimeInterval = 0.2
4141 private let firstInteractionAfterActivateDelay : TimeInterval = 0.25
4242 private let scrollInteractionIdleTimeoutDefault : TimeInterval = 1.0
43+ private let tvRemoteDoublePressDelayDefault : TimeInterval = 0.0
4344 private let minRecordingFps = 1
4445 private let maxRecordingFps = 120
4546 private var needsPostSnapshotInteractionDelay = false
@@ -1041,14 +1042,27 @@ final class RunnerTests: XCTestCase {
10411042 private func performTvRemoteAppSwitcherIfAvailable( ) -> Bool {
10421043#if os(tvOS)
10431044 XCUIRemote . shared. press ( . home)
1044- usleep ( 120_000 )
1045+ sleepFor ( resolveTvRemoteDoublePressDelay ( ) )
10451046 XCUIRemote . shared. press ( . home)
10461047 return true
10471048#else
10481049 return false
10491050#endif
10501051 }
10511052
1053+ private func resolveTvRemoteDoublePressDelay( ) -> TimeInterval {
1054+ guard
1055+ let raw = ProcessInfo . processInfo. environment [ " AGENT_DEVICE_TV_REMOTE_DOUBLE_PRESS_DELAY_MS " ] ,
1056+ !raw. trimmingCharacters ( in: . whitespacesAndNewlines) . isEmpty
1057+ else {
1058+ return tvRemoteDoublePressDelayDefault
1059+ }
1060+ guard let parsedMs = Double ( raw) , parsedMs >= 0 else {
1061+ return tvRemoteDoublePressDelayDefault
1062+ }
1063+ return min ( parsedMs, 1000 ) / 1000.0
1064+ }
1065+
10521066 private func findElement( app: XCUIApplication , text: String ) -> XCUIElement ? {
10531067 let predicate = NSPredicate ( format: " label CONTAINS[c] %@ OR identifier CONTAINS[c] %@ OR value CONTAINS[c] %@ " , text, text, text)
10541068 let element = app. descendants ( matching: . any) . matching ( predicate) . firstMatch
0 commit comments