1. 概述

WebDriver Selenium 是一个工具,用于自动化与网络浏览器进行用户交互以测试Web应用程序。它能够执行文件上传、获取HTML内容等任务。

在这篇教程中,我们将探讨如何使用sendKeys()方法在Selenium中实现文件上传。

2. 使用sendKeys()上传文件

简单来说,文件上传是许多Web应用的常见功能。然而,由于涉及到操作操作系统本地文件系统,使用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输入元素的name属性。图片位于项目的根目录下。

此外,我们创建WebElement实例来访问输入字段的name属性和提交按钮。我们还需要指定文件路径,并在inputElement上调用sendKeys()方法,将图片路径输入到输入字段中。

最后,通过点击submitButton来触发上传操作。我们验证上传的文件名和扩展名与原始文件相同。

3. 总结

在这篇文章中,我们学习了如何使用Selenium WebDriver进行文件上传,以及如何使用sendKeys()方法向HTML输入元素发送命令。这项技能对于自动化Web测试和与不同网页元素交互非常有用。

如往常一样,示例的完整源代码可以在GitHub上找到。