selenium+java文件上传

1.Input元素

直接使用sendKeys()方法

driver.findElement(By.id("attachment")).sendKeys("D:\\test.txt"); 

2. 非input元素处理方法,借助AutoIT3工具

下载工具并安装,下载地址:https://www.autoitscript.com/

安装步骤省略。

步骤如下:

(1)首先打开被测系统要上传文件的页面。

(2)之后打开安装的AutoIT3文件夹下的AutoIT3_x64.exe。 

 

(3)鼠标选中AutoIt Window Info窗口内的Finder Tool,长按到靶子浮现之后拖动到本地文档窗口“文件名”输入框内,获取文本框的信息。之后重复此动作,获取上传按钮的信息。

 

(4)获取文本框和上传按钮的元素信息后,打开SciTE Script Editor,将以下代码复制粘贴到文本区域。这段代码的用意是首先判断所传参数是否大于1个,之后调用handleUpload函数,函数是先判断进行文件上传的是什么浏览器,之后,根据上一步所采集到的文本框及上传按钮元素属性,实现文件路径的打开“上传”按钮的点击,也就是上传功能的实现。保存生成后缀为.au3的文件。

 

(5)   

 

脚本示例如下:

If $CmdLine[0]<2 Then Exit EndIf
 handleUpload($CmdLine[1],$CmdLine[2])

Func handleUpload($browser,$uploadfile)
  Dim $title
    If $browser="ie" Then
      $title="选择要加载的文件"
    ElseIf $browser="chrome" Then
      $title="打开"
    ElseIf $browser="firefox" Then
      $title="文件上传"
    EndIf

    If WinWait($title,"",6) Then
      WinActivate($title)
      ;ControlFocus(("title","text",controllD)用于识别windows文件上传窗口
      ControlFocus($title,"","")
      ControlSetText($title,"","Edit1",$uploadfile)
      ControlClick($title,"","Button1")
    Else
      Return False
    EndIf
EndFunc

(5)   之后打开AutoIT3下的Compile Script To .exe,将生成的.au3文件变异为.exe的可执行文件。

(6)lang包下的Runtime类实现cmd命令的效果,来使用我们生成的文件。

//上传附件 -定义上传函数,第一个参数browser是浏览器的名字,第二个参数filePath是文件路径-推荐使用
public static void upload(String browser,String filePath) {
  //定义了autoit.ext文件的路径
  System.out.println("====" + filePath);
  String executeFile=System.getProperty("user.dir")+"\\uploadfile\\autoit.exe";
  String cmd = "\""+ executeFile+ "\""+ " "+ "\""+ browser+ "\""+ " "+ "\""+ filePath+ "\"";
  System.out.println("cmd="+cmd);
  try{
    Process process= Runtime.getRuntime().exec(cmd);
    process.waitFor();
  } catch(Exception e) {
    e.printStackTrace();
  }
}

 

posted @ 2019-12-11 11:31  修乐  阅读(1168)  评论(0编辑  收藏  举报