时间戳事件匹配错误: 找不到匹配元素

我试图在 Xcode 生成一个用户界面,当我试图滑动用户界面时,我得到了 一个错误:

Timestamped Event Matching Error: Failed to find matching element

错误窗口

enter image description here

如果我尝试点击 UIView,也会发生这种情况。

20433 次浏览

For recording a new test, I don't think there's a solution yet. But, if you use an extension forcing tap with a test that already exists, works.

Example of use:

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()
}

You can check the original post here:

Xcode UI test - UI Testing Failure - Failed to scroll to visible (by AX action) when tap on Search field "Cancel' button

You should verify that the 'Accessibility' option is enabled for the UIView object you are swiping from, for example:

enter image description here

I've been occasionally running into this problem. Delete the app's directory from DerivedData seems to help.

A solution that worked for myself was to identify the object differently.
In Xcode 8 I was able to use the following:

XCUIApplication().tables.cells["Camera Roll"].buttons["Camera Roll"].tap()

With Xcode 9 I got the error mentioned in this question. Ended up using the following, which worked (al beit more flakey than the original option)

XCUIApplication().cells.element(boundBy: 1).tap()

In Xcode 9.3, where this is apparently still a problem, what I did was:

  • Quit Xcode
  • Reset the Simulator's settings (Hardware -> Erase all contents and settings)
  • Quit the Simulator
  • Delete the derived data for the current app
  • Restart Xcode
  • Try recording again - it worked this time for me.

Usually this issue is observed when the parent element of the element yo want to record is set to isAccessibilityElement = true. In general, you have to have the parent element set to false to access the child element.

For example: if you have a UILabel inside a view, the accessibility should be set to false for the view and set to true for the UILabel.

Even if you have Accessibility enabled for the element, you have to make sure that it has a unique accessibility identifier. In my case, I had copied & pasted a UISwitch and assigned a different outlet to it, but it kept the same accessibility ID as the original one.