2016-03-24 1 views
2

Я пытаюсь написать тесты пользовательского интерфейса для моей страницы входа. На странице есть несколько интро-анимаций, поле поиска (для поиска подходящего сервера для подключения), а затем, когда они выбирают правильный сервер, появляется поле имени пользователя и пароля.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», тогда он правильно напечатает мой текст. Вопрос в том, ПОЧЕМУ Я ХОЧУ КНОПКУ «Следующий», когда я этого не говорю !?

+0

Есть ли автокоррекция для клавиатуры, когда она не набирается? У EarlGrey есть поведение, где, если он обнаружит, что Autocorrect включен, тогда он уходит в отставку первого ответчика, отключает автокоррект из текстового поля и возвращается обратно. TTBOMK, это в настоящее время изменяется. –

+0

Исправление и проверка орфографии. Тип клавиатуры по умолчанию. Внешний вид «По умолчанию». Возвращаемый ключ «Далее» (который берет пользователя из поля имени пользователя, в поле пароля). – ermterm

+0

Заявление «[[[[EarlGrey selectElementWithMatcher: grey_accessibilityID (@" usernameTextField ")] assertWithMatcher: grey_interactable()] performAction: grey_tap()];" кажется немного избыточным, так как после этого typeText должен делать все эти проверки. Не могли бы вы удалить это и проверить? –

ответ

0

Похоже на ошибку в источнике EarlGray. Линия 182 в GREYActions.m

// If the view already is the first responder and had autocorrect enabled, it must 
    // resign and become first responder for the autocorrect type change to take effect. 
    [firstResponder resignFirstResponder]; 

Там нет проверки на месте, чтобы определить, является ли вид ранее включен автозамены. Таким образом, ВСЕ текстовые поля будут называть «resignFirstResponder». Это проблематично для таких установок, как my, где resigningFirstResponder затем передает статус первогоResponder другому текстовому полю.

+0

Вы должны открыть для них проблему github https://github.com/google/EarlGrey/issues –

+0

Готово. спасибо за помощь @gran_profaci – ermterm

+0

проблема, похоже, была обновлена. Это решит вашу проблему? –

Смежные вопросы