Hi, Tony,
Thank you so much, I tried your code, it works perfect! It is amazing!


Thanks.
Wesley Chen.


On Wed, Aug 26, 2009 at 4:49 PM, Tony <ynot...@gmail.com> wrote:

>
> Hi Wesley,
>
> iewin.clickprompt() will click the button in the popup and return the
> popup text.
>
> This is the definition - def clickprompt(but="OK",txt ="", waitTime =
> 10)
> iewin.clickprompt("CANCEL")  # will click cancel button.. actually if
> you pass in anything other than OK, cancel will be clicked.
> iewin.clickprompt("OK") or iewin.clickprompt() will click the ok
> button.
> iewin.clickprompt("OK", "input text")  #can be used to pass in values
> into the prompt box.
>
> iewin.clickprompt("OK", "", 20) #can increase the wait time for the
> popup to occur. time = 20*0.2
> will return '' if there is no popup.
>
> Code is present here - http://pastie.org/595060
> Pasting it here also -
> ################################################
>    def clickprompt(but="OK",txt ="", waitTime = 10)
>      tim = 0
>      poptxt= ''
>      while tim < waitTime
>        sleep 0.2
>        pophwnd = Win32API.new("user32", "GetWindow", 'Li', 'L').Call
> (@ie.hwnd.to_i, 6)
>        # the above returns any popup  windows that are present for
> the specific window
>        tim += 0.2
>        tim += waitTime if pophwnd != 0
>      end
>      return '' if pophwnd == 0
>      button = but.upcase
>      outval = ' ' * 30
>      Win32API.new("user32", "GetWindowText", 'Lpi', 'L').Call
> (pophwnd,outval,30)
>      popwndtitle = outval.rstrip.chomp("\000") # window title stored
> here
>      outval = nil
>      #poptype = 0
>      #alert and confirm have ie6 - Microsoft Internet Explorer
>      #ie7 - Windows Internet Explorer
>      #ie8 - Message from  webpage
>      if popwndtitle.include?("Microsoft Internet Explorer") ||
>        popwndtitle.include?("Windows Internet Explorer") ||
>        popwndtitle.include?("Message from webpage")
>        #confirm and alerts have the above 3 window titles
>        # poptype =1 means this is a javascript alert tag
>        #poptype = 1
>        poptxt = handlepopup1(pophwnd,button)
>      elsif popwndtitle.include?("Explorer User Prompt")
>        #prompts have the above window title
>        #poptype = 2
>        poptxt = handlepopup2(pophwnd,button, txt)
>      elsif popwndtitle.include?("Connect to")
>        #authentication dialog
>        #also make sure the username and password text fields are
> present - if present we got the auth dialog
>        cntrlhwnd = 0
>        cntrlhwnd = Win32API.new("user32", "GetDlgItem", 'Li',
> 'L').Call(pophwnd, 1002)
>        #poptype = 3 if cntrlhwnd != 0 #verified the 2 textboxes are
> present to enter the values
>        return '' if cntrlhwnd  == 0
>        poptxt = handlepopup3(pophwnd,button, prompt)
>      end
>      return poptxt
>    end
>
>  def handlepopup1(pophwnd, button)
>    # handles the alerts and confirm dialogs
>    #Yes there is a popupwindow... hence get the controlhandle for the
> text control - 65535
>    cntrlhwnd = Win32API.new("user32", "GetDlgItem", 'Li', 'L').Call
> (pophwnd, 65535)
>    #now get the text from the popup
>    outval = ' ' * 900
>    Win32API.new("user32", "GetWindowText", 'Lpi', 'L').Call
> (cntrlhwnd,outval, 900)
>    poptext = outval.rstrip.chomp("\000")
>    outval = nil
>
>    #confirm ok-1 and cancel-2, alert ok-2
>    cntrlhwndOK = 0
>    cntrlhwndCANCEL = 0
>    cntrlhwndOK = Win32API.new("user32", "GetDlgItem", 'Li', 'L').Call
> (pophwnd, 1)
>    if cntrlhwndOK == 0 # only 1 button alert
>      cntrlhwndOK = Win32API.new("user32", "GetDlgItem", 'Li',
> 'L').Call(pophwnd, 2)
>      clickWin32Button(cntrlhwndOK) # done clicking javascript ok
> button
>      return poptext
>    else # this is a confirm with 2 buttons
>      cntrlhwndCANCEL = Win32API.new("user32", "GetDlgItem", 'Li',
> 'L').Call(pophwnd, 2)
>    end
>    button.include?("OK") ? clickWin32Button(cntrlhwndOK) :
> clickWin32Button(cntrlhwndCANCEL)
>    #clickWin32Button(cntrlhwndCANCEL)
>    return poptext
>  end
>  private :handlepopup1
>
>  def handlepopup2(pophwnd, button, prompt)
>    #handles prompt boxes which takes a value as input
>    cntrlhwndOK = Win32API.new("user32", "GetDlgItem", 'Li', 'L').Call
> (pophwnd, 1)
>    cntrlhwndCANCEL = Win32API.new("user32", "GetDlgItem", 'Li',
> 'L').Call(pophwnd, 2)
>
>    # get handle to the text control from the prompt box
>    cntrlpromptText = Win32API.new("user32", "GetDlgItem", 'Li',
> 'L').Call(pophwnd, 8132)
>    #now get the text from the popup
>    outval = ' ' * 200
>    Win32API.new("user32", "GetWindowText", 'Lpi', 'L').Call
> (cntrlpromptText,outval, 200)
>    poptext = outval.rstrip.chomp("\000")
>    outval = nil
>
>    cntrltextarea = Win32API.new("user32", "GetDlgItem", 'Li',
> 'L').Call(pophwnd, 8133)
>    if prompt.size != 0
>      sendmessage = Win32API.new("user32", "SendMessage", 'LLpp', 'L')
>      sendmessage.Call(cntrltextarea, 0x000C, '', prompt) # calling
> sendmessage with WM_SETTEXT
>    end
>    button.include?("OK") ? clickWin32Button(cntrlhwndOK) :
> clickWin32Button(cntrlhwndCANCEL)
>    return poptext
>  end
>  private :handlepopup2
>
>  def handlepopup3(pophwnd, button, prompt)
>    # handles the auth dialog box , 3 tries then the 401 page is shown
>    cntrlhwnd = Win32API.new("user32", "GetDlgItem", 'Li', 'L').Call
> (pophwnd, 1002)
>    cntrlusername = Win32API.new("user32", "GetDlgItem", 'Li',
> 'L').Call(cntrlhwnd, 1003)
>    cntrlpassword = Win32API.new("user32", "GetDlgItem", 'Li',
> 'L').Call(cntrlhwnd, 1005)
>    if prompt.size == 2
>      sendmessage = Win32API.new("user32", "SendMessage", 'LLpp', 'L')
>      sendmessage.Call(cntrlusername, 0x000C, '', prompt[0]) # calling
> sendmessage with WM_SETTEXT
>      sendmessage.Call(cntrlpassword, 0x000C, '', prompt[1]) # calling
> sendmessage with WM_SETTEXT
>    end
>    cntrlhwndOK = Win32API.new("user32", "GetDlgItem", 'Li', 'L').Call
> (pophwnd, 1)
>    cntrlhwndCANCEL = Win32API.new("user32", "GetDlgItem", 'Li',
> 'L').Call(pophwnd, 2)
>    button.include?("OK") ? clickWin32Button(cntrlhwndOK) :
> clickWin32Button(cntrlhwndCANCEL)
>
>  end
>  private :handlepopup3
>
>  def clickWin32Button(cntrlhwnd)
>    Win32API.new("user32", "SendMessage",'LLLL','L').Call(cntrlhwnd,
> 0x0006, 1,0)
>    Win32API.new("user32", "SendMessage",'LLLL','L').Call(cntrlhwnd,
> 0x00F5, 0,0)
>  end
>  private :clickWin32Button
>
> ###################################
>
> Thanks,
> Tony
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Watir General" group.
To post to this group, send email to watir-general@googlegroups.com
Before posting, please read the following guidelines: 
http://wiki.openqa.org/display/WTR/Support
To unsubscribe from this group, send email to 
watir-general-unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/watir-general
-~----------~----~----~----~------~----~------~--~---

Reply via email to