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

    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM