Помилка відповідності події, встановленої часом, не вдалося знайти відповідний елемент


93

Я намагаюся створити UItest у Xcode. Коли я намагаюся провести UIview, я отримую помилку:

Timestamped Event Matching Error: Failed to find matching element

вікно помилки

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

Це також трапляється, якщо я спробую торкнутися UIView.


Чи можете ви пояснити трохи більше?
Дітер Меймкен

я намагаюся провести пальцем або натиснути на UIview, який, мабуть, зробити щось (має переглядач жестів), але коли я роблю жест, ця помилка трапляється. Єдиний спосіб, коли я працював над тим, щоб це працювало, це запити, але його справді складний і я впевнений, що є інший спосіб
shay

Відповіді:


47

Ви повинні переконатися, що параметр "Доступність" увімкнено для об'єкта UIView, з якого ви переходите, наприклад:

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


1
Якщо ввімкнути доступність для веб-перегляду, мої тести не вдалися при вирішенні тексту в веб-перегляді. Вимкнення доступності для UIView, що розміщує веб-перегляд, зробило тести успішними. Тож остерігайтеся.
askielboe

1
Як ще один момент, щоб він працював для мене, я
мусив

Я вважаю цю публікацію корисною для того, fastlaneщоб використовувати знімки екрана tableView. stackoverflow.com/a/39331154/4475605
Адріан

Де це? Як це встановити?
Cory McAboy

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

14

Зазвичай ця проблема спостерігається, коли батьківський елемент елемента, який ви хочете записати, встановлений на isAccessibilityElement = true. Як правило, для доступу до дочірнього елемента для батьківського елемента потрібно встановити значення false. Наприклад: якщо у вас є UILabel всередині представлення, доступність має бути встановлена ​​на вигляд false, а для UILabel встановлено значення true.


1
Це було точно відтворено. Як ви сказали, це не працює батьківський елемент, встановлений на isAccessibilityElement = true! Після того як я переключив його на помилковий, він знову працював.
pommes

3

У Xcode 9.3, де це, мабуть, все ще проблема, я зробив:

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

Я вказав ідентифікатор як "skipButton" для кнопки, а за ідентифікаційною кнопкою, вона завжди використовується для відмови, я ідентифікую кнопку як app.buttons ["skipButton"], вдячний за вашу допомогу
Sujit Baranwal

Ці кроки для мене не спрацювали. Насправді, віджети, які раніше не впливали на проблему, постраждали.
Джефф С

чому це не має змісту?
ворона

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 UI - Fail Testing Fail - Не вдалося прокрутити до видимого (шляхом AX дії), коли натисніть на поле пошуку кнопку "Скасувати"


elementBoundByIndex 'було перейменовано на "елемент (linkedBy :)", наприклад: cell.element (linkedBy: 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()

@ Розробник у вашій тестовій функції
Huy-Anh Hoang
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.