selenium解决一些window弹出窗口

2011-11-17  王少平 

1.上传文件
selenium在firefox上传文件时,可以直接将要上传文件的路径type到文件框,但ie上传文件就比较麻烦。
这里介绍一下ruby+selenium的解决办法。
我们知道ie下会弹出选择文件窗口,这个窗口是window的控件,selenium对于这种元素基本没有办法,所以这里我们引入autoIt来帮助选择和操作窗口。
autoIt如果没有安装,可以去下载一个autoItX3.dll文件到本地进行注册,就可以调用了。

方法一:

def upload(locator,value)
    thrd = Thread.new do
        system("rubyw -e \"require 'win32ole';sleep 1; @autoit=WIN32OLE.new('AutoItX3.Control'); waitresult=@autoit.WinWait '选择文件', '', 15; sleep 1; if waitresult == 1\" -e \"@autoit.ControlSetText '选择文件', '', 'Edit1', '#{value}'; @autoit.ControlSend '选择文件', '', 'Button2', '{ENTER}';\" -e \"end\"")
    end
    remote_control_command("click", [locator,])
    thrd.join(1)
End

方法二:

POPUP_TITLES = ["选择文件", "Choose file", "Choose File to Upload"]

def upload(locator,value)

       if @browser_string=="*iexplore"

              begin

                     thr=Thread.new do

                            sleep 1

 

                            system(%Q{rubyw -e '

                                   require "win32ole"

 

                                   @autoit=WIN32OLE.new("AutoItX3.Control")

                                   time=Time.now

 

                                   while(Time.now - time)<15 do

                                          #{POPUP_TITLES.inspect}.each do |popup_title|

                                                 next unless @autoit.WinWait popup_title, "", 1

 

                                                 @autoit.ControlSetText "选择文件", "", "Edit1", #{value.inspect}

                                                 @autoit.ControlSend "选择文件", "", "Button2", "{ENTER}"

                                          end

                                   end

                                   '}

                            )

                     end

                     thr.join(1)

              rescue => e

                     puts "function upload: #{e}"

              end

 

              remote_control_command("click", [locator])

       else

              self.type(locator, value)

       end

end


2.https的安全窗口

POPUP_SECURITY_TITLES = ['安全警报']

def open_https(url)

       begin

              if url=~/^https:/i

                     thr=Thread.new do

                            system(%Q{rubyw -e "

                                   require 'win32ole'

                                   sleep 0.5

                                   @autoit=WIN32OLE.new('AutoItX3.Control')

                                   time = Time.now

                                  

                                   while(Time.now-time)<15

                                          #{POPUP_SECURITY_TITLES.inspect}.each do |popup_title|

                                                 next unless @autoit.WinWait(popup_title, "", 1) == 1

                                                

                                                 @autoit.Controlfocus popup_title, '', 'Button1'

                                                 @autoit.ControlSend popup_title, '', 'Button1', '{SPACE}'

                                          end

                                   end

                                   }

                            )

                     end

                     thr.join(1)

              end

       rescue => e

              puts "function open: #{e}"

       end

      

       remote_control_command("open", [url,])

end


希望能给你带来帮助。

1640°/16392 人阅读/1 条评论 发表评论

小窝  2011-12-13

已同步至官方微博


登录 后发表评论