zoukankan      html  css  js  c++  java
  • web自动化搞定文件上传

    背景

    在做web自动化时,我们经常会碰到一些场景需要进行文件上传,而文件上传打开的窗口属于windows空格,通过Selenium是操作不了的,此篇文章给大家介绍几种实现方法

    方法一:sendKeys

    前提条件:
    文件上传元素是input标签,并且type为file才可以使用此种方法

    以我在本地的fileupload.html文件为例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>文件上传示例</title>
    </head>
    <body>
    	<input type="file" id="fu" value="选择文件">
    </body>
    </html>
    

    测试代码如下:

    ChromeDriver driver = new ChromeDriver();
    driver.get("D:\fileupload.html");
    Thread.sleep(2000);
    driver.findElement(By.id("fu")).sendKeys("D:\java_auto\test.png");
    

    此方法的核心在于元素是input类型,可以借由sendKeys方法去输入上传文件的路径即可

    方法二:AutoIT

    针对不是input类型的元素,我们可以使用第三方的自动化工具,比如:Auto,对windows控件元素进行操作

    以下是其官网介绍:

    AutoIt v3 is a freeware BASIC-like scripting language designed for automating the Windows GUI and general scripting. It uses a combination of simulated keystrokes, mouse movement and window/control manipulation in order to automate tasks in a way not possible or reliable with other languages (e.g. VBScript and SendKeys).

    翻译过来就是:

    AutoIT是类似于Basic脚本语言的免费软件,利用它我们可以实现对windows的GUI界面进行自动化操作,balabala...

    官网地址:https://www.autoitscript.com/site/autoit/

    强烈建议先去看官方文档:https://www.autoitscript.com/autoit3/docs/,对工具的使用和脚本编写语法描述的非常详细

    step1:下载安装

    下载页面在这里:https://www.autoitscript.com/site/autoit/downloads/

    点击下载即可,下载完无脑下一步直到安装完毕

    安装完毕会有如下几个应用:

    其中我们用得到的有:

    • AutoIT Window Info 识别Windows元素信息
    • Complie Script to .exe 将AutoIT编写的脚本编译成exe可执行文件
    • Run Script 运行AutoIT脚本
    • SciTE Script Editor 编写AutoIT脚本

    注意:官方推荐使用X86版本,这样兼容性问题会少些

    step2:使用AutoIT

    1、将上传的Windows窗口打开
    2、打开AutoIT Window Info 工具,Finder Tool下的图标一直按住,选择窗口中要识别的元素(文件名后面的输入框以及打开按钮),分别记录下此时的Tile、Class等信息

    3、打开SciTE Script Editor,开始进行脚本编写(注意元素的定位是由Class和Instance进行拼接的,如Class为Edit,Instance为1,那么定位表达式为Edit1)

    ;等待“打开”窗口
    WinWaitActive("打开")
    ;休眠2秒
    Sleep(2000)
    ;在输入框中写入上传文件的路径
    ControlSetText("打开", "", "Edit1", "d:java_auto	est.png")
    ;休眠2秒
    Sleep(2000)
    ;点击打开按钮
    ControlClick("打开", "","Button1");
    

    4、选择工具栏上面的 Tools-Go 先去运行下脚本,试运行OK之后将脚本保存,后缀为au3
    5、选择Complie Script to .exe工具把脚本编译为exe文件
    6、Java代码本地执行exe文件

    ChromeDriver driver = new ChromeDriver();
    driver.get("D:\fileupload.html");
    Thread.sleep(2000);
    driver.findElement(By.id("fu")).click();
    //Java运行时对象
    Runtime runtime = Runtime.getRuntime();
    try {
        //执行
        runtime.exec("D:\upload.exe");
    }catch (IOException e){
        e.printStackTrace();
    }
    

    来看看运行效果

  • 相关阅读:
    python之函数名,闭包、迭代器
    python-函数进阶-动态传参,名称空间,作用域的问题
    python之初识函数
    python之文件处理
    重新执笔,已是大三!Jekyll自定义主题开发
    HDU -2674 N!Again(小技巧)
    HDU -2546饭卡(01背包+贪心)
    NYOJ 1091 超大01背包(折半枚举)
    HDU 5144 NPY and shot(三分法)
    printf用法之打印2进制,八进制,十进制,十六进制
  • 原文地址:https://www.cnblogs.com/yyoba/p/12901033.html
Copyright © 2011-2022 走看看