2017-01-12 11 views
2

내 iOS 앱에 대해 UITests를 구현 중입니다. 지금까지 몇 가지 간단한 테스트를 수행 할 수 있었지만 두 개의 섹션이있는 tableView에 왔습니다. 각 섹션에는 정적 텍스트를 포함하는 sectionHeaderView가 있습니다 (예 : "섹션 1"과 "섹션 2", 일반 sectionHeader 스타일.XCTest로 staticText를 올바르게 찾는 방법

app.tables.staticTexts["SECTION 1"].exists을 수행하면 true을 반환합니다. 이것은 첫 번째 섹션으로,보기가로드 될 때 맨 위에 표시됩니다.

"SECTION 2"와 동일하지만, 수행 할 때 false을 반환합니다. 이 섹션의 sectionHeaderView는이 시점에서 뷰 밖에 있으므로, 이것이 문제라고 생각했으나 그렇지 않은 것으로 판명되었습니다. app.swipeUp()을 시도했는데 두 번째 섹션이 성공적으로 화면에 나타납니다. 스 와이프가 끝난 후 몇 초 동안보기가 안정되어 잠을 자고 같은 검사를 수행하지만 두 번째 섹션 뷰를 찾을 수 없습니다.

아래로 스크롤 한 후, 나는 찾을 수 있는지에 app.tables.staticTexts.debugDescription을 인쇄하는 것을 시도했다, 그것은 첫 번째 섹션뿐만 아니라 내가있는 tableView의 맨 아래에 가지고 tableFooterView을 보여줍니다.

나는 app.tables.staticTexts["SECTION 2"].exists을 수행 할 때 시뮬레이터에서 "SECTION 2"텍스트를 볼 수 있습니다. 그러나 그것은 시험에 존재하지 않습니다.

두 번째 섹션 헤드 뷰가 XCTest에서 완전히 보이지 않는 이유는 무엇입니까? 내가이 접근 가능성에 대한 어떤 종류의 접근성을 무력화 시켰을 수 있습니까? 난 .. 아무것도 찾을 수 없습니다

편집, 출력 :

t = 32.25s  Find: Descendants matching type Table 
    t = 32.26s  Find: Descendants matching type StaticText 
    t = 32.26s  Find: Elements matching predicate '"SECTION 1" IN identifiers' 
Found SECTION 1. Will scroll down to find Section 2. 
    t = 32.26s  Swipe up Target Application 0x6080000bbf60 
    t = 32.26s   Wait for app to idle 
    t = 32.30s   Find the Target Application 0x6080000bbf60 
    t = 32.30s    Snapshot accessibility hierarchy for my.bundle.identifier 
    t = 33.09s    Wait for app to idle 
    t = 33.14s   Synthesize event 
    t = 33.42s   Wait for app to idle 
Slept for 3 seconds. Have scrolled down. SECTION 2 in view now. 
    t = 38.86s  Snapshot accessibility hierarchy for my.bundle.identifier 
    t = 39.64s  Find: Descendants matching type Table 
    t = 39.65s  Find: Descendants matching type StaticText 
    t = 39.65s  Find: Elements matching predicate '"SECTION 2" IN identifiers' 
    t = 39.66s  Assertion Failure: MyUITests.swift:347: XCTAssertTrue failed - SECTION 2 does not exist 
    t = 39.66s  Tear Down 
+0

당신은 두 번째 섹션을 볼 때 헤더에 캐시 된 스냅 샷/계층 구조가 사용된다고 출력됩니까? – Oletha

+0

@Oletha No .. 그것이 무엇을 말하는지에 대한 업데이트 된 질문을보십시오. – Sti

답변

0

나는 아직 언급 할 수 있기 때문에 질문의 커플 (나는 최근 UI 테스트를 많이 해 봤는데, 너무 조금 배우는 중이 야)

위로 스 와이프 한 후 "SECTION 1"레이블을 무시한 후 app.tables.staticTexts["SECTION 2"].exists을 (를) 어설트하려고하면 어떻게됩니까?

sectionHeaderView은 사용자 정의 하위 클래스입니까?

특정보기를 accessibilityIdentifier에 할당하고 해당 식별자를 사용하여 XCUIElement 프록시를 통해 액세스하는 것이 도움이된다는 것을 발견했습니다.

또한 내가 최근에 발견 한 점은 UIAccessibilityContainer을 사용하지 않으면 슈퍼 뷰의 접근 가능성 특징을 언급하면 ​​서브 뷰의 접근성 특성을 무효화 할 수 있다는 것입니다.

3

장소에서 코드에 중단 점 :

po print(XCUIApplication().debugDescription) 

이 사용할 수 있습니다 모든 것을 나열합니다 :

app.tables.staticTexts["SECTION 2"].exists 

디버그 패널에 중단 점 유형이 충돌 때 입력 히트 XCUITest. 거기에 섹션 2 텍스트를 찾으십시오. 이 일이 내게 자주 일어날 때, 나는 그것을 잘못 입력했거나 어플에있는 텍스트가 어딘가에 여분의 공간을 가지고 있습니다. .staticText을 사용할 때 정확히 일치해야합니다.

1

테이블 바닥 글에 대해이 문제가 발생했습니다.

XCTAssert(app.otherElements["SECTION 2"].exists) 

감사를 hwpowers에 디버깅 팁을 위해 : 다음과 같은 코드가 작동해야하므로 "기타"객체가 아닌 staticTexts로 취급되는 것 같다

po print(XCUIApplication().debugDescription)