Ошибка сопоставления событий с отметкой времени: не удалось найти соответствующий элемент


94

Я пытаюсь создать UItest в Xcode. Когда я пытаюсь пролистать UIview, я получаю сообщение об ошибке:

Timestamped Event Matching Error: Failed to find matching element

окно ошибки

введите описание изображения здесь

Это также происходит, если я пытаюсь нажать UIView.


Не могли бы вы объяснить немного больше?
Дитер Мемкен,

Я пытаюсь провести пальцем по экрану или нажать на UIview, который должен что-то сделать (с функцией восстановления жестов), но когда я делаю жест, возникает эта ошибка. единственный способ заставить его работать - это запросы, но это действительно сложно, и я уверен, что есть другой способ
Shay

Ответы:


47

Вы должны убедиться, что опция «Доступность» включена для объекта UIView, из которого вы проводите пальцем, например:

введите описание изображения здесь


1
Включение доступности для WebView привело к сбою моих тестов при разрешении текста в WebView. Отключение доступности для UIView, на котором размещен WebView, привело к успешному выполнению тестов. Так что будьте осторожны.
askielboe

1
В качестве еще одного момента, чтобы заставить его работать для меня, я должен был дать ему ярлык
Шон Линтерн

Я нашел этот пост полезным для использования fastlaneдля создания снимков экрана tableView. stackoverflow.com/a/39331154/4475605
Адриан

Где это? Как мне это установить?
Кори Макэбой 01

@CoryMcAboy, вы можете установить его из кода для вашего пользовательского представления:isAccessibilityElement = true
Глеб Тарасов

14

Обычно эта проблема наблюдается, когда для родительского элемента элемента, который вы хотите записать, установлено значение isAccessibilityElement = true. Как правило, для доступа к дочернему элементу необходимо установить для родительского элемента значение false. Например: если у вас есть UILabel внутри представления, доступность должна быть установлена ​​на false для представления и установлена ​​на true для UILabel.


1
Это было точно воспроизводимо. Как вы сказали, это не работает, если для родительского элемента установлено значение isAccessibilityElement = true! После того, как я снова переключил его на false, он снова заработал.
pommes

3

В Xcode 9.3, где это, по-видимому, все еще проблема, я сделал следующее:

  • Выйти из Xcode
  • Сбросьте настройки симулятора (Оборудование -> Стереть все содержимое и настройки)
  • Выйти из симулятора
  • Удалить производные данные для текущего приложения
  • Перезапустить Xcode
  • Попробуйте записать еще раз - на этот раз у меня получилось.

Я предоставил идентификатор как «skipButton» для кнопки и при идентификации кнопки, он всегда используется для сбоев, я идентифицирую кнопку как app.buttons ["skipButton '], ценю вашу помощь
Суджит Баранвал

Эти шаги у меня не сработали. Фактически, пострадали виджеты, которые ранее не были затронуты проблемой.
Geoff S

почему в нем нет содержания?
ворона

2

Для записи нового теста пока не думаю, что есть решение. Но, если вы используете удлинитель с принудительным отводом с уже существующим тестом, работает.

Пример использования:

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

Вы можете проверить исходный пост здесь:

Тест пользовательского интерфейса Xcode - Ошибка тестирования пользовательского интерфейса - Не удалось перейти к отображению (с помощью действия AX) при нажатии кнопки «Отмена» в поле поиска.


elementBoundByIndex 'был переименован в' element (boundBy :) ', например: cells.element (boundBy: 0) .tap ()
Sujananth

2

Иногда я сталкивался с этой проблемой. Кажется, помогает удалить каталог приложения из DerivedData.


1

Решение, которое сработало для меня, заключалось в том, чтобы идентифицировать объект по-другому.
В Xcode 8 я смог использовать следующее:

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

С Xcode 9 я получил ошибку, упомянутую в этом вопросе. Закончилось использованием следующего, которое сработало (хотя и более хлопотно, чем исходный вариант)

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

@Developer в вашей тестовой функции
Huy-Anh Hoang
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.