Как я могу избежать исключения NSInternalInconsistencyException при нажатии на элементы пользовательского интерфейса с помощью XCTest?

Начиная с обновления до xcode 9 некоторые из моих тестов пользовательского интерфейса начали метать NSInternalInconsistencyException с сообщением

Действие не может быть использовано после завершения области действия

Проблема возникает, когда я вызываю tap() на XCUIElement. Я вижу, что элемент является допустимой кнопкой, которая включена.

Любая помощь по исправлению или работе вокруг этого будет очень признательна!

Верхняя часть трассировки стека для исключения:

0   CoreFoundation                      0x00000001035ad1cb __exceptionPreprocess + 171
1   libobjc.A.dylib                     0x0000000102f0ff41 objc_exception_throw + 48
2   CoreFoundation                      0x00000001035b2362 +[NSException raise:format:arguments:] + 98
3   Foundation                          0x00000001029b4089 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 193
4   XCTest                              0x00000001027d4018 -[XCActivityRecord _synchronized_ensureValid] + 153
5   XCTest                              0x00000001027d3b0b -[XCActivityRecord _synchronized_addAttachment:] + 39
6   XCTest                              0x00000001027d3c98 -[XCActivityRecord addAttachment:] + 37
7   XCTest                              0x00000001027c0935 -[XCActivityRecord(UITesting) attachAutomaticScreenshot] + 265
8   XCTest                              0x00000001027f84b3 __43-[XCUIElement resolveHandleUIInterruption:]_block_invoke + 1465
9   XCTest                              0x0000000102814788 -[XCTContext _runActivityNamed:type:block:] + 185
10  XCTest                              0x00000001027f7eed -[XCUIElement resolveHandleUIInterruption:] + 139
11  XCTest                              0x000000010282b5d1 __63-[XCUIElement(XCUIElementEventSynthesis) _dispatchEvent:block:]_block_invoke + 81
12  XCTest                              0x0000000102814788 -[XCTContext _runActivityNamed:type:block:] + 185
13  XCTest                              0x000000010282b500 -[XCUIElement(XCUIElementEventSynthesis) _dispatchEvent:block:] + 315
14  XCTest                              0x000000010282d242 -[XCUIElement(XCUIElementTouchEvents) tap] + 

Ответ 1

В Xcode 9 это может быть вызвано ошибкой между XCUITest и новой проверкой основного потока Xcode 9. Более подробная информация находится в этом сообщении в блоге.

Чтобы временно обойти эту проблему до тех пор, пока Apple не исправит ее, отключите средство проверки основного потока в разделе "Тест" вашей схемы:

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

Ответ 2

Я закончил тем, что исправил это, сохранив элемент и просто используя ту же ссылку на него для последующих вызовов.

XCUIElement *searchBar = self.app.searchFields[@"Search"];
[searchBar tap];
[searchBar typeText:@"Test Guy"];