2012-04-30 1 views
0

ある種のテストケースでは、私のアプリケーションはJavaScriptのポップアップ表示をスローします。これは、その月に書かれた文字がなくなり、Watirの自動化が中断されます。JavaScriptのポップアップが開いた場合、「OK」ボタンをクリックするWatir条件付きループを書くにはどうすればよいですか?

Watirを使用してJavaScriptのポップアップをキャッチして「OK」ボタンをクリックして移動する方法はありますか?

これは私がこれまで持っているものです。

# Send New Letter 
browser.link(:class,'new-message-button').click 
browser.frame(:id,'letterText_ifr').click 

javascript_dialog.button('OK').click # <= I need help here with conditional 

browser.send_keys 'This is a test' 
browser.button(:id,'send-button').click 
browser.link(:id,'sign_out').click 
+0

あなたが実行しているのjavascriptへのアクセスを持っていますか? 'window.alert = function(){};'のようなことをして、ポップアップが表示されないようにすることはできますか? – david

+0

さて、ポップアップが表示されたら、条件付きでそれを認識し、[OK]ボタンをクリックします。それが起こると、OKクリックに続くコードの残りの部分を無視しなければならないでしょう。 "browser.send_keys"これはテスト "..." – urbanaut

答えて

2

あなたが手紙を送るために(それが失敗した場合)のコードをここにJSダイアログを期待して、それを救出するような何かをしようとした場合はどう?

browser.frame(:id,'letterText_ifr').click_no_wait 
begin 
    javascript_dialog.button('OK').click # <= I need help here with conditional 
rescue 
    browser.send_keys 'This is a test' 
    browser.button(:id,'send-button').click 
end 
browser.link(:id,'sign_out').click 

、それは非常にエレガントではないが、あなたが

+0

あなたのコードはある程度問題を解決するようですが、JavaScriptのポップアップの後にOKボタンをクリックすると、Watirはログアウトリンクをクリックするためのテストを続けるためにブラウザに戻る方法を知らないようです。 – urbanaut

+0

ブラウザはまだそこにいるはずですが、私はあなたが「ブラウザに戻って」何を意味するのか分かりませんが、あなたのサイトにアクセスすることなく、その時点で何が起こっているのかを推測することは難しいです –

+0

コメントあなたの質問には、「OKクリックに続くコードの残りの部分を無視してください」というメッセージが表示されます。これは、必要なものではなく、「電子メールを送信しようとしないで、ログアウトのクリックを続行しないでください。そのコードをレスキューセクションから移動して、常に実行されるようにします。私はその答えを編集します(あなたが本当に望んでいるものを理解していると仮定して、ダイアログが存在する場合、残りのコードを無視していないとします) –

1

は、たぶん私は誤解してる必要なものを行う可能性がありますが、明白な答えがあるように見えるでしょう:できるだけ早く私がしようと試みるよう

javascript_dialog.button('OK').click if javascript_dialog.button('OK').exists? 
+0

ここで問題となるのは、ダイアログがある場合はそれだけでなく、彼ができる場合はテストメールを送信する –

+0

ああ、私はあなたが意味するものを参照してください。とにかくそれは条件に役立つかもしれません。存在するか?おそらくあなたが望むものです。可能性はありますか?と目に見える? – pguardiario

0

をJavaScriptポップアップのボタンをクリックすると、Rubyはブラウザのフォーカスを失い、クラッシュします。

私はエラーを無視して、手紙をまだ送っていないかもしれない別の個人にテストを再実行するためにサインアウトしました。 (4月30日は、今週内にあるので、警告が表示するように原因となる)以下の新しいコードを参照してください:ダイアログの外観の時間がランダムではなく、非常によく知られた/定義され、あなたの場合は

if browser.text.include?('30-Apr') 
    browser.link(:id,'sign_out').click 
else 
    browser.send_keys 'This is a test' 
    browser.button(:id,'send-button').click 
end 
+0

これは本当にモーダルのjavascript警告である場合、これは奇妙に思えます。通常は、あなたがそれを解消するまでブラウザとやりとりすることはできません。私はあなたが実際にポップアップのいくつかの他の種類を見ていると、それがクリックするjavascriptの警告を見つけることができなかったため、エラーがあったのだろうか。あなたが探していた'30 -april 'テキストがアラートテキストの一部である場合、それはDOMの一部であるいくつかの構造を見ている別の指標であり、JavaScriptのアラートではありません –

1

until javascript_dialog.button('OK').exists? do 
    sleep 1 
end 
javascript_dialog.button('OK').click 

または

sleep 1 until javascript_dialog.button('OK').exists? 
javascript_dialog.button('OK').click 

または

javascript_dialog.button('OK').when_present.click 
:これらのいくつかを使用することができます

または

javascript_dialog.button('OK').wait_until_present 
javascript_dialog.button('OK').click 
関連する問題