[ios] UI 테스트 실패-요소 나 하위 요소 모두 secureTextField에 키보드 포커스가 없습니다.

이것은 나의 경우이다 :

let passwordSecureTextField = app.secureTextFields["password"]
passwordSecureTextField.tap()
passwordSecureTextField.typeText("wrong_password") //here is an error

UI 테스트 실패-요소 나 자손 모두 키보드 포커스를 가지고 있지 않습니다. 요소:

뭐가 잘못 되었 니? 이것은 정상 작동 textFields하지만 문제는 오직 발생합니다 secureTextFields. 해결 방법이 있습니까?



답변

이 문제로 인해 많은 고통을 겪었지만 적절한 해결책을 찾았습니다. 시뮬레이터에서 ‘하드웨어-> 키보드-> 하드웨어 키보드 연결’이 꺼져 있는지 확인하십시오.


답변

최근에 우리는 허용 된 답변의 솔루션을 영구적으로 유지하는 해킹을 발견했습니다. 시뮬레이터 설정을 비활성화하려면 명령 줄에서 ‘하드웨어-> 키보드-> 하드웨어 키보드 연결’을 작성하십시오.

defaults write com.apple.iphonesimulator ConnectHardwareKeyboard 0

실행중인 시뮬레이터에는 영향을 미치지 않습니다. 시뮬레이터를 다시 시작하거나 새 설정을 시작하여 해당 설정이 적용되도록해야합니다.


답변

나는 나를 위해 완벽하게 작동하는 작은 확장 (Swift)을 작성했습니다. 코드는 다음과 같습니다.

extension XCTestCase {

    func tapElementAndWaitForKeyboardToAppear(element: XCUIElement) {
        let keyboard = XCUIApplication().keyboards.element
        while (true) {
            element.tap()
            if keyboard.exists {
                break;
            }
            NSRunLoop.currentRunLoop().runUntilDate(NSDate(timeIntervalSinceNow: 0.5))
        }
    }
}

주요 아이디어는 키보드가 표시되기 전에 요소 (텍스트 필드)를 계속 두드리는 것입니다.


답변

Stanislav는 올바른 아이디어를 가지고 있습니다.

팀 환경에서는 자동으로 작동하는 것이 필요합니다. 나는했습니다 수정을 마련 여기 내 블로그에.

기본적으로 붙여 넣기 만하면됩니다.

UIPasteboard.generalPasteboard().string = "Their password"
let passwordSecureTextField = app.secureTextFields["password"]
passwordSecureTextField.pressForDuration(1.1)
app.menuItems["Paste"].tap()


답변

이 오류의 또 다른 원인은 접근성 요소 ( view.isAccessibilityElement = true) 로 설정된 텍스트를 입력하려고하는 텍스트 필드의 상위 뷰가있는 경우 입니다. 이 경우 XCTest는 서브 뷰에서 텍스트를 입력하기위한 핸들을 얻을 수 없으며 오류를 리턴합니다.

UI 테스트 실패-요소 나 자손 모두 키보드 포커스를 가지고 있지 않습니다.

UITextField에서 키보드가 위로 올라가고 깜박이는 커서를 자주 볼 수 있기 때문에 어떤 요소에도 포커스가없는 것은 아니며 도달 할 수있는 요소에 포커스가없는 것입니다. UISearchBar에 텍스트를 입력하려고 할 때이 문제가 발생했습니다. 검색 창 자체는 텍스트 필드가 아니며, 접근성 요소로 설정할 때 기본 UITextField에 대한 액세스가 차단되었습니다. 이 문제를 해결하기 위해 searchBar.accessibilityIdentifier = "My Identifier"로 설정 UISearchBar되었지만 로 설정 isAccessibilityElement되지 않았습니다 true. 그 후에 다음 형식의 테스트 코드를 작성하십시오.

app.otherElements["My Identifier"].tap()
app.otherElements["My Identifier"].typeText("sample text")

공장


답변

그것은 여러 번 나와 함께 일어났다. 시뮬레이터에서 키보드 하드웨어 및 OSX와 동일한 레이아웃을 비활성화해야합니다

하드웨어 / 키보드 (모두 비활성화)

그 후 키보드 소프트웨어가 닫히지 않고 테스트에서 텍스트를 입력 할 수 있습니다

하드웨어 비활성화


답변

다음과 같이 앱을 시작하고 텍스트 필드에 데이터를 입력 할 때 잠을 자십시오.

sleep(2)

내 경우에는 매번이 오류가 계속 발생 했으며이 솔루션만이 도움이되었습니다.