自动化测试 - 文件上传之Win32API - Ruby版

如果开发使用的不是input ( type = file), 那么需要使用Win32API来操作。

首先引用Win32API

  require "Win32API"
 
然后
  include Win32
 
  FindWindow = Win32API.new ‘user32.dll‘, ‘FindWindow‘, %w(P P), ‘L‘
  New查找窗口的Function - FindWindow 
  --Win32API.new:使用Ruby自带的Win32API库来初始化Windows的Win32API
  ----参数一:‘user32.dll‘ - FindWindow定义在操作系统的动态链接库user32.dll中
  ----参数二:‘FindWindow‘ - 我们需要使用的Win32API,这里的FindWindow的作用是查找Windows的弹出窗口,返回窗口的句柄。句柄可以理解为指针的指针。
  ----参数三:%w(L P) - 传递给FindWindow的参数列表,%w(L P)表示用两个参数,第一个参数类型为L,即int类型;第一个参数类型为P,即string类型。
  ----参数四:‘L‘ - 返回值类型
 
  FindWindowEx = Win32API.new ‘user32.dll‘, ‘FindWindowEx‘, %w(L L P P), ‘L‘
  查找FindWindow返回的窗体中的子窗体或子控件
  ----参数三:%w(L L P P)
 
  SendMessage = Win32API.new ‘user32.dll‘, ‘SendMessage‘, %w(L L L P), ‘L‘ 
  给窗体或者控件发送消息(赋值)
 
     自动化测试 - 文件上传之Win32API - Ruby版

 

    以上面的窗口为例

        首先使用FindWindow查找弹出的上传文件的对话窗口,返回对话框的句柄

   hParent = FindWindow.call(0,"Open") 

   第一个参数是窗口的ClassName,第二个参数是窗口的Name。这里我们只需要给任何一个参数赋值就行,如上面的(0,"Open"),Open是窗口的名称。

   

        然后使用FindWindowEx定位对话框中的文件名输入框。输入框和下拉框,对话框的层级(父子)关系如下:                

    自动化测试 - 文件上传之Win32API - Ruby版

  即:Dialog  --> ComboBoxEx32 --> ComboBox --> Edit, 可知输入框是嵌套在下拉框中。所以我们需要一级一级定位:   

        hCombo = FindWindowEx.call(hParent, 0, "ComboBoxEx32", "") 
        hCombo_child = FindWindowEx.call(hCombo, 0, "ComboBox", "") 
        hEdit = FindWindowEx.call(hCombo_child, 0, "Edit", "")  
        FindWindowEx的第一个参数是Parent Control的句柄,第三个参数是我们要找的Child Control的类型。
 
        到这里我们已经定位到了File Name的输入框,接下来我们给他赋值
        wm_settext = 0x000c 
        SendMessage.call(hEdit, wm_settext, 0, "C:\test.pdf")  
 
        最后,找到Open按钮并Click
        bm_click = 0x00f5 
        open_button  = FindWindowEx.call(hParent, 0, "Button", "&Open")  
        SendMessage.call(open_button, bm_click, 0, "")  
 
        完成!  

自动化测试 - 文件上传之Win32API - Ruby版

上一篇:Oracle DG 逻辑备库故障--MAX Processes


下一篇:SQL编写自定义函数