解决 Selenium文件上传框无法识别的问题

原创 2015年11月19日 14:06:17

其实很多人在使用selenium 做自动化的时候都会遇到这样子的一个问题,就是要进行文件的上传。对于简单一些的元素 如 这种可能可以通过直接的sendkey进行赋值,但是对于flash的这种 selenium就无能为力了。并且还得操作windows的文件上传框。这也是selenium的一个软肋

最近在测试web的时候每次执行测试用例都需要去上传各种格式的文件。这真的是苦了我了。所以抽空就去看看web自动化的相关内容,通过selenium来进行操作,结果就出现了以上的问题。

解决措施


  1. 网上给的最多的方法就是通过autoIt,确实这个工具的确挺强大的。我们可以简单的下载并使用下AutoIt

    这里写图片描述
    AutoIt Windows Info 用于帮助我们识Windows控件信息。

    Compile Script to.exe 用于将AutoIt生成 exe 执行文件。

    Run Script 用于执行AutoIt脚本。

    SciTE Script Editor 用于编写AutoIt脚本。

    首先打开AutoIt Windows Info 工具,鼠标点击Finder Tool,鼠标将变成一个小风扇形状的图标,按住鼠标左键拖动到需要识别的控件上。

    这里写图片描述

    通过AutoIt Windows Info工具我们就可以获取到相应的信息 如:
    窗口标题“打开”标题的Class为“#32770”。
    文件名输入框的class 为“Edit”,Instance为“1” ,所以ClassnameNN为“Edit1”。
    打开按钮的class 为“Button”,Instance为“1” ,所以ClassnameNN为“Button1”。

    再来我们打开SciTE Script Editor编辑器 编写脚本。脚本如下

    MouseClick("left",1050,450)
    WinWait("[CLASS:#32770]","",10)
    ControlFocus("打开", "","Edit1")
    ControlSetText("打开", "", "Edit1",  $CmdLine[1])
    ControlClick("打开", "","Button1");

    最后通过Complie script to exe 软件将我们写好的脚本转换成exe,进行调用就可以了。这就是使用AutoIt的主要方法。

  2. pywin32, pywin32中封装了很多windows api方法。所以我们就可以他来实现autoit的功能了。
    首先当然还是下载好对应的依赖库,pywin32

    代码:

    import win32api
    import win32gui
    import win32con
    
    #获取到标题为打开的窗口
    
    procHandle = win32gui.FindWindow(None,u"打开")
    win32gui.SetForegroundWindow(procHandle)
    
    #获取到类名为ComboBoxEx32的选择框
    
    edit = win32gui.FindWindowEx(procHandle,0,"ComboBoxEx32",None)
    win32api.SendMessage(edit, win32con.WM_SETTEXT, 0, "test")
    openBt = win32gui.FindWindowEx(procHandle,0,"Button",u'打开(&O)')
    
    #进行鼠标的点击
    
    win32api.PostMessage(openBt, win32con.WM_LBUTTONDOWN, 0, 0)
    win32api.PostMessage(openBt, win32con.WM_LBUTTONUP, 0, 0)

    以上就是一个简单的测试例子。

总结


以上两种方法亲测都是可行的,但是还是更加推荐使用第二种方法,毕竟去调用第三方的软件,或多或少会出现一些想不到的事情。

文章参考


selenium借助AutoIt识别上传(下载)详解

版权声明:本文为博主原创文章,未经博主允许不得转载。

Python selenium —— 文件下载,不弹出窗口,直接下载到指定路径

今天谈谈文件下载吧,很多人不会处理弹出的文件下载框,其实跟上传类似,可以用autoit和win32api解决,方法类似,可以看博主之前的文章Python selenium —— 文件上传所有方法整理总...
  • huilan_same
  • huilan_same
  • 2016年10月11日 17:24
  • 10219

selenium之 文件上传所有方法整理总结

文件上传是所有UI自动化测试都要面对的一个头疼问题,今天博主在这里给大家分享下自己处理文件上传的经验,希望能够帮助到广大被文件上传坑住的seleniumer。首先,我们要区分出上传按钮的种类,大体上可...
  • huilan_same
  • huilan_same
  • 2016年09月05日 13:43
  • 14925

[Selenium]文件上传时点击上传链接,找不到元素

scenario: 上传功能: 鼠标点击“ 添加附件”,弹出上传对话框。 当鼠标放置“添加附件上”,chrome指向“”,而真正作用元素是“”   这种情况下需要使用action.move...
  • yanglyangl429
  • yanglyangl429
  • 2016年07月05日 15:22
  • 771

利用Selenium实现文件上传的AutoIt介绍

在实现UI自动化测试过程中,有一类需求是实现图片上传,这种需求根据开发的实现方式,UI的实现方式也会不同。 一、直接利用Selenium实现      这种方式是最简单的一种实现方式,但是依赖...
  • wuyepiaoxue789
  • wuyepiaoxue789
  • 2017年02月09日 11:58
  • 233

【基础6】selenium实现文件上传

元素标签是input时的上传方式当上传的标签使用的是input,type=“file”时,直接使用selenium的api就可以处理上传操作(使用元素对象的sendKeys()方法) 下面是需要操作...
  • HTdeyanlei
  • HTdeyanlei
  • 2016年10月16日 21:23
  • 3571

Python Selenium Web自动化上传/下载文件图文详解

原文地址:http://www.cnblogs.com/2niu/p/6134865.html 情景:       在用selenium进行web页面自动化时,时不时会遇到上传附件的情况,...
  • er2niu
  • er2niu
  • 2016年12月09日 12:04
  • 1940

selenium_webdriver(python)文件上传操作

asd.html: upload_file
  • u013372487
  • u013372487
  • 2015年05月18日 14:48
  • 1566

解决 Selenium文件上传框无法识别的问题

其实很多人在使用selenium 做自动化的时候都会遇到这样子的一个问题,就是要进行文件的上传。对于简单一些的元素 如 这种可能可以通过直接的sendkey进行赋值,但是对于flash的这种 sele...
  • qq744746842
  • qq744746842
  • 2015年11月19日 14:06
  • 1676

selenium+python上传文件操作

上传过程一般要打开一个本地窗口,从窗口选择本地文件添加。selenium webdriver只要定位上传按钮,通过send_keys添加本地文件路径就可以了,绝对路径和相对路径都可以 1、操作文件上...
  • weixin_39365168
  • weixin_39365168
  • 2018年01月08日 15:35
  • 54

selenium弹出框、页面跳转处理

//得到当前窗口的句柄 String currentWindow = wd.getWindowHandle(); System.out.print(currentWindo...
  • chenxn001
  • chenxn001
  • 2015年01月14日 14:57
  • 477
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解决 Selenium文件上传框无法识别的问题
举报原因:
原因补充:

(最多只允许输入30个字)