2011-10-11 9 views
0

私のwebappでは簡単なテキストフィールドがあります。このテキストフィールドには、すべてキーアップで常に実行されるjQuery関数があります。この関数には、SQL-Queryの結果を毎回ロードするAjaxリクエストが割り当てられています。私のコードは RailsCastsのコードに相当します。今私はセレンと私のwebappをテストしています。このコード行では、WatirとAjaxリクエスト

browser.text_field(:id => 'textfield').set("Search text") 

テキストが書き込まれ、内容が変更されます。このコードで動的コンテンツに配置されたリンクをクリックした後に

browser.a(:id => "link").click 

問題はクリックイベントが実行されないことです。誰かが問題が何であるか考えましたか? WatirやAjaxの例かもしれませんか?

+0

ここで何が問題なのか分かりませんでした。リンクをクリックしても何も起こりません。何が起こるはずですか?サンプルページを作成してURLを提供できますか? –

+0

あなたは「今、私はWebアプリケーションをSeleniumでテストしていますが、このコード行で」と書かれていますが、Watirコードがあります。私は少し混乱させています。 –

+0

Watir-Webdriverでこれを試しましたか? –

答えて

0

あなたはカピバラの方法を使うことができます。 AJAX用

click_link("link") 

それに対してテストするためにサンプルサイトがなければ、あなたのテストケース

http://opinionatedprogrammer.com/2011/02/capybara-and-selenium-with-rspec-and-rails-3/

+0

ご協力いただきありがとうございます。私は私の質問を更新し、今はWatirでそれを実現します。あなたは何か考えていますか? – shub

+0

なぜあなたは元の質問を読まないのですか? Watirは元の質問に言及していませんでした! – Naveed

0

:js => trueを設定してくださいするのは難しいのですが、私はあなた

のためのいくつかの潜在的な解決策をスローします

クライアントサイドのjavascriptがonkeyupイベントを探している場合は、フィールドの内容を設定した後にイベントを発生させる必要があります。 .fire_eventメソッドでこれを行うことができます

タイミングの問題を調べることができます。入力の結果、リンクの性質が変化している場合、Watirが2つのコメントを連続して実行している可能性があります。クライアント側のコードは、それを実行中です(特に、前後にjqueryコードとWebサーバの間でネットワーク遅延を招くこともあります。コマンド間(ブルートフォース)や特定の要素が期待どおりの状態になるのを待つ必要があるかもしれません。

私はIRB経由で手動でコマンドを実行することをお勧めします(必要に応じてスクリプトから切り取って貼り付けることができます)ので、状態を見ることができます。ブラウザを使用し、特定のアクションの後に画面/ DOMを更新する際の遅延をメモします。それはしばしばタイミングの問題の確認として取られます。

0

これがオリジナルのWatir/Firewatirの場合は、クリックする前にリンク上にマウスを移動してみます。

これまでは、「オートコンプリート」フィールドに入力した後に表示されるリンクでこの問題が発生しました。つまり、巨大な可能性のあるリストから絞り込んでテキストを推測しようとします。

はこれを試してみてください:

browser.wait_until{browser.link(:id => "link").present?} 
browser.link(:id => "link").fire_event("onmouseover") 
browser.link(:id => "link").click 

それが動作する場合、それはちょうど目に見えるのです前にリンクをクリックしようとすると、これを行うに失敗だという可能性があるため、.fire_event("onmouseover")せずにそれを試してみてください。

「Selenium」(間違ってWatirというラベルが付けられています)に関する質問の場合は、私がこれまで使ったことのないアプリケーションなので、上記のすべてを無視してください。