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