我有以下Xcode UI测试代码,过去一周才过去,但现在我收到错误
let cellsQuery = app.cells.matching(identifier: "identifier")
XCTAssertGreaterThan(cellsQuery.count, 0)
let cell = cellsQuery.element(boundBy: 0)
expectElementToExist(cell)
cell.tap()
final func expectElementToExist(_ element: XCUIElement, exist: Bool = true, timeout: TimeInterval = 10) {
let predicate = NSPredicate(format: "exists == \(exist)")
expectation(for: predicate, evaluatedWith: element, handler: nil)
waitForExpectations(timeout: timeout, handler: nil)
XCTAssertEqual(element.exists, exist)
}
我在cell.tap()
中遇到的错误如下
Failure fetching attributes for element <XCAccessibilityElement: 0x604001a75240> pid: 5387, elementOrHash.elementID: 105553123110000.1888: Error Domain=XCTDaemonErrorDomain Code=13 "Error copying attributes -25202" UserInfo={NSLocalizedDescription=Error copying attributes -25202}
非常感谢任何帮助
答案 0 :(得分:0)
最近,在将我的项目(Swift 3.2)升级到XCode 9后,我也遇到了类似的问题。
问题是
cell.isHittable is returning false.
这就是为什么默认 tap()方法不适用于分层元素。
我刚刚做了以下程序,并且工作正常。
第1步:创建如下所示的扩展程序
extension XCUIElement {
func tryClick() {
if self.isHittable {
self.tap()
}
else {
let coordinate: XCUICoordinate = self.coordinate(withNormalizedOffset: CGVector(dx:0.5, dy:0.5))
coordinate.doubleTap()
//coordinate.press(forDuration: 0.5)
}
}
}
第2步:使用上面创建的实例方法单击元素,而不是使用直接tap()方法。
cell.tryClick()
注意:尝试使用
CGVector(dx:0.5, dy:0.5) or CGVector(dx:0.0, dy:0.0)
希望它能解决您的问题。它对我来说就像一个魅力。