• selenium2用AutoIt上传文件


    1.标签是input,如下图所示:

    WebElement e1= driver.findElement(By.id("load"));
    //输入要上传文件的地址
    e1.sendKeys("D:\Work\eclipse_workspace\seleniumdemo\res\被上传的文件.txt");

    2.使用autoit脚本上传方式

    有的上传控件不是input元素,这个时候利用sendkeys方法是行不通的。此时可以通过autoit来帮助我们实现上传功能,先了解下什么是autoit。它是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows GUI(图形用户界面)中进行自动化操作。它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务。而这是其它语言不可能做到或无可靠方法实现的

    我们主要利用autoit来实现对上传文件弹窗的定位,然后对弹窗中地址框赋值(文件路径),然后点击确定按钮进行上传文件,如下图:

    具体思路知道该怎么做了,下面通过autoit脚本来实现。
    首先你需要安装autoit(官网:https://www.autoitscript.com/site/),直接默认安装即可。
    接下来需要通过AutoIt Window Info (x86)或者AutoIt Window Info (x64)(这个是你刚才安装的autoit自带的应用程序,你可以在开始菜单中找到,如果开始菜单中没有请到安装目录下查找),先打开AutoIt Window Info ,如图:

    打开其中对应你windows的程序,界面如下:

    这个工具是定位windows gui(windows界面)元素用的。接下来会对上传弹出框进行定位。

    那百度的个人头像上传功能,点击选择图片:

    之后,会弹出:

    然后找切换到刚才打开的AutoIt Window Info 工具,找到Finder Tool:然后用鼠标拖动此图标到文件上传弹窗的 文件名输入框:

    记录下文件名输入框的classname值。然后用上面的方法在获取下“打开”按钮的calssname,如图:

    记录好“打开”按钮的calssname。接下来根据定位值来编写autoit脚本。

    打开安装目录下的:SciTE Script Editor应用程序:

    输入下面的代码:

    ;first make sure the number of arguments passed into the scripts is more than 1
    If $CmdLine[0]<2 Then Exit EndIf ;if parmas num <2 ,then break
    ;$CmdLine[0] ;参数的数量
    ;$CmdLine[1] ;第一个参数 (脚本名称后面)
    ;$CmdLine[2] ;第二个参数
    ;都是从cmd传入参数
     handleUpload($CmdLine[1],$CmdLine[2])
    
    ;定义上传函数,有两个参数,第一个是浏览器名字,第二参数是文件路径
     Func handleUpload($browser, $uploadfile)
         Dim $title                          ;定义一个title变量
                ;根据弹窗的title来判断是什么浏览器
                If $browser="ie" Then                          ; 代表IE浏览器
                      $title="选择要加载的文件"
                ElseIf $browser="chrome" Then               ; 代表谷歌浏览器
                     $title="打开"
                ElseIf    $browser="firefox" Then             ; 代表火狐浏览器
                      $title="文件上传"
                EndIf
    
                if WinWait($title,"",4) Then ;等待弹出出现,最大等待时间是4秒
                       WinActivate($title)                  ;找到弹出窗口之后,激活当前窗口
                       ControlSetText($title,"","Edit1",$uploadfile)   ;把文件路径放入输入框,此”Edit1“是用FinderTool获取到的
                       ControlClick($title,"","Button1")                ;点击保存或者打开或者上传按钮,此“Button1”使用FinderTool获取到的
                Else
                Return False
                EndIf
     EndFunc

    需要强调的是,autoit是根据弹窗的名字来给文件名输入框赋值和点击按钮等操作的,由于不同的浏览器弹窗的名字可能不一样,这里要谨慎选择。

    autoit的脚本到此写完了,但是由于我们是在cmd中调用,需要将其转换成exe可执行文件。

    打开autoit安装目录下的应用程序:Compile Script to .exe (x86)或者Compile Script to .exe (x64),

    然后按照图中操作:

    点击Conver按钮,则成功讲upload.au3脚本转换为运行文件upload.exe,如下图:

    接下来测试下效果,打开cmd,输入:"C:UsersJingDocumentsupload.exe" "firefox" "C:UsersPublicPicturespic.jpg"  双引号不要省略,如图:

    之后回到网页,查看刚才的头像已被上传:

    这里需要强调下脚本在cmd的试用,第一个参数的是autoit exe脚本文件,第二是 autoit脚本函数需要的参数,回头看看脚本,一个参数是浏览器名字:chrome或者ie或者firefox,第二个参数是要上传文件的路径,并且都要用英文环境下的双引号括起来,就形成了下面的代码:
    "C:UsersJingDocumentsupload.exe" "firefox" "C:UsersPublicPicturespic.jpg"

    如何在Selenium中调用此脚本呢?你可以封装成一个执行这个exe文件的方法:

    /**
    * 上传文件,需要点击弹出上传照片的窗口才行
    *
    * @parambrower
    *            使用的浏览器名称
    * @paramfile
    *            需要上传的文件及文件名
    */
    publicvoidhandleUpload(String browser, File file) {
        String filePath= file.getAbsolutePath();
        String executeFile= "res/script/autoit/Upload.exe"; //定义了upload.exe文件的路径
        String cmd= """+ executeFile+ """+ " "+ """+ browser+ """+ " "+ """+ filePath+ """;
        try{
            Process p= Runtime.getRuntime().exec(cmd);
            p.waitFor();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    然后在需要有上传文件的用例中调用,具体步骤是:

    先去用selenium点击上传文件按钮,之后会弹出上传文件输入框,最后执行上面那个public void handleUpload(String browser, File file)方法即可。

  • 相关阅读:
    UIKit, AppKit, 以及其他API在多线程当中的使用注意事项
    BOZJ-2590 优惠券
    P3620 [APIO/CTSC 2007] 数据备份
    矩阵乘法与快速幂
    CodeForces
    AtCoder
    CodeForces
    考试成绩和学号的(结构体)排序
    CodeForces
    Atcoder Beginner Contest 092 —— C题
  • 原文地址:https://www.cnblogs.com/yajing-zh/p/5076881.html
Copyright © 2020-2023  润新知