2017-05-05 4 views
1

XCUIApplication을 사용하여 UI 테스트를 작성하고 있습니다. 셀 행에서 선택된 색인을 테스트하고 있습니다. 테스트를 실행할 때 선택한 인덱스의 텍스트를 가져올 수 없습니다. 그러나 선택한 행을 클릭 할 수 있지만 아래쪽 tableView 정적 텍스트를 사용하여. 이것은 tableViewController가있을 때 발생합니다. 다른 TableViewController 맨 위에 tableView ViewController 추가하려면 노력하고있어. 아래의 tableViewController는 storyboard를 사용하여 생성되지만 위의 viewController는 동적으로 생성됩니다.XCUITest가 동적으로 생성 된 테이블의 액세스 가능성 ID를 감지 할 수 없습니다.

설치 : tableView에 대한 행에 xib를 사용하고 있고 레이블 및 이미지와 함께 사용자 지정 UITableViewCell을 사용하고 있습니다. 라벨과 이미지 모두 접근성이 켜져 있지만 셀은 켜져 있지 않습니다. 셀에서 접근성을 켜려고 시도했지만 여전히 작동하지 않았습니다. 나는이 테스트를 전체있는 tableView에서 테스트를 클릭 실행되지만 정적 텍스트 중 하나를 얻을 수없는 경우

이 내 시험

//the BoxListTable is my ViewController that is on top 
// I added the following code in that viewController: 
    self.view.isAccessibilityElement = true 
    self.view.accessibilityIdentifier = "BoxListTable" 

//I also added these for the tableView but it doesn't show up in my tests 
    tableView.accessibilityIdentifier = "tableview" 
    tableView.isAccessibilityElement = true 

//my test is the following 

XCUIApplication().tables["BoxListTable"].tap() 

입니다. 또한 셀이나 테이블 뷰를 얻을 수 없습니다. ..
복귀 0

: 그것은 0을 반환 포 XCUIApplication.tables [ "BoxListTable"] cells.count 는 // I는
XCUIApplication.tables [ "BoxListTable"] element.children (.other 매칭) 시도

accessibilityIdentifier가 설정되어 있어도 표시되지 않는 이유를 알려주십시오.

+0

나는 [SkyFloatingLabelTextField] (https://github.com/Skyscanner/SkyFloatingLabelTextField)와 비슷한 문제를 겪고 있습니다. 나는 그것에 의해 제시되는 하위 뷰에 접근 할 수 없다 ... –

+0

'po XCUIApplication(). tables' 할 때 당신은 무엇을 얻는가? 뷰 컨트롤러에서'self.view'의 클래스 유형은 무엇입니까? – Oletha

+0

@Oletha XUIApplication(). 테이블을 열면 현재 표시된 모든 테이블을 가져오고 뷰에있는 테이블 뷰는 포함하지 않습니다.아래 tableView에 대한 참조 만 얻을 수 있습니다. XCUIApplication(). tables.count는 1 – user2263712

답변

5

우선 부모보기에서 isAccessibilityElement 플래그를 켜면 (이 경우보기는 BoxListTable 임) 모든 하위 항목에 액세스 할 수 없습니다. UITableViewUITableViewCell에도 동일하게 적용됩니다. 그러나 accessibilityIdentifiers을 설정할 수 있으며 isAccessibilityElementfalse으로 평가되는 경우에도 모든 UI 요소에 대해 표시됩니다.

순수 XCTest 버전이 있지만 이미로드 된 셀 (지연로드 된 모든 셀을 사용할 수 없음)에서만 작동하며 키보드 나 탐색 모음으로 인해 방해받을 수 있습니다. 또한 어떤 액션도 수행하지 않고 엘리먼트의 내용을 찾으면 프레임 워크는이 엘리먼트로 스크롤하지 않는다. 따라서 뷰 exists이 통과하는지 확인하는 것은 isHittable이지만 요소가 사용자가 볼 수있는 영역 밖으로 나오지 않을 수 있으므로 실패합니다.

let app = XCIUApplication() 
let selectedCell: XCUIElement = table.cells.element(matching: NSPredicate(format: "isSelected == true")) 
selectedCell.tap() // If you want to make sure framework will scroll to it. 
selectedCell.staticTexts["yourText"] 
// or 
selectedCell.staticTexts.element(boundBy: index) 

위의 모든 문제를 줄일 수있는 AutoMate 라이브러리를 사용해 보시기 바랍니다.

let app = XCIUApplication() 
let selectedCell: XCUIElement = table.cells.element(matching: NSPredicate(format: "isSelected == true")) 
XCTAssertFalse(selectedCell.isVisible) // `isVisible` checks if element exists in hierarchy and is visible to the user. 
table.swipe(to: .down, untilVisible: selectedCell, from: app) 
XCTAssertTrue(selectedCell.isVisible) 

, 나는 >>here<<을 만들어 놓은 예제 응용 프로그램을 확인하시기 바랍니다이 방법의 모든 작동 방식을 참조하십시오.

isSelected 속성에 문제가있는 경우 XCUIElement에 내 질문에 >>this question<<을 확인해야합니다. 예제 애플리케이션에서 볼 수 있듯이이 문제가 발생했습니다 (Xcode 버전 8.3.2 (8E2002)).

+1

BTW를 반환하고, 관련 UI 테스트 문제로'isAccessibilityElement = false'를 실제로 만들었습니다. 팁을 많이 주셔서 감사합니다. –

+0

나는 그것을 듣게되어 기쁩니다. : D – dzoanb

+0

부모보기에서 isAccessibilityElement = false를 설정하면 도움을 주셔서 감사합니다. – user2263712