Forum: Ruby on Rails how to capture text from a popup window..in watir

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
A9efb98b26cfeb47067f17818a5ad278?d=identicon&s=25 SHALINI GUPTA (Guest)
on 2007-04-24 12:39
(Received via mailing list)
Hi all,

I got the answer how to click on 'ok' button.
But still i have two problems
---
that code is not working when im trying to run that code through the exe
file of that ruby file which is using that code.

and second one is i want to capure the text of that popup..


i tried this with no success

 #----- js_dialog.rb -----

require 'win32ole'
require 'test/unit'
require 'test/unit/ui/console/testrunner'

#
# Use AutoIt to read and close Javascript dialog windows
#
module JavascriptDialog

    #
    # Target javascript dialogs with this window title
    #
    WINDOW_TITLE = "Microsoft Internet Explorer"


    class << self

        #
        # Return the text contained in a javascript dialog (e.g. an
"alert()")
        # if such a dialog is present or appears within +wait_seconds+.
        #

        def text(wait_seconds = 1)
            # sleep 0.3
            autoit.WinWait(WINDOW_TITLE, nil, wait_seconds) if
wait_seconds
            s = autoit.WinGetText(WINDOW_TITLE)
            s unless s == "1"

        end

        #
        # Close any active javascript dialog
        #
        def close
            autoit.WinClose WINDOW_TITLE
        end

        #
        # Press the "OK" button on a javascript dialog

        #
        def ok
            autoit.ControlClick(WINDOW_TITLE, "", "OK")
        end
        #
        # Press the "Cancel" button on a javascript dialog
        #

        def cancel
            autoit.ControlClick(WINDOW_TITLE, "", "Cancel")
        end
        #
        # Press the "Yes" button on a javascript dialog
        #
        def yes

            autoit.ControlClick(WINDOW_TITLE, "", "Yes")
        end
        #
        # Press the "No" button on a javascript dialog
        #
        def no

autoit.ControlClick(WINDOW_TITLE, "", "No")
        end

        private

            #
            # Return an AutoIt COM object, creating it if it doesn't
already
            # exist

            #
            def autoit
                unless defined? @@autoit
                    @@autoit = WIN32OLE.new("AutoItX3.Control")
                end
                @@autoit
            end

    end
end

module Test::Unit::Assertions
    #
    # Passes if a Javascript dialog appears within +wait_seconds+ and
its
    # text matches the given (optional) pattern.
    #
    # Use like this:

    #  assert_js_dialog do
    #    watir_command_to_make_dialog_appear
    #  end
    # Or like this:
    #  assert_js_dialog /Text to find in the dialog/, "Cancel" do
    #    watir_command_to_make_dialog_appear

    #  end
    #
    def assert_js_dialog(pattern = //, action = "close", message = nil)
        _wrap_assertion do
            begin
                pipe = IO.popen("ruby exetry.rb #{action}")

                yield
                window_text = pipe.read rescue ""
                pipe.close
                unless window_text.empty?
                    assert_block(build_message(message,

                        "<?> not found in JavaScript dialog.", pattern))
do
                            window_text.match(pattern)
                    end
                else
                    raise Test::Unit::
AssertionFailedError.new(
                        build_message(message, "No JavaScript window
found."))
                end
            ensure
                pipe.close if pipe && !pipe.closed?

            end
        end
    end
end

# test - will close and print the text of an opened javascript dialog if
# run as "ruby js_dialog.rb"
if $0 == __FILE__
    action = ARGV.shift
 || "close"
    print JavascriptDialog.text || ""
    JavascriptDialog.send action
end
This topic is locked and can not be replied to.