【java+selenium3】自动化处理文件上传 (十三)

一、文件上传

  文件上传是自动化中棘手的部分,目前selenium并没有提供上传的实现api,所以知道借助外力来完成,如AutoIt、sikuli。

  AutoIt , 这是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows GUI(图形用户界面)的自动化操作,利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务;

  AutoIt下载链接:https://www.autoitscript.com/site/autoit/downloads/ 或者点击下列图标进行下载!

  【java+selenium3】自动化处理文件上传 (十三)  【java+selenium3】自动化处理文件上传 (十三)  【java+selenium3】自动化处理文件上传 (十三) 【java+selenium3】自动化处理文件上传 (十三)

1.下载后双击进行安装:autoit-v3-setup.exe 

   安装完成如下展示:

  【java+selenium3】自动化处理文件上传 (十三)

2.上传脚本的编写

 (1) 打开AutoIt Windows Info 工具,鼠标移动到Finder Tool,按住鼠标左键拖动到需要识别的windows控件上;

【java+selenium3】自动化处理文件上传 (十三)

(2) 打开编辑器,根据控件Finder Tool识别到的信息来调用函数编写脚本;

【java+selenium3】自动化处理文件上传 (十三)

;ControlFocus(("title","text",controllD)用于识别windows文件上传窗口
ControlFocus("打开","","")
;向文件名输入框输入本地要上传文件的路径
ControlSetText("打开","","Edit1","C:UsersAdministratorDesktop	est图片aidu.png")
Sleep(2000)
;点击上传窗口中的“打开“按钮
ControlClick("打开","","Button1")

3.保存脚本文件为ChromFileUpload.au3格式

4.tools=>go,执行脚本验证(前提是windows窗口必须是打开状态)

   脚本执行结束后:【java+selenium3】自动化处理文件上传 (十三)

5.为了这个脚本能被java 程序调用,需要通过Compile Script to .exe (x64)工具生成exe文件

【java+selenium3】自动化处理文件上传 (十三)

提示Conversion complete转化完成:将ChromeFileUpload.exe拷贝到项目下

6.java代码执行exe文件

//实现文件上传。通过Runtime的静态方法获取Runtime对象
Runtime runtime = Runtime.getRuntime();
//通过Runtime对象调用exe方法
runtime.exec("src/test/resources/ChromeFileUpload.exe");

7.实现文件上传整体代码如下:

package cn.test;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class FileUpload {

    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "src/test/resources/chromedriver.exe");
        WebDriver driver =new ChromeDriver();
        try {
            driver.get("file:///C:/Users/Administrator/Desktop/test/file_up_load.html");
            driver.manage().window().maximize();
            driver.findElement(By.id("fileUpload")).click();
            Thread.sleep(3000);
            //实现文件上传。通过Runtime的静态方法获取Runtime对象
            Runtime runtime = Runtime.getRuntime();
            //通过Runtime对象调用exe方法
            runtime.exec("src/test/resources/ChromeFileUpload.exe");
            Thread.sleep(5000);
    }catch (Exception e) {
        e.printStackTrace();
    }finally {
        System.out.println("执行结束,关闭浏览器");
        driver.quit();
    }
    }
}

学习后总结,不足之处,后续修改,未完待续。。。