Sto cercando di generare un UItest in Xcode. Quando provo a scorrere UIview ottengo un errore:
Timestamped Event Matching Error: Failed to find matching element
Ciò accade anche se provo a toccare UIView.
Sto cercando di generare un UItest in Xcode. Quando provo a scorrere UIview ottengo un errore:
Timestamped Event Matching Error: Failed to find matching element
Ciò accade anche se provo a toccare UIView.
Risposte:
Dovresti verificare che l'opzione 'Accessibilità' sia abilitata per l'oggetto UIView da cui stai scorrendo, ad esempio:
fastlane
per acquisire schermate di un tableView. stackoverflow.com/a/39331154/4475605
isAccessibilityElement = true
Di solito questo problema si verifica quando l'elemento genitore dell'elemento che si desidera registrare è impostato su isAccessibilityElement = true. In generale, devi avere l'elemento genitore impostato su false per accedere all'elemento figlio. Ad esempio: se hai una UILabel all'interno di una vista, l'accessibilità dovrebbe essere impostata su false per la vista e impostata su true per UILabel.
In Xcode 9.3, dove questo è apparentemente ancora un problema, quello che ho fatto è stato:
Per registrare un nuovo test, non credo che ci sia ancora una soluzione. Tuttavia, se utilizzi un'estensione che forza il tocco con un test già esistente, funziona.
Esempio di utilizzo:
extension XCUIElement {
func forceTapElement() {
if self.hittable {
self.tap()
}
else {
let coordinate: XCUICoordinate = self.coordinateWithNormalizedOffset(CGVectorMake(0.0, 0.0))
coordinate.tap()
}
}
}
func testSomethingWithCells() {
let app = XCUIApplication()
let cells = app.tables.cells
sleep(1)
cells.elementBoundByIndex(0).forceTapElement()
}
Puoi controllare il post originale qui:
Una soluzione che ha funzionato per me è stata identificare l'oggetto in modo diverso.
In Xcode 8 sono stato in grado di utilizzare quanto segue:
XCUIApplication().tables.cells["Camera Roll"].buttons["Camera Roll"].tap()
Con Xcode 9 ho ricevuto l'errore menzionato in questa domanda. Ho finito per usare quanto segue, che ha funzionato (anche se più flakey rispetto all'opzione originale)
XCUIApplication().cells.element(boundBy: 1).tap()