이것은 나의 경우이다 :
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")
공장