Because Selenium cannot interact with the file upload dialog, it provides a way to upload files without opening the dialog. If the element is an input element with type file, you can use the send keys method to send the full path to the file that will be uploaded.
WebElement fileInput = driver . findElement ( By . cssSelector ( "input[type=file]" )); fileInput . sendKeys ( uploadFile . getAbsolutePath ()); driver . findElement ( By . id ( "file-submit" )). click (); /examples/java/src/test/java/dev/selenium/elements/FileUploadTest.java Copy Close
package dev.selenium.elements ; import dev.selenium.BaseChromeTest ; import java.io.File ; import org.junit.jupiter.api.Assertions ; import org.junit.jupiter.api.Test ; import org.openqa.selenium.By ; import org.openqa.selenium.WebElement ; public class FileUploadTest extends BaseChromeTest { @Test public void fileUploadTest () { driver . get ( "https://the-internet.herokuapp.com/upload" ); File uploadFile = new File ( "src/test/resources/selenium-snapshot.png" ); WebElement fileInput = driver . findElement ( By . cssSelector ( "input[type=file]" )); fileInput . sendKeys ( uploadFile . getAbsolutePath ()); driver . findElement ( By . id ( "file-submit" )). click (); WebElement fileName = driver . findElement ( By . id ( "uploaded-files" )); Assertions . assertEquals ( "selenium-snapshot.png" , fileName . getText ()); } } file_input = driver . find_element ( By . CSS_SELECTOR , "input[type='file']" ) file_input . send_keys ( upload_file ) driver . find_element ( By . ID , "file-submit" ) . click () /examples/python/tests/elements/test_file_upload.py Copy Close
import os from selenium import webdriver from selenium.webdriver.common.by import By def test_uploads ( driver ): driver . get ( "https://the-internet.herokuapp.com/upload" ) upload_file = os . path . abspath ( os . path . join ( os . path . dirname ( __file__ ), ".." , "selenium-snapshot.png" )) file_input = driver . find_element ( By . CSS_SELECTOR , "input[type='file']" ) file_input . send_keys ( upload_file ) driver . find_element ( By . ID , "file-submit" ) . click () file_name_element = driver . find_element ( By . ID , "uploaded-files" ) file_name = file_name_element . text assert file_name == "selenium-snapshot.png" IWebElement fileInput = driver . FindElement ( By . CssSelector ( "input[type=file]" )); fileInput . SendKeys ( uploadFile ); driver . FindElement ( By . Id ( "file-submit" )). Click (); /examples/dotnet/SeleniumDocs/Elements/FileUploadTest.cs Copy Close
using System ; using System.IO ; using Microsoft.VisualStudio.TestTools.UnitTesting ; using OpenQA.Selenium ; namespace SeleniumDocs.Elements { [TestClass] public class FileUploadTest : BaseChromeTest { [TestMethod] public void Uploads () { driver . Url = "https://the-internet.herokuapp.com/upload" ; string baseDirectory = AppContext . BaseDirectory ; string relativePath = "../../../TestSupport/selenium-snapshot.png" ; string uploadFile = Path . GetFullPath ( Path . Combine ( baseDirectory , relativePath )); IWebElement fileInput = driver . FindElement ( By . CssSelector ( "input[type=file]" )); fileInput . SendKeys ( uploadFile ); driver . FindElement ( By . Id ( "file-submit" )). Click (); IWebElement fileName = driver . FindElement ( By . Id ( "uploaded-files" )); Assert . AreEqual ( "selenium-snapshot.png" , fileName . Text ); } } } file_input = driver . find_element ( css : 'input[type=file]' ) file_input . send_keys ( upload_file ) driver . find_element ( id : 'file-submit' ) . click /examples/ruby/spec/elements/file_upload_spec.rb Copy Close
# frozen_string_literal: true require 'spec_helper' RSpec . describe 'File Upload' do let ( :driver ) { start_session } it 'uploads' do driver . get ( 'https://the-internet.herokuapp.com/upload' ) upload_file = File . expand_path ( '../spec_support/selenium-snapshot.png' , __dir__ ) file_input = driver . find_element ( css : 'input[type=file]' ) file_input . send_keys ( upload_file ) driver . find_element ( id : 'file-submit' ) . click file_name = driver . find_element ( id : 'uploaded-files' ) expect ( file_name . text ) . to eq 'selenium-snapshot.png' end end await driver . get ( 'https://the-internet.herokuapp.com/upload' ); // Upload snapshot /examples/javascript/test/elements/fileUpload.spec.js Copy Close
const { Browser , By , until , Builder } = require ( "selenium-webdriver" ); const path = require ( "path" ); const assert = require ( 'node:assert' ); describe ( 'File Upload Test' , function () { let driver ; before ( async function () { driver = new Builder () . forBrowser ( Browser . CHROME ) . build (); }); after ( async () => await driver . quit ()); it ( 'Should be able to upload a file successfully' , async function () { const image = path . resolve ( './test/resources/selenium-snapshot.png' ) await driver . manage (). setTimeouts ({ implicit : 5000 }); // Navigate to URL await driver . get ( 'https://the-internet.herokuapp.com/upload' ); // Upload snapshot await driver . findElement ( By . id ( "file-upload" )). sendKeys ( image ); await driver . findElement ( By . id ( "file-submit" )). submit (); const revealed = await driver . findElement ( By . id ( 'uploaded-files' )) await driver . wait ( until . elementIsVisible ( revealed ), 2000 ); const data = await driver . findElement ( By . css ( 'h3' )); assert . equal ( await data . getText (), `File Uploaded!` ); }); }); Move Code
```java import org.openqa.selenium.By import org.openqa.selenium.chrome.ChromeDriver fun main() { val driver = ChromeDriver() driver.get("https://the-internet.herokuapp.com/upload") driver.findElement(By.id("file-upload")).sendKeys("selenium-snapshot.jpg") driver.findElement(By.id("file-submit")).submit() if(driver.pageSource.contains("File Uploaded!")) { println("file uploaded") } else{ println("file not uploaded") } } ```