2016-08-11 19 views
8

do celów testowych (tworzenie zrzutu ekranu lokalnego powiadomienia) muszę mieć możliwość zablokowania urządzenia (symulatora) z kodu (kod testowy lub kod aplikacji). Spojrzałem na kilka odpowiedzi stąd (GSEventLockDevice), ale są one dość stare i nie działa dla mnieiOS, blokowanie urządzenia z kodu

+0

Możesz utworzyć skrypt Apple, który to zrobi i użyje go w swoim kodzie. (nie z iOS, ale ponieważ jest to symulator, można go uruchomić poza kodem projektu) http://apple.stackexchange.com/questions/135728/using-applescript-to-lock-screen –

+0

Chcę, żeby to był część mojego zestawu testów, czy to możliwe? – kap

+0

Uruchamianie skryptu skryptu Apple z projektu iOS nie jest opcją, o ile wiem. Możesz utworzyć plik powłoki, który uruchomi xcodebuild, który uruchomi Twój zestaw testów, a także uruchomi skrypt Apple w tym samym czasie. https://developer.apple.com/library/prerelease/content/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/08-automation.html –

Odpowiedz

5

Istnieje prywatna metoda w XCUIDevice, dzięki czemu można zablokować urządzenie/symulator za jego pomocą.

Przykład Swift 3:

import XCTest 

class LockTests: XCTestCase { 
    func testExample() { 
    XCUIDevice.shared().perform(NSSelectorFromString("pressLockButton")) 

    let localNotification = UILocalNotification() 
    localNotification.fireDate = Date(timeIntervalSinceNow: 2) 
    localNotification.alertBody = "This is local notification" 
    localNotification.timeZone = NSTimeZone.local 
    localNotification.category = "Message" 
    UIApplication.shared.scheduleLocalNotification(localNotification) 
    } 
} 

i otrzymasz coś takiego:

enter image description here

mam żadnego doświadczenia z narzędzia migawki używasz, ale trzeba wiedzieć, że przejście do stanu zablokowania potrzeba czasu, więc może być przydatne poczekanie trochę czasu przed utworzeniem migawki (możesz użyć takiego kodu):

let date = Date(timeIntervalSinceNow: 3) 
while date.timeIntervalSinceNow > 0 { 
    CFRunLoopRunInMode(CFRunLoopMode.defaultMode, 0.1, true) 
} 

Ponadto, można powrócić do SpringBoard w końcu badania pod numerem (10 tylko iOS):

XCUIDevice.shared().press(.home) 

Nadzieję, że to pomaga!

+0

Спасибо большое! – kap

+1

tylko FYI, użyłem XCUIDevice.sharedDevice.performSelector ("pressLockButton") – kap

+0

Myliłem się w selektorach, zaktualizuję moją odpowiedź .Dziękuję! –

Powiązane problemy