在 Java 中使用 Selenium Webdriver 上傳文件
一、概述
Selenium WebDriver 是一種工具,可以自動執行用戶與 Web 瀏覽器的交互以測試 Web 應用程序。它自動執行文件上傳、獲取輸入值、抓取 HTML 內容等過程。
在本教程中,我們將探討如何使用 Selenium 中的sendKeys()
方法上傳文件。
2.使用sendKeys()
上傳文件
簡而言之,文件上傳是許多網絡應用程序中的常見功能。但是,使用 Selenium WebDriver 測試文件上傳可能很棘手,因為它涉及與操作系統的本機文件系統交互。為了克服這個挑戰,我們可以使用sendKeys()
方法。
sendKeys()
方法有助於模擬鍵盤操作。此方法可以將數據作為輸入發送到 HTML 中的表單元素。
sendKeys()
接受String
作為參數並將其插入到選定的 HTML 元素中。它是自動化測試中的一種重要方法。常見用例包括填寫網絡表單和在網頁上搜索特定項目。
在本教程中,我們將使用sendKeys()
來填寫網絡表單,重點是將文件上傳到網頁。讓我們看一個使用sendKeys()
上傳圖像文件的例子:
class FileUploadWebDriverUnitTest {
private WebDriver driver;
private static final String URL = "http://www.csm-testcenter.org/test?do=show&subdo=common&test=file_upload";
private static final String INPUT_NAME = "file_upload";
@BeforeEach
public void setUp() {
WebDriverManager.firefoxdriver().setup();
driver = new FirefoxDriver();
}
@AfterEach
public void tearDown() {
driver.quit();
}
@Test
public void givenFileUploadPage_whenInputFilePath_thenFileUploadEndsWithFilename() {
driver.get(URL);
String filePath = System.getProperty("user.dir") + "/1688web.png";
WebElement inputElement = driver.findElement(By.name(INPUT_NAME));
WebElement submitButton = driver.findElement(By.name("http_submit"));
inputElement.sendKeys(filePath);
String actualFilePath = inputElement.getAttribute("value");
String fileName = filePath.substring(filePath.lastIndexOf("/") + 1);
WebElement submitButton = driver.findElement(By.name("submit"));
submitButton.click();
Assert.assertTrue(actualFilePath.endsWith(fileName));
}
}
首先,我們將WebDriver
配置為使用 Mozilla Firefox 並編寫一個teardown()
方法以在測試完成後關閉瀏覽器。接下來,我們聲明一個名為URL
的字段,其中包含我們可以上傳文件的 URL“ http://www.csm-testcenter.org/test do=show&subdo=common&test=file_upload
”。然後我們找到接受文件的 HTML 輸入元素的名稱屬性。該圖像位於項目的根目錄中。
此外,我們創建WebElement
實例來訪問輸入字段的名稱屬性和提交按鈕。此外,我們指定文件路徑並調用inputElement
上的sendKeys()
方法以在輸入字段中輸入圖像路徑。
最後,我們通過在submitButton
上執行鼠標單擊來啟動上傳操作。我們驗證上傳的文件與原始文件具有相同的名稱和擴展名。
3.結論
在本文中,我們學習瞭如何使用 Selenium WebDriver 上傳文件。此外,我們使用sendKeys()
方法將命令發送到 HTML 輸入元素。此技能對於自動化 Web 測試和與不同類型的 Web 元素交互非常有用。
與往常一樣,該示例的完整源代碼可在 GitHub 上獲得。