ログインページの UI テストを作成しようとしています。このページには、いくつかのイントロ アニメーション、検索フィールド (接続する適切なサーバーを見つけるため) があり、適切なサーバーを選択すると、ユーザー名とパスワードのフィールドが表示されます。
これまでの私のテストは次のとおりです。
[[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 はテーブルビュー セルを正しく選択します。
その後、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 はエラーになる直前に次のフィールド (パスワード フィールド) を選択しているようです。パスワード フィールドを選択するための UI コードがまったくありません。
更新:このテキスト フィールドでリターン キー タイプ "Next" を使用しているため、ユーザーがリターン キーをタップすると、次のフィールド (パスワード フィールド) に移動します。これを行うには、Next キーが押されたときに、そのテキスト フィールドで firstResponder を辞任し、パスワード フィールドで「becomeFirstResponder」を呼び出します。
「resignFirstResponder」呼び出しを削除すると、テキストが正しく入力されるため、EarlGray でエラーが発生します。問題は、「次へ」キーを押すように指示していないのに、なぜ「次へ」キーを押すのか!?