selenium 文件上傳

 

selenium webdriver沒有提供直接的文件上傳功能,可是在使用的web項目中經常須要對文件進行上傳。在通常的上傳中,是須要點擊上傳按鈕,打開本地的window窗口,可是selenium 是沒法直接操做window系統自帶的相關控件。html

如下提供兩種關於文件上傳的方法。java

普通上傳:普通的附件上傳是將本地文件的路徑做爲一個值放在input 標籤中,經過form 表單將這個值提交給服務器。能夠經過sendKeys("文件路徑")直接上傳。web

插件上傳:通常是指基於Flash、JavaScript 或Ajax 等技術所實現的上傳功能。chrome

 

演示HTML代碼片斷windows

<!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()。app

插件上傳,能夠使用AutoIt 實現上傳 編寫腳本 來實現。AutoIt  的安裝以及使用須要參考AutoIt 使用手冊等相關文檔。selenium 經過AutoIt 來操做window窗口的操做實質是經過java代碼來調用AutoIt 生成的腳本.exe文件。編輯器

經過Java調用的exe 程序並不在Java 的可控範圍內。換句話說,exe 執行多長時間,執行是否出錯,Java 程序都沒法得知。post

如下是在AutoIt  編輯器中編輯的操做文件上傳窗口的代碼。ui

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();

    }
相關文章
相關標籤/搜索