Selenium Webdriver上傳文件,別傻傻的分不清得3種方法
Selenium上傳文件
在Selenium中處理文件上傳可以簡化人工工作,并只需使用發(fā)送鍵()方法即可完成。上載文件后顯示一條消息,確認文件是否已成功上載。還有更多此類文件上傳的自動化方法。
本教程涵蓋的主題包括HTML中的文件上傳,Selenium中處理文件上傳的方法(其中包括以下方法:使用sendKeys,然后使用AutoIT和Robot類)。
本教程還說明了在Selenium中使用這些方法處理文件上傳的代碼的實現(xiàn),此后,我們將看到一些示例,這些示例在Selenium的幫助下執(zhí)行文件上傳。
HTML文件上傳
以下代碼實現(xiàn)說明了HTML頁面上的文件上傳操作。HTML代碼顯示了如何執(zhí)行上傳操作,方法是先單擊“選擇文件”按鈕瀏覽要上傳的文件,然后單擊“上傳文件”選項,此后我們可以看到文件已成功上傳。

上面的圖片由HTML創(chuàng)建的頁面組成,下面是該頁面的HTML代碼。讓我們快速看一下HTML代碼。
<html><head><title>上傳文件title>head><body><form action="photo_upload.png" method="post" enctype="multipart/form-data"><h2> 上傳文件 (上傳圖片文件) h2>選擇要上傳的文件:<input type="file" name="fileToUpload" id="fileToUpload"><input type="submit" value="Upload File" name="submit">form>body>html>
因此,在通過單擊“上傳文件”選項上載所需的文件時,將顯示以下頁面(圖像)(即顯示已上載的圖像文件),該頁面確認選擇上載的文件已成功上載。

在Selenium中上傳文件的方法
讓我們看看一些處理文件上傳的方法,以及相同的代碼實現(xiàn)。
可以使用以下方法在Selenium中上傳文件:
使用sendKeys方法
使用AutoIT工具
Robot Class
#1)使用sendKeys方法
在Selenium中上傳文件的最基本方法是使用sendKeys方法。它是Selenium中用于文件上傳的內(nèi)置功能。
語法如下:
WebElement?upload_file?=?driver.findElement(By.xpath(“?//?input?[@?id?='file_up']”)));upload_file.sendKeys(“ C:/Users/Sonali/Desktop/upload.png”);
讓我們了解上述技術(shù)的代碼實現(xiàn):
為了使用這種方法上傳文件,我們首先需要檢查提供文件上傳的元素或按鈕,然后使用sendKeys瀏覽保存要上傳的實際文件的路徑。將路徑以及文件名放在sendKeys中,以便程序?qū)Ш降教岬降穆窂揭垣@取文件。
此后,單擊保存或提交按鈕,該文件將被視為已上傳。有時,我們還會收到一條消息,說明文件已成功上傳。
使用sendKeys方法的代碼實現(xiàn):
package?SeleniumPrograms;import?java.io.IOException;import?org.openqa.selenium.By;import?org.openqa.selenium.JavascriptExecutor;import?org.openqa.selenium.WebDriver;import?org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;public?class?FileUpload?{???public?static?void?main(String[]?args)?throws?IOException,?InterruptedException?{???WebDriver?d?=?new?FirefoxDriver();???d.manage().window().maximize();???d.manage().timeouts().pageLoadTimeout(10,?TimeUnit.SECONDS);???d.get("https://www.monsterindia.com/seeker/registration");?//Testing?webpage???d.manage().timeouts().implicitlyWait(10,?TimeUnit.SECONDS);???JavascriptExecutor?js?=?(JavascriptExecutor)d;???js.executeScript("window.scrollBy(0,380)");???Thread.sleep(3000);???WebElement?browse?=?d.findElement(By.xpath("http://input[@id='file-upload']"));???browse.sendKeys("C:\\Users\\Chait\\Desktop\\Files\\Spencer.txt");???System.out.println("File?is?Uploaded?Successfully");???}}
因此,對于使用sendKeys選項上傳文件,我們只需使用內(nèi)置的sendKeys方法即可成功上傳所需的文件。

這是上述代碼(適用于Monster.com)的輸出,在其中,使用sendKeys方法在selenium Web驅(qū)動程序中上傳文件時,我們可以看到顯示為“文件上傳成功”的消息。
#2)使用AutoIT
AutoIT是Windows軟件的免費軟件和開源自動化工具。它是使用BASIC腳本計算機語言編寫的,用于自動化Microsoft Windows用戶界面。它模擬擊鍵,鼠標移動和Windows控件操作的任意組合。
下載和安裝AutoIT工具的步驟:
打開官網(wǎng)
轉(zhuǎn)到自動->下載。下載最新的AutoIT。
進行AutoIT安裝和設(shè)置(下一步->同意-> 32/64位選擇->文件安裝位置選擇->完成。
有2個安裝文件:a)AutoIt版本3? b)SciTE autoit 3。
安裝完成后,打開AutoIT編輯器。
轉(zhuǎn)到保存安裝文件的位置,單擊“ SciTE.exe”文件,然后將打開AutoIT編輯器。請參見下面的AutoIT編輯器屏幕截圖。
AutoIT_Editor:

現(xiàn)在,讓我們簡短地了解如何使用此工具:
打開AutoIT編輯器。
我們需要在AutoIT編輯器中編寫一個簡單的代碼,這是文件上載操作所必需的(要上載的文件名,將在代碼中提到)。
現(xiàn)在關(guān)閉編輯器并右鍵單擊它,您將看到編譯腳本選項。為64位計算機選擇編譯腳本(x64)選項,為32位計算機選擇編譯腳本(x86)。
完成上述步驟后,將創(chuàng)建一個.exe文件,并且該文件將在我們的Selenium蝕代碼中提及。編譯后,如下圖所示,創(chuàng)建了“ fileupload.exe”文件?,F(xiàn)在,我們可以在Selenium Web驅(qū)動程序腳本中使用此文件。
保存的文件:

下圖通過執(zhí)行運行fileupload.exe文件的Selenium蝕腳本,幫助我們了解了要上傳的文件form.csv。

AutoIT的優(yōu)勢:
AutoIT是一種開源工具,我們無需為此付費。
小型獨立可執(zhí)行文件可以使用AutoIT創(chuàng)建。
它支持輕松記錄或回放腳本。
我們可以使用console write命令輕松調(diào)試代碼?。
它可以選擇創(chuàng)建不同的GUI并識別幾乎所有基本的Windows控件。
它簡單易用。
AutoIT的缺點:
它僅適用于Windows操作系統(tǒng)
由于基本的編碼原理知識是必須的,因此事實證明它是專業(yè)人士的絕佳工具,但對初學(xué)者而言可能有點復(fù)雜。
到目前為止,AutoIT還沒有Java支持。
用戶需要在使用不同的預(yù)定義實用程序功能時導(dǎo)入單獨的庫。
現(xiàn)在,讓我們轉(zhuǎn)到使用AutoIT的文件上傳的實現(xiàn)代碼:
在這里,我們將看到如何使用Selenium中的AutoIT處理文件上傳。為此,讓我們考慮OrangeHRM網(wǎng)站的示例。
使用AutoIT處理Selenium中的文件上傳的代碼實現(xiàn):
package?SeleniumPrograms;?import java.io.IOException;import org.openqa.selenium.By;import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;public class FileUpload {public static void main(String[] args) throws IOException, InterruptedException {??//TODO?自動生成的方法保存WebDriver d = new FirefoxDriver();d.manage().window().maximize();???d.manage().timeouts().pageLoadTimeout(10,?TimeUnit.SECONDS);????//?用于頁面加載d.get(“https://opensource-demo.orangehrmlive.com/“); // 測試網(wǎng)頁d.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); // 隱式等待WebElement uname = d.findElement(By.id("txtUsername")); // 用戶名......... IDuname.sendKeys("Admin");WebElement pwd = d.findElement(By.name("txtPassword")); // 密碼...... NAMEpwd.sendKeys("admin123");WebElement loginb = d.findElement(By.xpath("http://input[@id='btnLogin']"));loginb.click(); //登錄按鈕......XPATHWebElement pim = d.findElement(By.id("menu_pim_viewPimModule"));pim.click(); // 管理員標簽-PIMWebElement config = d.findElement(By.id("menu_pim_Configuration"));config.click(); //配置選項卡WebElement data_imp = d.findElement(By.partialLinkText("Data "));data_imp.click(); //數(shù)據(jù)導(dǎo)入選項卡..... PARTIALLINKT// UPLOADING FILE USING AutoIT....WebElement browser = d.findElement(By.xpath("http://input[@id='pimCsvImport_csvFile']")); //瀏覽按鈕browser.click();System.out.println(“1”);Runtime.getRuntime().exec("C:\\Users\\Chait\\Desktop\\autoit\\fileupload.exe");System.out.println("2");Thread.sleep(3000);??WebElement?upload?=?d.findElement(By.id("btnSave"));????????????//上傳按鈕upload.click();System.out.println("3");???System.out.println("File?Uploaded?Successfully");???????????//?確認信息}}
如上面的代碼所示,以下行非常重要,因為它顯示了AutoIT的用法:
Runtime.getRuntime()。exec(“ C:\\ Users \\ Chait \\ Desktop \\ autoit \\ fileupload.exe”);這里,
運行時:它允許腳本與運行腳本的環(huán)境進行交互。
getRuntime():用于獲取與流程關(guān)聯(lián)的當(dāng)前運行時。
exec():它執(zhí)行AutoIT腳本(此處為fileupload.exe)。
程序執(zhí)行此行時,它將遍歷fileupload.exe文件,在其中執(zhí)行AutoIT代碼,如下所示:
ControlFocus("File Upload","","Edit1")ControlSetText("File Upload","","Edit1","C:\Users\Chait\Desktop\autoit\data_file.csv")ControlClick("File Upload","","Button1")
這里,
ControlFocus:此方法將輸入焦點設(shè)置為“文件名”文本框。
ControlSetText:此方法定義文件的路徑。我們將在“文件名”文本框中上載的文件-跟蹤其路徑。
ControlClick:此方法用于單擊文件上傳器窗口的“打開”按鈕。
上面代碼的輸出如下所示:

往期推薦
