rubyのWatirgemを使用して、javascriptポップアップを開くボタンをクリックしてから、ポップアップの[OK]をクリックしようとしていますが、それができないようです。ボタンはフレーム内のフレームにあります。私は広範囲に検索し、 javascriptポップアップに関するWatir wikiエントリを読みましたが、何も機能しません。
これは、execute_scriptとclick_no_waitが期待どおりに機能していないためだと思います。
たとえば、次のコマンド:
@browser.execute_script('window.alert = function() {}')
@browser.execute_script('alert("hello")')
何もしないという予想される動作の代わりに、「こんにちは」というjavascriptポップアップを作成します。
コマンド:
@browser.button(:value, 'Submit').click
javascriptポップアップを作成するボタンをクリックします。その後、ポップアップで[OK]をクリックするまでスクリプトがハングします。
コマンド:
@browser.button(:value, 'Submit').click_no_wait
ボタンをクリックしません(またはボタンをクリックしてonclickイベントをトリガーしません)。
私も試しました:
Timeout::timeout(1) { @browser.button(:value, 'Submit').click }
と
Thread.new { @browser.button(:value, 'Submit').click }
ただし、Timeoutが例外をスローすることはなく、ポップアップで[ok]を手動でクリックするまでルビーがハングし、新しいスレッドで実行してもWatirはクリックしません。
誰かが解決策を手伝ったり提供したりできるでしょうか?
編集:問題は、@ browser.button.clickの後、ポップアップが閉じるまでスクリプトがハングすることです。@ browser.alert.okはポップアップを正常に閉じますが、ボタンがクリックされた後、ポップアップが閉じるまでスクリプトがハングするため、スクリプトは@browser.alert.okを実行できません。このキャッチ22はclick_no_waitによって解決されるはずですが、click_no_waitはクリックしていません。
システム情報:
Windows 7Enterprise64ビット
InternetExplorerバージョン9.0.12watir
-4.0.2-x86-
mingw32ruby 1.9.3p286(2012-10-12)[i386-mingw32]