Тестирование пользовательского интерфейса XCode для сбоев существует, isHittable, waitForExistence и записи - PullRequest
0 голосов
/ 08 мая 2019

У меня очень простой тест пользовательского интерфейса XCode с этой функцией:

func waitForElementToAppear(_ element: XCUIElement) -> Bool {
        let predicate = NSPredicate(format: "exists == true")
        let exp = expectation(for: predicate, evaluatedWith: element, handler: nil)
        let result = XCTWaiter().wait(for: [exp], timeout: 10)
        return result == .completed
}

, который всегда работал для меня до Xcode 9. Я не уверен, что это проблема Xcode 10, но недавноначалось без добавления или изменения какого-либо кода.

Вот мой тестовый код:

func testTabBarPress() {
        let tabbar = self.app.tabBars["my_tabbar"]
        print(tabbar)
}

Этот тест пройден успешно - всегда.

func testTabBarPress() {
    let tabbar = self.app.tabBars["my_tabbar"]
    print(tabbar)
    if tabbar.isHittable {  

    }
}

Этот тест не пройден - всегда,Он НЕ ПРОСТО провалится, он аварийно завершится с Thread 1: EXC_BAD_ACCESS (code=1, address=0x0).

. После более чем 99,945 секунд он переходит из аварийного состояния в состояние неудавшегося теста с сообщением: Timeout waiting for fulfillment of promise for 'remote query'..

Этот тест:

func testTabBarPress() {
    let tabbar = self.app.tabBars["my_tabbar"]
    print(tabbar)
    if waitForElementToAppear(tabbar) {

    }
}

Сбои с тем же сообщением EXC_BAD_ACCESS, но впоследствии это удается.

Я также сбросил симуляторы, очистил папку сборки и обновил Xcode до 10.2.1 (10E1001)

В начале моего теста я определяю мое приложение:

private var app: XCUIApplication = XCUIApplication() и в setup() я запускаю его.

Любая помощь приветствуется.Спасибо!

Редактировать:

Вот трассировка стека:

* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
    frame #0: 0x0000000113a833d0 libsystem_platform.dylib`_platform_strcmp + 80
    frame #1: 0x00000001322086f1 UIKit`-[UIViewAccessibility _accessibilityRetrieveIvarText] + 364
    frame #2: 0x00000001321f5e54 UIKit`-[UITableViewCellAccessibility _accessibilityRetrieveTableViewIvarsText] + 118
    frame #3: 0x00000001321f6b27 UIKit`-[UITableViewCellAccessibility _accessibilityRetrieveTableViewCellText:] + 2749
    frame #4: 0x00000001321f99c1 UIKit`-[UITableViewCellAccessibility accessibilityLabel] + 123
    frame #5: 0x000000012ee47739 PreferencesFramework`-[UITableViewCellAccessibility__Preferences__UIKit accessibilityLabel] + 327
    frame #6: 0x000000013243f31c UIAccessibility`-[NSObject(AXPrivCategory) _accessibilityPotentiallyAttributedValueForNonAttributedSelector:attributedSelector:] + 244
    frame #7: 0x000000013243f478 UIAccessibility`-[NSObject(AXPrivCategory) _accessibilityAXAttributedLabel] + 41
    frame #8: 0x00000001321d620e UIKit`-[UINavigationBarAccessibility_UIViewAccessibilityAdditions _accessibilityAXAttributedLabel] + 650
    frame #9: 0x000000013220b711 UIKit`-[UITableViewCellAccessibilityElement accessibilityLabel] + 48
    frame #10: 0x000000013243f31c UIAccessibility`-[NSObject(AXPrivCategory) _accessibilityPotentiallyAttributedValueForNonAttributedSelector:attributedSelector:] + 244
    frame #11: 0x000000013243f478 UIAccessibility`-[NSObject(AXPrivCategory) _accessibilityAXAttributedLabel] + 41
    frame #12: 0x000000013243e9ae UIAccessibility`-[NSObject(AXPrivCategory) _accessibilityProcessedLabelAttribute] + 34
    frame #13: 0x0000000132442c32 UIAccessibility`-[NSObject(AXPrivCategory) accessibilityAttributeValue:] + 268
    frame #14: 0x000000013246cacd UIAccessibility`_accessibilityAttributesForObject + 493
    frame #15: 0x000000013246c43a UIAccessibility`-[NSObject(UIAccessibilityAutomation) _accessibilityUserTestingSnapshotDescendantsWithAttributes:maxDepth:maxChildren:maxArrayCount:] + 1239
    frame #16: 0x000000013246dfd9 UIAccessibility`-[NSObject(UIAccessibilityAutomation) _accessibilityUserTestingSnapshotWithOptions:] + 1139
    frame #17: 0x0000000132441f09 UIAccessibility`-[NSObject(AXPrivCategory) accessibilityAttributeValue:forParameter:] + 8537
    frame #18: 0x00000001321cb100 UIKit`-[UIApplicationAccessibility accessibilityAttributeValue:forParameter:] + 290
    frame #19: 0x0000000132424657 UIAccessibility`_copyParameterizedAttributeValueCallback + 434
    frame #20: 0x0000000130ef1629 AXRuntime`___AXXMIGCopyParameterizedAttributeValue_block_invoke + 50
    frame #21: 0x0000000130ef0f99 AXRuntime`_handleNonMainThreadCallback + 55
    frame #22: 0x0000000130ef14cb AXRuntime`_AXXMIGCopyParameterizedAttributeValue + 285
    frame #23: 0x0000000130eec976 AXRuntime`AXUIElementCopyParameterizedAttributeValue + 495
    frame #24: 0x0000000130e80351 XCTAutomationSupport`-[XCTAccessibilityFramework userTestingSnapshotForElement:options:error:] + 420
    frame #25: 0x0000000130e77e90 XCTAutomationSupport`-[XCTElementSnapshotRequest(PlatformImplementation) accessibilitySnapshotOrError:] + 1263
    frame #26: 0x0000000130e8305f XCTAutomationSupport`__56-[XCTElementSnapshotRequest loadSnapshotAndReturnError:]_block_invoke_2 + 64
    frame #27: 0x0000000130e728dd XCTAutomationSupport`__XCTPerformOnMainRunLoop_block_invoke + 295
    frame #28: 0x0000000111251aec CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
    frame #29: 0x00000001112512b0 CoreFoundation`__CFRunLoopDoBlocks + 336
    frame #30: 0x000000011124c10b CoreFoundation`__CFRunLoopRun + 2747
    frame #31: 0x000000011124b302 CoreFoundation`CFRunLoopRunSpecific + 626
    frame #32: 0x000000011748d2fe GraphicsServices`GSEventRunModal + 65
    frame #33: 0x0000000119ea2ba2 UIKitCore`UIApplicationMain + 140
  * frame #34: 0x000000010d2afa4b Musify`main at AppDelegate.swift:20:7
    frame #35: 0x0000000113721541 libdyld.dylib`start + 1
    frame #36: 0x0000000113721541 libdyld.dylib`start + 1

А вот трассировка сбоя записи:

* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
    frame #0: 0x0000000107c223d0 libsystem_platform.dylib`_platform_strcmp + 80
    frame #1: 0x00000001269186f1 UIKit`-[UIViewAccessibility _accessibilityRetrieveIvarText] + 364
    frame #2: 0x0000000126905e54 UIKit`-[UITableViewCellAccessibility _accessibilityRetrieveTableViewIvarsText] + 118
    frame #3: 0x0000000126906b27 UIKit`-[UITableViewCellAccessibility _accessibilityRetrieveTableViewCellText:] + 2749
    frame #4: 0x00000001269099c1 UIKit`-[UITableViewCellAccessibility accessibilityLabel] + 123
    frame #5: 0x0000000123633739 PreferencesFramework`-[UITableViewCellAccessibility__Preferences__UIKit accessibilityLabel] + 327
    frame #6: 0x0000000126b4f31c UIAccessibility`-[NSObject(AXPrivCategory) _accessibilityPotentiallyAttributedValueForNonAttributedSelector:attributedSelector:] + 244
    frame #7: 0x0000000126b4f478 UIAccessibility`-[NSObject(AXPrivCategory) _accessibilityAXAttributedLabel] + 41
    frame #8: 0x00000001268e620e UIKit`-[UINavigationBarAccessibility_UIViewAccessibilityAdditions _accessibilityAXAttributedLabel] + 650
    frame #9: 0x000000012691b711 UIKit`-[UITableViewCellAccessibilityElement accessibilityLabel] + 48
    frame #10: 0x0000000126b4f31c UIAccessibility`-[NSObject(AXPrivCategory) _accessibilityPotentiallyAttributedValueForNonAttributedSelector:attributedSelector:] + 244
    frame #11: 0x0000000126b4f478 UIAccessibility`-[NSObject(AXPrivCategory) _accessibilityAXAttributedLabel] + 41
    frame #12: 0x0000000126b4e9ae UIAccessibility`-[NSObject(AXPrivCategory) _accessibilityProcessedLabelAttribute] + 34
    frame #13: 0x0000000126b52c32 UIAccessibility`-[NSObject(AXPrivCategory) accessibilityAttributeValue:] + 268
    frame #14: 0x0000000126b7cacd UIAccessibility`_accessibilityAttributesForObject + 493
    frame #15: 0x0000000126b7c43a UIAccessibility`-[NSObject(UIAccessibilityAutomation) _accessibilityUserTestingSnapshotDescendantsWithAttributes:maxDepth:maxChildren:maxArrayCount:] + 1239
    frame #16: 0x0000000126b7dfd9 UIAccessibility`-[NSObject(UIAccessibilityAutomation) _accessibilityUserTestingSnapshotWithOptions:] + 1139
    frame #17: 0x0000000126b51f09 UIAccessibility`-[NSObject(AXPrivCategory) accessibilityAttributeValue:forParameter:] + 8537
    frame #18: 0x00000001268db100 UIKit`-[UIApplicationAccessibility accessibilityAttributeValue:forParameter:] + 290
    frame #19: 0x0000000126b34657 UIAccessibility`_copyParameterizedAttributeValueCallback + 434
    frame #20: 0x00000001260bf629 AXRuntime`___AXXMIGCopyParameterizedAttributeValue_block_invoke + 50
    frame #21: 0x00000001260bef99 AXRuntime`_handleNonMainThreadCallback + 55
    frame #22: 0x00000001260bf4cb AXRuntime`_AXXMIGCopyParameterizedAttributeValue + 285
    frame #23: 0x00000001260b94f0 AXRuntime`_XCopyParameterizedAttributeValue + 414
    frame #24: 0x00000001260ce1b7 AXRuntime`mshMIGPerform + 237
    frame #25: 0x00000001053ea419 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 41
    frame #26: 0x00000001053e9a7b CoreFoundation`__CFRunLoopDoSource1 + 459
    frame #27: 0x00000001053e400a CoreFoundation`__CFRunLoopRun + 2490
    frame #28: 0x00000001053e3302 CoreFoundation`CFRunLoopRunSpecific + 626
    frame #29: 0x000000010b62c2fe GraphicsServices`GSEventRunModal + 65
    frame #30: 0x000000010e822ba2 UIKitCore`UIApplicationMain + 140
  * frame #31: 0x00000001013dea4b Musify`main at AppDelegate.swift:20:7
    frame #32: 0x00000001078c0541 libdyld.dylib`start + 1
    frame #33: 0x00000001078c0541 libdyld.dylib`start + 1

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

РЕДАКТИРОВАТЬ 2:

Я понял, что с помощью идентификатора доступности приложение также падает. Поэтому мне просто нужно навести курсор на симуляторчтобы приложение вылетало.У меня нет идей: (* ​​1046 *

...