2

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]

4

1 に答える 1

1

javascriptポップアップと対話するために使用できるアラートAPI(watir-classicおよびwatir-webdriver )があります。

次を使用してポップアップを閉じてみてください。

@browser.alert.ok

更新-回避策:

これは、フレーム内の要素にElement#click_no_waitを使用する場合のバグのようです。Issue 45を更新し、パッチを送信しようとしています。

それまでの間、スクリプトの先頭に次のモンキーパッチを追加すると、問題が解決するはずです(つまり、click_no_waitは待機しないでください)。

require 'watir-classic'

Watir::IE.new(true)
module Watir
    class Frame
        def attach_command
            tag_name = @specifiers[:tag_name].join("' << '")
            @container.page_container.attach_command + ".frame(:tag_name => Array.new << '#{tag_name}', :unique_number => #{unique_number})"
        end
    end
end
于 2012-12-17T16:56:42.313 に答える