Отправление файла (upload)

Отправление (upload) файла обычно является довольно простой задачей. Она сводится к нахождению input элемента с атрибутом type = "file". Далее нужно ввести путь к файлу и нажать кнопку "submit".

Например:

import org.openqa.selenium.*;
import java.net.URL;

public class SimpleFileUploadTest {
    @Test
    public void uploadTest() throws Exception {
        WebDriver driver = new FirefoxDriver(capabilities);
        driver.get("http://the-internet.herokuapp.com/upload");
        WebElement upload = driver.findElement(By.id("file-upload"));
        upload.sendKeys("your/path/here.file");
        driver.findElement(By.id("file-submit")).click();
        //make assertions here
        driver.quit();
    }
}

Однако есть одна особенность. Если тесты будут запускаться удаленно, то необходима дополнительная настройка при создании Webdriver:

DesiredCapabilities capabillities = DesiredCapabilities.firefox();
driver = new RemoteWebDriver(new URL(REMOTE_HUB_URL),capabillities);
driver.setFileDetector(new LocalFileDetector());

Метод setFileDetector говорит вебдрайверу, что файл загружается с локальной машины на удаленный сервер вместо обычного указания локального пути к файлу. В таком случае вебдрайвер отправит файл, закодированный в base64 формате, по JSON Wire протоколу на сервер прежде, чем вводить путь к файлу.