zoukankan      html  css  js  c++  java
  • Selenium2(java)selenium常用API 五

    上传文件

    元素标签是input时上传方式

    上传是一个input,对于这种元素是input

    的标签可以采用元素的sendKeys()方法来直接赋值,upload.html代码:

    <html>
        <head></head>
        <body>
            <input type="file" id="fileControl" value="选择文件">
        </body>
        <style type="text/css" id="1"></style>
    </html>

    具体代码:

    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;
    public class Upload1 {
    public static void main(String[] args) {
        WebDriver driver = new FirefoxDriver();
        //打开上传的网页 - get中输入upload的地址
         driver.get("D:\Work\eclipse_workspace\seleniumdemo\res\upload.html");
        WebElement e1 = driver.findElement(By.id("fileControl"));
        //输入要上传文件的地址
        e1.sendKeys("D:\Work\eclipse_workspace\seleniumdemo\res\被上传的文件.txt");
        try {
            //等待2秒观察显示
            Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
                }
                driver.quit();
            }
    }

    使用autoit脚本上传方式

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

    autoit安装包地址链接: http://pan.baidu.com/s/1dDL5Qhz 密码: yew5

    二进制文件安装即可,打开autoit,主界面如下:

    clipboard

    具体使用:

    拖动Finder Tool到要定位到的弹窗上

    clipboard[1]

    获取到文件名输入框的classname

    clipboard[2]

    获取到打开按钮的classname

    根据获取到的值编写autoit的脚本:

    ;fisrt make sure the number of arguments passed into the script is more than 1
    If $CmdLine[0]<2 Then Exit ElseIf; 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;代表chrome浏览器
       $title="选择要加载的文件"
       ElseIf $browser = "chrome" Then;
       $title="打开"
       ElseIf $browser="firefox" Then
       $title="文件上传"
       EndIf
    
       If WinWait($title,"",4) Then;等待弹窗出现,最大等待时间是4s
       WinActivate($title);找到弹窗之后,激活当前窗口
       ControlSetText($title,"","Edit",$uploadfie);把文件路径放入输入框
       ControlClick($title,"","Button");点击保存或者打开或者上传按钮
       Else
       Return False
       EndIf
    EndFunc

    文件保存为upload.au3,将文件转换成exe可执行文件

    安装目录下的C:Program Files (x86)AutoIt3Aut2ExeAut2exe_x64.exe

    clipboard[8]

    生成文件upload.exe

    打开cmd,输入:"C:UsersAdministratorDesktopupload.exe" "firefox" "C:UsersAdministratorDesktopimage.jpg"  双引号不要省略

    在selenium中调用脚本,封装成一个执行这个exe文件的方法:

    /**
        *上传文件,需要点击弹出上传的窗口
        *
        *@param browser
        *使用的浏览器名称
        *@param file
        *需要上传的文件及文件名
    */
    public void handleupload(String browser, File file) {
        String filepath = file.getAbsolutePath();
        String executeFile = "C:UsersAdministratorDesktopupload.exe";//定义了upload.exe文件的路径
        String cmd = """ + executeFile + """ + " " + """ + browsser + """ + " " + """ + filePath + """;
        try {
        Process p = Runtime.getRuntime().exec(cmd);
        p.waitFor();    
        } catch(Exception e) {
                e.printStackTrace();
            }
    }

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

  • 相关阅读:
    github常用项目汇总
    javaweb Servlet接收Android请求,并返回json数据
    Hibernate 工具类
    JDBC 工具类
    050 Android 百度地图的使用
    Hibernate 连接数据库,数据库返回数据超过限制报错
    049 Android Fragment向另一个Activity传值
    java 实用Util汇总
    关于The requested PHP extension ext-pdo_sqlite * is missing from your system. Install or enable PHP's pdo_sqlite extension.的解决
    Symfony命令大全
  • 原文地址:https://www.cnblogs.com/sundalian/p/5164576.html
Copyright © 2011-2022 走看看