selenium 文件上传

 

selenium webdriver没有提供直接的文件上传功能,但是在使用的web项目中常常需要对文件进行上传。在一般的上传中,是需要点击上传按钮,打开本地的window窗口,但是selenium 是无法直接操作window系统自带的相关控件。

以下提供两种关于文件上传的方法。

普通上传:普通的附件上传是将本地文件的路径作为一个值放在input 标签中,通过form 表单将这个值提交给服务器。可以通过sendKeys("文件路径")直接上传。

插件上传:一般是指基于Flash、JavaScript 或Ajax 等技术所实现的上传功能。

 

演示HTML代码片段

<!DOCTYPE html>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件上传实例 - 菜鸟教程</title>
</head>
<body>
    <h1>文件上传实例 - 菜鸟教程</h1>
    <form method="post" action="/TomcatTest/UploadServlet"
        enctype="multipart/form-data">
        选择一个文件: <input type="file" name="uploadFile" /> <br />
        <br /> <input type="submit" value="上传" />
    </form>
</body>
</html>

以下是普通上传java代码片段。

public class FileUpload {
    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "D:/chromedriver_win32/chromedriver.exe");
        ChromeOptions Options = new ChromeOptions();
        Options.addArguments("user-data-dir=C:\\Users\\happy\\AppData\\Local\\Google\\Chrome\\User Data");
        WebDriver driver = new ChromeDriver(Options);
        driver.manage().window().maximize();
        File file = new File("C:\\Users\\happy\\Desktop\\FileUpload.html");
        // 用java来实现文件读取功 \
        driver.get(file.getAbsolutePath());
        driver.findElement(By.name("uploadFile")).sendKeys("C:\\Users\\happy\\Desktop\\FileUpload.html");
        // 获取文件上传文半框位置,传入文件上传地址。
        driver.close();
        driver.quit();

    }

}

通过这种方法上传,就避免了操作Windows 控件的步骤。如果能找到上传的input 标签,那么基本上就可以通过sendKeys()。

插件上传,可以使用AutoIt 实现上传 编写脚本 来实现。AutoIt  的安装以及使用需要参考AutoIt 使用手册等相关文档。selenium 通过AutoIt 来操作window窗口的操作实质是通过java代码来调用AutoIt 生成的脚本.exe文件。

通过Java调用的exe 程序并不在Java 的可控范围内。换句话说,exe 执行多长时间,执行是否出错,Java 程序都无法得知。

以下是在AutoIt  编辑器中编辑的操作文件上传窗口的代码。

ControlFocus("打开","","Edit1")
;识别windows窗口
WinWait("[CLASS:#32770]","",10)
;窗口等待十秒
ControlSetText("打开", "", "Edit1", "C:\Users\happy\Desktop\FileUpload.html")
;想输入框中输入需要上传的地址
 Sleep(2000)
ControlClick("打开", "","Button1");
;点击[打开】按钮

以下是java代码

    public static void main(String[] args) throws InterruptedException {
        System.setProperty("webdriver.chrome.driver", "D:/chromedriver_win32/chromedriver.exe");
        ChromeOptions Options = new ChromeOptions();
        Options.addArguments("user-data-dir=C:\\Users\\happy\\AppData\\Local\\Google\\Chrome\\User Data");
        WebDriver driver = new ChromeDriver(Options);
        driver.manage().window().maximize();
        File file = new File("C:\\Users\\happy\\Desktop\\FileUpload.html");
        // 用java来实现文件读取功 \
        driver.get(file.getAbsolutePath());
        driver.findElement(By.name("uploadFile")).click();
        // 点击选择文件按钮
        Thread.sleep(3000);
        // 设置等待3秒
        Runtime exe = Runtime.getRuntime();
        // Java 的Runtime 模块的getruntime.exec()方法可以调用exe 程序并执行。
        try {
            String str = "E://upload.exe";
            exe.exec(str);
            // 运行指定位置的.exe文件
        } catch (IOException e) {
            System.out.println("Error to run the exe");
            e.printStackTrace();
        }
        driver.close();
        driver.quit();

    }

 

posted @ 2017-06-06 15:38  小白测试  阅读(12451)  评论(0编辑  收藏  举报