2017-07-21 24 views
9

Các kiểm tra sau hoạt động tốt trên iOS 11. Nó loại bỏ cảnh báo yêu cầu quyền sử dụng dịch vụ vị trí và sau đó phóng to trên bản đồ. Trên iOS 10 hoặc 9, không có thao tác nào trong số này và thử nghiệm vẫn thành côngaddUIInterruptionMonitor (withDescription: handler :) không hoạt động trên iOS 10 hoặc 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) 
} 

Có ai biết tại sao và/hoặc cách giải quyết khác không?

Dưới đây là một dự án nơi bạn có thể tạo lại vấn đề: https://github.com/TitouanVanBelle/Map

Cập nhật

Xcode 9,3 changelogs Beta của hiển thị như sau

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

Trả lời

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

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

Tôi không thể tin điều này hoạt động được :) thx! Tuy nhiên, tôi muốn truy cập nút bằng chỉ mục, nếu không nó sẽ không hoạt động trong các phiên bản iOS khác nhau (tiêu đề nút thay đổi trong iOS 11) – Daniel

+0

Sử dụng 'addUIInteruptionMonitor()' không hoạt động để loại bỏ cảnh báo 'SFAuthenticationSession', nhưng kỹ thuật này làm việc cho chúng tôi. –

2

Tôi có vấn đề này và giải pháp River2202 của đã làm cho tôi.

Lưu ý rằng đây không phải là cách khắc phục để người dùng UIInterruptionMonitor hoạt động, nhưng cách khác là loại bỏ cảnh báo. Bạn cũng có thể xóa thiết lập addUIInterruptionMonitor. Bạn cần có bài kiểm tra springboard.buttons["Allow"].exists ở bất kỳ nơi nào cảnh báo quyền có thể xuất hiện. Nếu có thể, buộc nó xuất hiện ở giai đoạn đầu của thử nghiệm, do đó bạn không cần phải lo lắng về điều này sau.

Happily mã springboard.buttons["Allow"].exists vẫn hoạt động trong iOS 11, vì vậy bạn có thể có một con đường mã duy nhất và không cần phải làm một điều cho iOS 10 và một cho iOS 11.

Ngẫu nhiên, tôi đăng những vấn đề cơ bản (addUIInterruptionMonitor không hoạt động trước iOS 11) dưới dạng lỗi với Apple. Nó đã bị đóng như một bản sao bây giờ, vì vậy tôi đoán họ thừa nhận rằng đó là một lỗi.

Các vấn đề liên quan