2016-06-06 17 views
2

Ich möchte MKAnnotationView mit meiner XCTestCase mit UITest tippen, so habe ich meine MapView als XCUIElement. Ich habe keine Ahnung, wie man Anmerkungen von mapView bekommt, ich möchte keine festen Positionen darauf auf den Bildschirmen setzen, weil es auf verschiedenen Geräten getestet wird. Also bin ich auf der let mapView:XCUIElement = app.maps.elementBoundByIndex(0)Tippen Sie auf MKAnnotationView mit XCTestCase

feststecken Irgendwelche Ideen?

+0

haben Sie versucht, eine Zugriffskennung hinzuzufügen? – CZ54

Antwort

2

Um mit einer Kartenannotation zu interagieren, verwenden Sie otherElements, referenziert durch das title Attribut.

Zum Beispiel in Ihrem Produktionscode einen Titel in Ihrem MKAnnotation.

class Annotation: NSObject, MKAnnotation { 
    let coordinate: CLLocationCoordinate2D 
    let title: String? 

    init(title: String?, coordinate: CLLocationCoordinate2D) { 
     self.title = title 
     self.coordinate = coordinate 
    } 
} 

let coordinate = CLLocationCoordinate2DMake(40.703490, -73.987770) 
let annotation = Annotation(title: "BeerMenus HQ", coordinate: coordinate) 
let mapView = MKMapView() 
mapView.addAnnotation(annotation) 

Dann im Test können Sie die Anmerkung Referenz über das title Attribut ist.

let app = XCUIApplication() 
let annotation = app.maps.element.otherElements["BeerMenus HQ"] 
annotation.tap() 
+0

Dies kann auch mit einem AccessibilityIdentifier geschehen, denke ich, das wäre eine "korrektere" Art und Weise, es je nach dem zu tun, was Apple von uns möchte. –

+0

Es * könnte * mit einem Accessibility Identifier down sein. Aber wenn Sie bereits den Titel festlegen, warum verwenden Sie ihn nicht einfach? Das 'MKAnnotation'-Protokoll erfordert' title'. –

+2

Titel Benutzer zugewandt, richtig? Wenn Sie die benutzerbezogenen Daten von der Testinfrastruktur trennen, können Sie diese ändern, ohne die andere zu ändern. Ob das überhaupt zählt, hängt ganz von der Mannschaft ab, nehme ich an! –