2017-03-01 11 views
1

XCUITest에서 알림 배너가 화면에 전송되는지 확인할 수 있습니까?XCUITest는 알림 배너와 상호 작용합니다.

알림에 접근성 식별자를 추가 할 수 있지만 배너가 화면에있을 때 XCUITest와 상호 작용하는 데 문제가 있습니다. 나는 XCUITest가 응용 프로그램과 별개의 프로세스에서 실행되지만 통지와 상호 작용할 수 있거나 XCUITest의 범위를 벗어나는 경우 승리했다고 알고 있습니다.

감사합니다.

답변

0

아직 안타깝게도. XCUITest는 알림 표시 줄에 대한 액세스를 제공하지 않습니다. 거의 모든 테스트 시나리오에서 Apple이 좋은 대안이지만 Apple은 푸시 알림 테스트를 제공하지 않습니다. 이 문제를 해결하는 방법 중 하나는 앱이 알림을 보내도록 강요하고 알림 팝업이 표시 될 때 스크린 샷을 찍은 다음 이미지 인식 기술을 사용하여 알림이 올바른지 확인합니다 (예 : OpenCV). 이것은 waaaaay보다 "해결 방법"을 사용하고 싶습니다. 그러나 지금까지 알고있는 유일한 방법입니다. 이것이 도움이되기를 바랍니다.

2

Xcode 9 이제 가능합니다. 다른 앱에 액세스 할 수 있습니다. 알림 배너가 포함 된 스프링 보드가 포함됩니다.

XCUIApplication에는 이제 번들 식별자를 매개 변수로 사용하는 새로운 초기화 프로그램이 있습니다. 해당 번들 식별자를 사용하는 앱에 대한 참조를 제공합니다. 그런 다음 일반 쿼리를 사용하여 UI 요소에 액세스 할 수 있습니다. 전에 자신의 앱으로 해본 것처럼.

import XCTest 

class UserNotificationUITests: XCTestCase { 

    override func setUp() { 
     super.setUp() 
     continueAfterFailure = false 
    } 

    func testIfLocalNotificationIsDisplayed() { 
     let app = XCUIApplication() 
     let springboard = XCUIApplication(bundleIdentifier: "com.apple.springboard") 

     app.launch() 

     // close app to trigger local notification 
     XCUIDevice.shared.press(XCUIDevice.Button.home) 

     // wait for the notification 
     let localNotification = springboard.otherElements["USERNOTIFICATION, now, Buy milk!, Remember to buy milk from store!"] 
     XCTAssertEqual(waiterResultWithExpectation(localNotification), XCTWaiter.Result.completed) 
    } 
} 

extension UserNotificationUITests { 
    func waiterResultWithExpectation(_ element: XCUIElement) -> XCTWaiter.Result { 
     let myPredicate = NSPredicate(format: "exists == true") 
     let myExpectation = XCTNSPredicateExpectation(predicate: myPredicate, 
                 object: element) 
     let result = XCTWaiter().wait(for: [myExpectation], timeout: 6) 
     return result 
    } 
} 

당신이 테스트 here

포함 데모 응용 프로그램을 체크 아웃 할 수 할 수 있습니다 또한 시험 :

앱이 종료 될 때 지역 알림가 표시되고 있는지 확인하는 테스트입니다 원격 알림 with UITests. 코드에서 원격 알림을 직접 예약 할 수 없기 때문에 더 많은 작업이 필요합니다. 당신은 NWPusher이라는 서비스를 사용할 수 있습니다. 나는 how to test Remote Notifications with Xcode UITests에 대한 블로그 포스트를 작성했으며 demo project은 github에 있습니다.