我们使用此代码模拟在Xcode UI测试中点击UICollectionView
的第一个单元格:
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
。在sleep(10)
之前添加XCUIElement *targetCell = [lensesCollectionView.cells elementBoundByIndex:lensIndex]
并没有帮助。
我已经看过其他地方提到的hacky解决方案,例如
func forceTapElement() {
if self.isHittable {
self.tap()
} else {
var coordinate: XCUICoordinate = self.coordinateWithNormalizedOffset(CGVectorMake(0.0, 0.0))
coordinate.tap()
}
}
但这看起来并不干净。实现这一目标的最简洁方法是什么?
更新:如果我尝试点击它而不检查hittable
我收到此错误:
错误:错误-25204在元素pid上执行AXAction 2003:43616,elementOrHash.elementID:4882574576.240
答案 0 :(得分:3)
事实证明, iOS 11 上的自定义集合视图单元格上isAccessibilityElement
为NO
(奇怪的是,它是{{1} } iOS 10 )。明确地将其设置为YES
可以解决问题。
答案 1 :(得分:0)
里卡多的答案应该是被接受的答案。
为清楚起见,我们遇到了同样的问题,并在UICollectionViewCell的Class文件中解决了它。
在initWithCoder:
中,我们添加了属性isAccessibilityElement
:
- (id)initWithCoder:(NSCoder *)coder {
self = [super initWithCoder:coder];
if (self != nil) {
self.isAccessibilityElement = YES;
}
return self;
}
我们现在可以在Xcode 9.1中运行与Xcode 8相同的测试脚本,并正确地点击了单元格。
感谢您提供这个出色的解决方案。