• Selenium Video Tutorials

Selenium WebDriver - File Upload



Selenium Webdriver can be used to automate tests requiring uploading files on a web page. In HTML terminology, a file upload element is identified by the tagname called input. Also, it should have a property type having the value as file.

Let us now discuss the identification of a file upload element on a web page shown in the below image. First, we would need to right click on the webpage, and then click on the Inspect button in the Chrome browser. Then, the corresponding HTML code for the whole page would be visible. For investigating a single element on a page, we would need to click on the left upward arrow, available to the top of the visible HTML code as highlighted below.

Selenium File Upload 1

Once, we had clicked and pointed the arrow to the Choose file button beside the text Select a file, its HTML code was visible, both reflecting the input tagname(enclosed in <>), and its type attribute having the value file.

Selenium File Upload 2
<input id="uploadFile" type="file" lang="en" class="form-control-file">

To upload a file, we would use the sendKeys() method. The path of the file to be uploaded is passed as a parameter to that method. Let us take an example of the below page, where we would upload a file Picture.png by clicking the Choose file button. Once successfully uploaded, the file Picture.png should be visible on a web page.

Selenium File Upload 3

Syntax

WebDriver driver = new ChromeDriver();

// identify element the element 
WebElement l = driver.findElement(By.xpath("value of xpath locator"));

// getting file path to be uploaded
File f = new File("./Picture.png");
System.out.println("Getting the file path to be uploaded: " + f.getAbsolutePath());

// uploading file with path of file uploaded
m.sendKeys(f.getAbsolutePath());

Example

Code Implementation on FilesUpload.java class file.

package org.example;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.io.File;
import java.util.concurrent.TimeUnit;

public class FilesUpload {
   public static void main(String[] args) throws InterruptedException {

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver();

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // Opening the webpage where we will upload a file
      driver.get("https://www.tutorialspoint.com/selenium/practice/upload-download.php");

      // identify element with xpath for file upload
      WebElement m = driver.findElement(By.xpath("//*[@id='uploadFile']"));

      // getting file path to be uploaded
      File f = new File("./Picture.png");
      System.out.println("Getting the file path to be uploaded: " + f.getAbsolutePath());

      // uploading file with path of file uploaded
      m.sendKeys(f.getAbsolutePath());

      // check if file uploaded successfully
      if (m.getAttribute("value").equalsIgnoreCase("Picture.png")) {
         System.out.println("File uploaded successfully ");
      } else {
         System.out.println("File uploaded unsuccessfully ");
      }

      // Closing browser
      driver.quit();
   }
}

Dependencies added in pom.xml file −

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>org.example</groupId>
   <artifactId>SeleniumJava</artifactId>
   <version>1.0-SNAPSHOT</version>

   <properties>
      <maven.compiler.source>16</maven.compiler.source>
      <maven.compiler.target>16</maven.compiler.target>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
   
   <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
   <dependencies>
      <dependency>
         <groupId>org.seleniumhq.selenium</groupId>
         <artifactId>selenium-java</artifactId>
         <version>4.11.0</version>
      </dependency>
   </dependencies>
</project>

Output

Getting the file path to be uploaded: /Users/IdeaProjects/Selenium Java/./Picture.png
File uploaded unsuccessfully 

Process finished with exit code 0

In the above example, we had obtained the path of the file to be uploaded with the message in the console - Getting the file path to be uploaded: /Users/IdeaProjects/Selenium Java/./Picture.png. Then we had successfully uploaded the file with the message in the console - File uploaded unsuccessfully.

Finally, the message Process finished with exit code 0 was received, signifying successful execution of the code.

Let us take another example, where a wrong path of the file to be uploaded is passed as a parameter to the sendKeys() method(that is the file name to be uploaded is named as Picture1.png instead of Picture.png). In such a scenario, a file would not be uploaded, and an exception would be thrown.

Example

Code Implementation on FilesExcUpload.java class file.

package org.example;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.io.File;
import java.util.concurrent.TimeUnit;

public class FilesExcUpload {
   public static void main(String[] args) throws InterruptedException {

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver();

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // Opening the webpage where we will upload a file
      driver.get("https://www.tutorialspoint.com/selenium/practice/upload-download.php");

      // identify element with xpath for file upload
      WebElement m = driver.findElement(By.xpath("//*[@id='uploadFile']"));

      // getting file path to be uploaded
      File f = new File("./Picture1.png");
      System.out.println("Getting the file path to be uploaded: " + f.getAbsolutePath());

      // uploading file with path of file uploaded
      m.sendKeys(f.getAbsolutePath());

      // check if file uploaded successfully
      if (m.getAttribute("value").equalsIgnoreCase("Picture1.png")) {
         System.out.println("File uploaded successfully ");
      } else {
         System.out.println("File uploaded unsuccessfully ");
      }

      // Closing browser
      driver.quit();
   }
}

Output

Getting the file path to be uploaded: 
   /Users/IdeaProjects/Selenium Java/./Picture1.png
Exception in thread "main"
   org.openqa.selenium.InvalidArgumentException: invalid argument: 
   File not found : /Users/IdeaProjects/Selenium Java/./Picture1.png

Process finished with exit code 1

In the above example, we had obtained the path of the file to be uploaded with the message in the console - Getting the file path to be uploaded: /Users/IdeaProjects/Selenium Java/./Picture1.png. Then received the exception since an incorrect file path was sent for upload.

Finally, the message Process finished with exit code 1 was received, signifying unsuccessful execution of the code.

Thus, in this tutorial, we had discussed how to upload files using the Selenium Webdriver.

Advertisements