2017-10-18 3 views
2

Nous utilisions ce code pour simuler un robinet sur la première cellule d'un UICollectionView sur les tests UI Xcode:collecte de test UI Xcode cellules vue est devenu non-hittable sur iOS 11

XCUIElementQuery *query = [application descendantsMatchingType:XCUIElementTypeAny]; 
XCUIElement *collectionView = [query objectForKeyedSubscript:collectionViewAccessibilityIdentifier]; 
XCUIElement *targetCell = [lensesCollectionView.cells elementBoundByIndex:cellIndex]; 
if (targetCell.hittable) { 
    [targetCell tap]; 
} 

cela fonctionne très bien sur iOS 10 , mais a cessé de travailler sur iOS 11. Le targetCell n'est jamais hittable, peu importe quoi. L'ajout d'un sleep(10) avant XCUIElement *targetCell = [lensesCollectionView.cells elementBoundByIndex:lensIndex] n'aide pas.

J'ai vu des solutions aki mentionnées ailleurs, comme

func forceTapElement() { 
    if self.isHittable { 
     self.tap() 
    } else { 
     var coordinate: XCUICoordinate = self.coordinateWithNormalizedOffset(CGVectorMake(0.0, 0.0)) 
     coordinate.tap() 
    } 
} 

mais qui ne semble pas très propre. Quel est le moyen le plus propre d'y parvenir?


Mise à jour: Si je tente de tapoter sans vérifier hittable je reçois cette erreur:

error: Error -25204 performing AXAction 2003 on element pid: 43616, elementOrHash.elementID: 4882574576.240

+0

J'ai eu ce problème avec des cellules qui n'étaient pas à l'écran - elles défilaient automatiquement sur l'écran avant de taper lorsqu'elles étaient exécutées sur iOS 10. Votre cellule est-elle affichée à l'écran lorsque vous essayez de la toucher? – Oletha

+0

Il est définitivement à l'écran. Je peux le voir sur le téléphone, et le 'targetCell.frame' est à l'intérieur de l'écran. Pourtant, il reste inexplicable. –

Répondre

3

Il se trouve que isAccessibilityElement était NO sur nos cellules vue de collection personnalisée sur iOS 11 (étrangement, c'était YES sur iOS 10). Le réglage explicite à YES a résolu le problème.

0

La réponse de Ricardo devrait être acceptée. Pour plus de clarté, nous avons rencontré le même problème et l'avons résolu dans le fichier Class de UICollectionViewCell. En initWithCoder: nous venons d'ajouter la propriété isAccessibilityElement:

- (id)initWithCoder:(NSCoder *)coder { 
    self = [super initWithCoder:coder]; 

    if (self != nil) { 
     self.isAccessibilityElement = YES; 
    } 

    return self; 
} 

On peut maintenant exécuter la même forme script de test Xcode 8 dans Xcode 9.1 et la cellule a été exploité correctement.

Merci pour cette excellente solution.