Я пытаюсь написать тесты пользовательского интерфейса для моей страницы входа. На странице есть несколько интро-анимаций, поле поиска (для поиска подходящего сервера для подключения), а затем, когда они выбирают правильный сервер, появляется поле имени пользователя и пароля.EarlGrey Failure - «Клавиатура не исчезла после отказа от статуса первого ответчика»
Вот мой тест до сих пор:
[[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 затем правильно выбирает usernameTextField, но затем не удается набирать текст, давая следующую ошибку после тайм-аута:
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 выбирает следующее поле (поле Пароль) прямо перед его ошибками. У меня нет кода интерфейса, чтобы вообще выбрать поле пароля.
UPDATE: Я использую в этом текстовом поле тип ключа «Следующий», так что, когда пользователь отбрасывает ключ возврата, я отведу их в следующее поле (поле пароля). Для этого, когда нажата клавиша Next, я отменяю firstResponder в этом текстовом поле и вызываю «startFirstResponder» в поле пароля.
Это вызывает ошибку EarlGray, потому что если я удалю вызов «resignFirstResponder», тогда он правильно напечатает мой текст. Вопрос в том, ПОЧЕМУ Я ХОЧУ КНОПКУ «Следующий», когда я этого не говорю !?
Есть ли автокоррекция для клавиатуры, когда она не набирается? У EarlGrey есть поведение, где, если он обнаружит, что Autocorrect включен, тогда он уходит в отставку первого ответчика, отключает автокоррект из текстового поля и возвращается обратно. TTBOMK, это в настоящее время изменяется. –
Исправление и проверка орфографии. Тип клавиатуры по умолчанию. Внешний вид «По умолчанию». Возвращаемый ключ «Далее» (который берет пользователя из поля имени пользователя, в поле пароля). – ermterm
Заявление «[[[[EarlGrey selectElementWithMatcher: grey_accessibilityID (@" usernameTextField ")] assertWithMatcher: grey_interactable()] performAction: grey_tap()];" кажется немного избыточным, так как после этого typeText должен делать все эти проверки. Не могли бы вы удалить это и проверить? –