2

ログインページの 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 でエラーが発生します。問題は、「次へ」キーを押すように指示していないのに、なぜ「次へ」キーを押すのか!?

4

1 に答える 1

0

EarlGray ソースのバグのようです。GREYActions.m の 182 行目

// 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」を呼び出します。これは私のようなセットアップでは問題であり、resigningFirstResponder は firstResponder ステータスを別のテキストフィールドに渡します。

于 2016-03-24T23:35:57.427 に答える