2017-10-18 125 views
2

我們使用此代碼來模擬一個UICollectionView對Xcode的UI測試第一小區自來水:Xcode的UI測試集合視圖細胞變得不hittable iOS上11

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

這工作得很好iOS上10 ,但停止在iOS 11上工作。無論如何,targetCell從不是hittable。在XCUIElement *targetCell = [lensesCollectionView.cells elementBoundByIndex:lensIndex]之前添加sleep(10)沒有幫助。

我見過哈克解決方案

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

別的地方,例如提及,但看起來不很乾淨。什麼是最簡單的方法來實現這一點?


更新:如果我試圖挖掘它不檢查hittable我得到這個錯誤:

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

+0

我遇到了這個問題,它不是在屏幕上的單元格 - 它們以前是在iOS 10上運行時自動滾屏到屏幕上的。當您嘗試點擊它時,您的單元格是否在屏幕上? – Oletha

+0

這絕對是在屏幕上。我可以在手機上看到它,並且'targetCell.frame'在屏幕內。然而,它仍然是不可接受的。 –

回答

3

事實證明,isAccessibilityElementNO在我們的定製集合視圖細胞 iOS 11(奇怪的是,它是,在iOS 10)。明確將其設置爲YES解決了該問題。

0

裏卡多的答案應該是公認的答案。 爲了清楚起見,我們遇到了同樣的問題,並在UICollectionViewCell的Class文件中解決了它。 在initWithCoder:我們剛纔添加的屬性isAccessibilityElement

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

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

    return self; 
} 

我們現在可以運行相同的測試腳本形式的Xcode 8在Xcode 9.1和細胞被正確地挖掘出來。

感謝這個偉大的解決方案。