2017-07-21 13 views
9

次のテストはiOS 11でうまくいきます。ロケーションサービスを使用するためのアクセス許可を求めるアラートを閉じ、マップをズームインします。 iOS 10または9では、これは実行されず、テストは成功します。addUIInterruptionMonitor(withDescription:handler :)がiOS 10または9で動作していません

func testExample() { 
    let app = XCUIApplication() 

    var handled = false 
    var appeared = false 

    let token = addUIInterruptionMonitor(withDescription: "Location") { (alert) -> Bool in 
     appeared = true 
     let allow = alert.buttons["Allow"] 
     if allow.exists { 
      allow.tap() 
      handled = true 
      return true 
     } 

     return false 
    } 

    // Interruption won't happen without some kind of action. 
    app.tap() 

    removeUIInterruptionMonitor(token) 
    XCTAssertTrue(appeared && handled) 
} 

なぜ、回避策がありますか?

XCTest UI interruption monitors now work correctly on devices and simulators running iOS 10. (33278282) 

答えて

8
let springboard = XCUIApplication(bundleIdentifier: "com.apple.springboard") 

    let allowBtn = springboard.buttons["Allow"] 
    if allowBtn.exists { 
     allowBtn.tap() 
    } 
+0

私はこの作品が信じられません:) thx!しかし、私は索引でボタンにアクセスしたいのですが、それ以外のiOSバージョンでは動作しません(iOS 11でボタンのタイトルが変更されました) – Daniel

+0

'addUIInteruptionMonitor()'を使って 'SFAuthenticationSession'アラートを消すことができませんでした。この技術は私たちのために働いた。 –

2
私はこの問題を抱え

とRiver2202のソリューション次

のXcode 9.3のベータ版の変更ログが表示さhttps://github.com/TitouanVanBelle/Map

更新:

は、ここでは、問題を再現できるプロジェクトです私のために働いた。

これはUIInterruptionMonitorを動作させるための修正ではなく、アラートを解除する別の方法です。 addUIInterruptionMonitorの設定を削除することもできます。アクセス許可の警告が表示される場所であれば、springboard.buttons["Allow"].existsテストを行う必要があります。可能であれば、のテストの初期段階に表示されるので、後でもう一度心配する必要はありません。あなたは、単一のコードパスを持っており、11

ちなみにiOS用のiOS 10と別のために一つのことをしなければならないことはできませんので

は喜んでspringboard.buttons["Allow"].existsコードはまだ、iOSの11で動作しますが、私は(基本問題をログに記録しましたaddUIInruptruptionMonitorはiOS 11より前に動作していません)、Appleのバグとして。それは今複製されているので、バグであると認識していると思います。

関連する問題