5

何かを行うときに特定の要素にフォーカスを設定する必要がある angular.js アプリケーションがあります (つまり、ユーザーがエラーを修正できるように、無効なフォーム フィールドにフォーカスを設定します)。

angular-e2e テスト内でこの動作をテストしようとしています:

it('should set the focus to the invalid field', function() {
  input('email').enter('foo'); // this is not a valid email address
  element(/* submit button */).click(); // try to submit the form

  // How do I do this?
  expect(element(/* email input element */)).toHaveTheFocus();
});

特定の要素にフォーカスがある (ない) ことを期待するにはどうすればよいですか? 「:focus」セレクターは既に試しました

expect(element('input[id="..."]:focus').count()).toBe(1);

しかし成功しませんでした (特定の要素が表示されているかどうかをテストすることに触発されました)。

フォーカスを設定するには、入力フィールドにフォーカスを設定する方法のアイデアを使用しますか?

私はこれの単体テストも書いていて、DOM focus() 関数でスパイを使用することになりました (これは、私の知る限り、e2e テストでは不可能/望ましくありません)。

4

1 に答える 1

1

ここには 2 つの選択肢があります。特にE2Eテストで私が本当にお勧めする最初の方法は、これを処理するマッチャーを提供するJasmine-jQueryを使用することです。toBeFocused

Jasmine-jQuery が大きすぎるか気に入らないために含めたくない場合は、次の 2 つのオプションがあります。

  • ボタンをドキュメントのアクティブな要素と比較すると、次の方法でアクセスできます。document.activeElement
  • ボタンを要素自体から取得して、ドキュメントのアクティブな要素と比較します (これは jasmine-jquery が行う方法です)。DOMELEMENT.ownerDocument.activeElement
于 2014-04-25T20:08:42.197 に答える