Selenium RCでフォーカスがある要素をテストするにはどうすればよいですか?
4 に答える
私が同じ問題を抱えていたとき、さまざまな理由で、他の答えはどれも私にはうまくいきませんでした。私は最終的に次のことを行いました(JavaのSelenium 2.0 WebDriverを使用)。
WebDriver driver = new FirefoxDriver();
String elScript = "return document.activeElement;";
// Note that the executeScript call returns a WebElement,
// so you can do quite a lot with the result.
WebElement focuseedEl = (WebElement) ((JavascriptExecutor) driver).executeScript(elScript);
コメントは、私が持っていた混乱のポイントを明確にしています。executeScriptは、実行するように指示した内容に基づいてさまざまなものを返しますが、これは非常に難しい場合があります。
:focus
疑似クラスのアイデアを機能させることができませんでした。理由はわかりませんが、ターゲティングcss=#search_input input.text
は一致しましたが、一致css=#search_input input.text:focus
しませんでしたか?しかし、これが私のために働いたものです:
self.assertEquals(self.se.get_element_index('dom=document.activeElement'),
self.se.get_element_index('//input[@id="search-query"]'))
これはPythonSeleniumAPIを使用しているため、get_element_index()
呼び出しはコアSeleniumコマンドリストのラッパーです。これを環境に適合させます。ドキュメントのフォーカスされた要素の要素インデックス(Javascript DOMロケーターで取得)とフォーカスをテストする要素の要素インデックス(XPathロケーターで取得)を評価しています。この質問も参照してください。
私はこの問題の解決策を見つけ、テストの実行時にこの問題を修正するための簡単なスクリプトを開発しました。問題は、ブラウザのネイティブ一致セレクターとクエリセレクターがオペレーティングシステムに対応していることです。つまり、ブラウザーとWebページタブにオペレーティングシステム内のフォーカスがない限り、:focusセレクターはドキュメント内のどのアイテムとも一致しません。私はこれを回避する方法を見つけるためにJQueryの内部を調べました。これは、ブラウザーのネイティブ関数を使用してセレクタークエリを最適化するのではなく、JQueryにSizzleを使用させるだけで実行できます。
次のスクリプトhttps://gist.github.com/1166821を含めると、JQueryを含める前に、Seleniumテストが:focusテストに合格します。
問題、解決策、およびテストの実行方法の完全な記述については、http://blog.mattheworiordan.com/post/9308775285/testing-focus-with-jquery-and-selenium-orを確認してください。
これが同じ問題を抱えている他の人に役立つことを願っています。
Seleniumに要素ロケーターを提供するときにCSSセレクターを使用できます:http://release.seleniumhq.org/selenium-core/1.0/reference.html#locators
したがって、:focus
セレクターでCSS疑似クラスを使用して、要素がフォーカスされている場合にのみ一致させることができます。
verifyElementPresent
それを次のようなアクションとターゲットと組み合わせますcss=.yourclassname:focus
。yourclassname
もちろん、CSSクラス名に置き換えるか、他のCSSセレクターの1つを使用してください。重要なの:focus
は最後です。
これは、SeleniumIDEFirefoxプラグインではほぼ確実に機能しないことに注意してください。これは、このプラグインが代わりにフォーカスを持っているためだと思います。IDEで動作させることができませんでした(テストは常に失敗しました)が、エクスポートしてJavaテストとして実行すると正常に動作しました。
HTH
サム