2011-06-29 16 views
0

私はセレンの初心者です...Seleniumテスト実行時にイベントを処理できますか?

JavaScriptプログラマーとして、私は自分のSelenium-2テスト(JUnit)でJavaScriptイベントを処理したいと考えています。私は既存のテストのすべてが "waitForSomethingToBeRendered"メソッドを持つチームに参加しています。 SeleniumのテストでDOM(またはカスタム)イベントを処理する方法はありますか?

また、開発者がFireBugを使用してSelenium-2テストの書き込み/デバッグを行うSOを読みました。これはどのように作動しますか? Seleniumが立ち上げたブラウザにFireBugが表示されません。同様に、なぜ次のことは効果がないように見えるのですか? Selenium/JUnitがサポートしていないものを試していますか?

selenium().getEval("alert('hello');"); 
selenium().getEval("debugger;"); 

答えて

1

セレンがストリップされたFirefoxを開くため、Firebug拡張子が表示されません。私はそれがはるかに速い理由を推測しています。プラグインを追加することは可能です(そしてセレン2ではかなり簡単です)。

セレン1(私はセレン2がそれをどのように処理しているのかわかりません)がアラートを嚥下するため、アラートは機能しません。アラートを処理するためのAPIがあります。

さらに、セレン-1では、JSは別のウィンドウで実行されます。したがって、document.getElementById()に相当するのはsel.getEval("selenium.browserbot.getCurrentWindow().document.getElementById()")です。

最後に、イベントについてはわかりませんが、条件を待つことができます:sel.wait_for_condition()

+0

コメントありがとうございます(+1)。私はSelenium-2を使用しています。 FireBug/Seleniumプラグインを私に指摘できますか? – Upperstage

+0

この質問をチェックアウト:http://stackoverflow.com/questions/3421793/how-do-i-run-firebug-within-selenium-2 – Guy

+0

nice link;ありがとう。 – Upperstage

1

まず、Seleniumを使い始める場合は、WebDriver用の2.0 APIを使用することをお勧めします。 2.0のJavaScriptを評価するには、WebDriverオブジェクトをJavascriptExecutorオブジェクトにキャストし、それによって提供されるメソッドを使用します。 'waitForSomethingToBeRendered'はいくつかのステップで実行する必要があります。まず、ページ上でDOMオブジェクトが使用可能であることを確認する必要があります。 DOMオブジェクトは、あなたが行うことができます利用可能であるかどうかを判定した後

driver.findElements(By.id("asdf")).size() != 0 

WebElement e = null; 

try { 
    e = driver.findElement(By.id("asdf")); 
} catch { 
    ... 
} 

または:このためには、このような何かを行うことができるかどうか、あなたに戻ります

e.isDisplayed() 

その要素は現在表示されています。

あなたがFireBugとSeleniumについて見たことに関しては、プラグインではないSelenium RC/WebDriverのFirefoxプラグインであるSelenium IDEが混乱していると思います。

+0

FireBugプラグインについての上記のコメントを参照してください。 – Upperstage

1

Firefoxの場合は通常、サイトをブラウズしてDOMを調べて、Seleniumスクリプトで選択する正しい要素とクラスIDを判断するためにFirefoxの場合はFirebugを使用します。 extjsを使用している場合は、extjsが要素idをランダム化するので、どの要素を選択するかを決定する上で面白いことがいくつかあります。最善の方法は、追加のCSSクラスを追加して正しい要素を見つけ、そのクラスで選択することです。

+0

ID部分に同意しました。 CSSセレクタは、移動する方法です。 –

+1

コメントありがとうございます(+1)。 ExtJSは「ランダム」なIDを追加するために不正なラップを取得します。私は通常、より予測可能ですが、ユニークなDOM IDを保証します。 – Upperstage

関連する問題