Я пытаюсь написать тесты пользовательского интерфейса для моей страницы входа. На странице есть несколько вступительных анимаций, поле поиска (для поиска нужного сервера для подключения), а затем, когда они выбирают правильный сервер, появляется поле имени пользователя и пароля.
Вот мой тест на данный момент:
[[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"searchTextField")]
assertWithMatcher:grey_sufficientlyVisible()];
[[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"searchTextField")] performAction:grey_typeText(@"gtX9Vn23k1")];
[[EarlGrey selectElementWithMatcher:grey_anyOf([self matcherForUITableViewCell], nil)] performAction:grey_tap()];
[[[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"usernameTextField")]
assertWithMatcher:grey_interactable()] performAction:grey_tap()];
[[[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"usernameTextField")]
assertWithMatcher:grey_interactable()] performAction:[GREYActions actionForTypeText:@"Why isnt this working?"]];
Этот тест не проходит.
EarlGrey правильно выбирает и печатает в первое текстовое поле (searchTextField).
EarlGrey правильно выбирает ячейку tableview!
Затем EarlGrey правильно выбирает имя пользователя TextField, но затем не удается набрать текст, что приводит к следующей ошибке после тайм-аута:
Exception: ActionFailedException
Reason: Action 'Type "Why isnt this working"' failed.
Element matcher: (respondsToSelector(accessibilityIdentifier) && accessibilityID("usernameTextField"))
Complete Error: Error Domain=com.google.earlgrey.ElementInteractionErrorDomain Code=1 "Keyboard did not disappear after resigning first responder status of <GHDLoginTextField: 0x7fa96a616bd0; baseClass = UITextField; frame = (150 387; 468 29); text = ''; opaque = NO; autoresize = RM+BM; tintColor = UIDeviceWhiteColorSpace 1 1; gestureRecognizers = <NSArray: 0x7fa96a55d5d0>; layer = <CALayer: 0x7fa96a616a80>>" UserInfo={NSLocalizedDescription=Keyboard did not disappear after resigning first responder status of <GHDLoginTextField: 0x7fa96a616bd0; baseClass = UITextField; frame = (150 387; 468 29); text = ''; opaque = NO; autoresize = RM+BM; tintColor = UIDeviceWhiteColorSpace 1 1; gestureRecognizers = <NSArray: 0x7fa96a55d5d0>; layer = <CALayer: 0x7fa96a616a80>>}
"Клавиатура не исчезла после отмены статуса первого ответившего "
Кто-нибудь знает, что здесь происходит? Странно, кстати, похоже, что EarlGrey выбирает следующее поле (поле пароля) прямо перед ошибкой. У меня нет кода пользовательского интерфейса, чтобы вообще выбрать поле пароля.
ОБНОВЛЕНИЕ: я использую тип клавиши возврата «Далее» в этом текстовом поле, так что, когда пользователь нажимает клавишу возврата, я переношу его в следующее поле (поле пароля). Для этого, когда нажата клавиша Next, я убираю firstResponder в этом текстовом поле и вызываю «becomeFirstResponder» в поле пароля.
Это приводит к тому, что EarlGray выдает ошибку, потому что, если я удаляю вызов «resignFirstResponder», он правильно печатает мой текст. Вопрос в следующем: ПОЧЕМУ ОН НАЖИМАЕТ клавишу «Далее», когда я этого не говорю!?