2016-01-15 13 views
6

Ho un'app il cui scopo principale è inserire i dati in HealthKit. Mi piacerebbe scrivere alcuni test dell'interfaccia utente Xcode per verificare che stia scrivendo questi dati con successo, ma ho qualche difficoltà a verificare i dati nell'app Salute.Come avviare le app di sistema in un test UI iOS Xcode

Quando ho registrato il mio test inizialmente, ho saltato la pressione del tasto Home simulato, ma stava registrando mentre passavo alla prima schermata principale e navigavo nell'app Salute per mostrare i punti dati.

Ho cercato per quanto a premere il tasto Home, ed ho trovato questo (che funziona):

XCUIDevice.sharedDevice().pressButton(.Home) 

Tuttavia, nessuna delle altre chiamate ha registrato in realtà lavorano per la navigazione al di fuori della app. Il codice registrato per strisciare sulla schermata iniziale, ovviamente, sembra sbagliato, e anche non funziona quando sostituisco tap() con un swipeRight() o swipeLeft():

app.childrenMatchingType(.Window).elementBoundByIndex(1).childrenMatchingType(.Other).elementBoundByIndex(1).childrenMatchingType(.Other).element.childrenMatchingType(.Other).element.childrenMatchingType(.Other).elementBoundByIndex(0).childrenMatchingType(.ScrollView).element.tap() 

il prossimo paio di linee, per il lancio di un app sulla schermata iniziale , non hanno nemmeno lavorare per l'icona di un'applicazione che è sulla pagina attualmente visibile:

let elementsQuery = app.scrollViews.otherElements 
elementsQuery.icons["Health"].tap() 

esiste un modo per ottenere quello che sto cercando di fare, o dovrò aspettare per verificare end-to-end testare fino a quando non aggiungo la possibilità di leggere da HealthKit alla mia app?

risposta

3

Xcode 9

Ecco la soluzione con Xcode 9

let messageApp = XCUIApplication(bundleIdentifier: "com.apple.MobileSMS") 
messageApp.activate() 

È possibile trovare un elenco di identificatore bundle per le applicazioni di sistema in this post

Xcode 8

Per Xcode 8 è un po 'più complicato Per avviare un'applicazione dalla Springboard è necessario importare la f opo intestazioni

https://github.com/facebook/WebDriverAgent/blob/master/PrivateHeaders/XCTest/XCUIElement.h https://github.com/facebook/WebDriverAgent/blob/master/PrivateHeaders/XCTest/XCUIApplication.h

quindi utilizzare i seguenti (per esempio con la salute)

Objective-C

@interface Springboard : NSObject 

+ (void)launchHealth; 

@end 

@implementation Springboard 

+ (void)launchHealth 
{ 
    XCUIApplication *springboard = [[XCUIApplication alloc] initPrivateWithPath:nil bundleID:@"com.apple.springboard"]; 
    [springboard resolve]; 

    XCUIElement *icon = springboard.icons[@"Health"]; 

    if (icon.exists) { 
     [icon tap]; 

     // To query elements in the Health app 
     XCUIApplication *health = [[XCUIApplication alloc] initPrivateWithPath:nil bundleID:@"com.apple.Health"]; 
    } 
} 

@end 

Swift

class Springboard { 
    static let springboard = XCUIApplication(privateWithPath: nil, bundleID: "com.apple.springboard") 

    class func launchHealth() { 

     springboard.resolve() 

     let icon = springboard.icons["Health"] 
     if icon.exists { 
      icon.tap() 

      // To query elements in the Health app 
      let health = XCUIApplication(privateWithPath: nil, bundleID: "com.apple.Health") 
     } 
    } 
} 
0

hai limitato i test dell'interfaccia utente con la tua applicazione e nel momento in cui premi il tasto home e esci dall'interfaccia utente dell'applicazione non puoi eseguire operazioni di interfaccia utente poiché la variabile app nel tuo codice punta alla tua applicazione.

si potrebbe avere il codice come

let app = XCUIApplication() 

Così si dovrebbe modificare quella linea XCUIApplication().

let app = XCUIApplication(privateWithPath: nil, bundleID: "com.apple.springboard") 

ora è possibile uscire dall'applicazione.

Secondo la mia conoscenza è bene avere e UITestAgent applicazione indipendente e avviare i suoi UiTestcases con trampolino fascio id in modo da poter testare tutte le applicazioni, con l'aiuto di quella applicazione non piace ho codificato qualche banco di prova all'interno del prodotto XYZ base di codice e per il prossimo prodotto ABC scriverò test all'interno del codice base del prodotto ABC!

2

Swift 4

let app = XCUIApplication(bundleIdentifier: "com.apple.springboard") 
Problemi correlati