首页 > Windows开发 > 详细

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

时间:2020-06-26 22:40:44      阅读:107      评论:0      收藏:0      [点我收藏+]

如果开发使用的不是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‘ 
  给窗体或者控件发送消息(赋值)
 
     技术分享图片

 

    以上面的窗口为例

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

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

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

   

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

    技术分享图片

  即: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版

原文:https://www.cnblogs.com/it11/p/13196630.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!