こんにちは、現在、ページの読み込み時に特定のフィールドにフォーカスがあるかどうかをテストしています。これを行う方法についてはどこにも見つかりませんでした。基本的に私がやりたいことは、ページ内の特定の要素にフォーカスがあるかどうかを確認することです。これを確認する組み込みの方法はありますか?
ありがとう。
はそれdocument.activeElement
を与えますが、そのプロパティは最新のブラウザでのみ利用可能です。
何に焦点が当てられているかを示す組み込みの方法はありません。
私が知っている唯一の方法と私が使用する方法は次のとおりです。すべてのテキスト要素を含むベースウィジェットにフォーカスとブラーのイベントをアタッチし、それを自分で追跡します。
JQuery で要素にフォーカスがあるかどうかをテストする最良の方法は、.is(':focus') コマンドを使用するか、$(':focus') を使用してフォーカスのある要素を選択することです。ただし、Capybara では、これは不可能です。テスト時にブラウザ自体が OS にフォーカスを持っていないため、Capybara Webkit または Selenium はすべての要素にフォーカスがないことを常に通知するためです。
しかし、私はこの問題の解決策を見つけ、テストの実行時にこの問題を修正する簡単なスクリプトを開発しました。問題は、ブラウザーのネイティブ マッチ セレクターとクエリ セレクターがオペレーティング システムに対応していることにあります。つまり、オペレーティング システム内でブラウザーと Web ページ タブにフォーカスがない限り、:focus セレクターはドキュメント内のどの項目とも一致しません。これを回避する方法を見つけるために JQuery の内部を調べてみました。これは、ブラウザーのネイティブ関数を使用してセレクター クエリを最適化せずに、JQuery に強制的に Sizzle を使用させるだけで実行できます。
JQuery を含める前に次のスクリプトhttps://gist.github.com/1166821を含めると、Selenium テストは :focus テストに合格します。
問題、解決策、およびテストの実行方法の完全な説明については、http://blog.mattheworiordan.com/post/9308775285/testing-focus-with-jquery-and-selenium-orを参照してください。
この同じ問題を抱えている他の人に役立つことを願っています。