Skip to main content
Revolutionize your testing approach with our latest products - Test Observability, Test Management & Accessibility Testing.

Test File Upload Functionality

Learn how to test the file upload functionality of your web app using BrowserStack Automate.

Overview

The file upload functionality of a web app lets you upload files for features, such as forms, registration pages, or document uploaders. Uploading a file entails searching for the file in the given location or on your machine, and then uploading it to the web app.

BrowserStack provides an option to test the file upload functionality for multiple scenarios using the LocalFileDetector method.

The following sections include sample code snippets to test your web app’s File Upload functionality in an Automate session.

In this guide, you will learn how to:

Upload files from your machine

Use the Local File Detector method that enables file transfers from your machine to the BrowserStack remote browser.

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.LocalFileDetector;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class JavaSample {

  public static final String AUTOMATE_USERNAME = "YOUR_USERNAME";
  public static final String AUTOMATE_KEY = "YOUR_ACCESS_KEY";
  public static final String URL = "https://" + AUTOMATE_USERNAME + ":" + AUTOMATE_KEY + "@hub-cloud.browserstack.com/wd/hub";

  public static void main(String[] args) throws Exception {
  DesiredCapabilities capabilities = new DesiredCapabilities();
  capabilities.setCapability("browserName", "IE");
  capabilities.setCapability("browserVersion", "11.0");
  HashMap<String, Object> browserstackOptions = new HashMap<String, Object>();
  browserstackOptions.put("os", "Windows");
  browserstackOptions.put("osVersion", "10");
  browserstackOptions.put("projectName", "Upload Files");
  browserstackOptions.put("buildName", "Upload_file");
  capabilities.setCapability("bstack:options", browserstackOptions);

    RemoteWebDriver driver = new RemoteWebDriver(new URL(URL), capabilities);
    driver.setFileDetector(new LocalFileDetector());
    driver.get("http://www.fileconvoy.com/");
    driver.findElement(By.id("upfile_0")).sendKeys("//local//file//path");
    driver.findElement(By.id("readTermsOfUse")).click();
    driver.findElement(By.name("upload_button")).submit();
    JavascriptExecutor jse = (JavascriptExecutor)driver;
    try {
    	WebDriverWait wait = new WebDriverWait(driver, 5);
    	wait.until(ExpectedConditions.presenceOfElementLocated(By.id("TopMessage")));
    	if(driver.findElementById("TopMessage").getText().contains("successfully uploaded")) {
    		jse.executeScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\": \"passed\", \"reason\": \"File uploaded successfully\"}}");
    	} else {
    		jse.executeScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\": \"failed\", \"reason\": \"File upload failed\"}}");
    	}
    }
    catch(Exception e) {
    	jse.executeScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\": \"failed\", \"reason\": \"File could not be uploaded in 5 seconds\"}}");
    }
    driver.quit();
  }
}
const webdriver = require("selenium-webdriver");
const remote = require("selenium-webdriver/remote");

// Input capabilities
var capabilities = {
	'bstack:options' : {
		"os" : "Windows",
		"osVersion" : "10",
		"projectName" : "Upload Files",
		"buildName" : "Upload_file",
		"userName" : "YOUR_USERNAME",
		"accessKey" : "YOUR_ACCESS_KEY",
	},
	"browserName" : "IE",
	"browserVersion" : "11.0",
}

let driver = new webdriver.Builder()
    .usingServer('https://hub-cloud.browserstack.com/wd/hub')
    .withCapabilities(capabilities)
    .build();

//This will detect your local file
driver.setFileDetector(new remote.FileDetector());

(async () => {
  await driver.get("http://www.fileconvoy.com");

  const filePathElement = await driver.findElement(webdriver.By.id("upfile_0"));
  await filePathElement.sendKeys("//local//file//path");

  await (await driver.findElement(webdriver.By.id("readTermsOfUse"))).click();
  await (await driver.findElement(webdriver.By.name("upload_button"))).click();
  try {
    await driver.wait(webdriver.until.elementIsVisible((await driver.findElement(webdriver.By.id('TopMessage')))), 5000);
    if((await driver.findElement(webdriver.By.id('TopMessage')).getText()).includes('successfully uploaded')) {
      await driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "File upload successful"}}');
    } else {
      await driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File upload failed"}}');
    }
    } catch (e) {
    await driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File could not be uploaded in time"}}');
    }
  await driver.quit();
})();
using System;
using System.Text;
using OpenQA.Selenium;
using OpenQA.Selenium.Remote;

namespace SeleniumTest
{
  class Program
  {
    static void Main(string[] args)
    {
      Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
      IWebDriver driver;
      InternetExplorerOptions capabilities = new InternetExplorerOptions();
      capabilities.BrowserVersion = "11.0";
      Dictionary<string, object> browserstackOptions = new Dictionary<string, object>();
      browserstackOptions.Add("os", "Windows");
      browserstackOptions.Add("osVersion", "10");
      browserstackOptions.Add("projectName", "Upload Files");
      browserstackOptions.Add("buildName", "Upload_file");
      browserstackOptions.Add("userName", "YOUR_USERNAME");
      browserstackOptions.Add("accessKey", "YOUR_ACCESS_KEY");
      browserstackOptions.Add("browserName", "IE");
      capabilities.AddAdditionalOption("bstack:options", browserstackOptions);

      driver = new RemoteWebDriver(
        new Uri("http://hub.browserstack.com/wd/hub/"), capabilities
      );
      driver.Navigate().GoToUrl("http://www.fileconvoy.com");
      IWebElement uploadFile = driver.FindElement(By.Id("upfile_0"));
      Console.WriteLine(driver.Title);
      String path = "//path//to//your//local//file";   //File path in your local machine
      LocalFileDetector detector = new LocalFileDetector();
      var allowsDetection = driver as IAllowsFileDetection;
      if (allowsDetection != null)
      {
        allowsDetection.FileDetector = detector;
      }
      uploadFile.SendKeys(path);
      driver.FindElement(By.Id("readTermsOfUse")).Click();
      driver.FindElement(By.Id("upload_button")).Click();
      driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
      if (driver.FindElement(By.CssSelector("#TopMessage")).Text.Contains("successfully uploaded"))
      {
        ((IJavaScriptExecutor)driver).ExecuteScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\":\"passed\", \"reason\": \"File uploaded successfully!\"}}");
      }
      else
      {
        ((IJavaScriptExecutor)driver).ExecuteScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\":\"failed\", \"reason\": \"File upload failed!\"}}");
      }
      driver.Quit();
    }
  }
}
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait

desired_cap = {
	'bstack:options' : {
		"os" : "Windows",
		"osVersion" : "10",
		"projectName" : "Upload Files",
		"buildName" : "Upload_file",
	},
	"browserName" : "IE",
	"browserVersion" : "11.0",
}


options.set_capability('bstack:options', desired_cap)
driver = webdriver.Remote(
    command_executor='https://hub-cloud.browserstack.com/wd/hub',
    options=options)
driver.get('http://www.fileconvoy.com')
driver.find_element_by_id('upfile_0').send_keys('//local//file//path')
driver.find_element_by_id('readTermsOfUse').click()
driver.find_element_by_name('upload_button').submit()
try:
    WebDriverWait(driver, 5).until(lambda x: x.find_element_by_id('TopMessage'))
    if(driver.find_element_by_id('TopMessage').text == "Your file(s) have been successfully uploaded."):
        # Setting the status of test as 'passed' or 'failed' based on the condition; if title of the web page starts with 'BrowserStack'
        driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed", "reason": "File uploaded!"}}')
    else:
        driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed", "reason": "File upload failed"}}')
except TimeoutException:
    driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed", "reason": "File failed to upload in 5 seconds"}}')
driver.quit()
require 'rubygems'
require 'selenium-webdriver'

# Input capabilities
capabilities = {
	'bstack:options' => {
		"os" => "Windows",
		"osVersion" => "10",
		"projectName" => "Upload Files",
		"buildName" => "Upload_file",
		"javascriptEnabled" => "true"
	},
	"browserName" => "IE",
	"browserVersion" => "11.0",
}

driver = Selenium::WebDriver.for(
    :remote,
    :url => "https://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub",
    :capabilities => capabilities
)
driver.file_detector = lambda do |args|
  str = args.first.to_s
  str if File.exist?(str)
end
driver.navigate.to "http://www.fileconvoy.com"
driver.find_element(:id, "upfile_0").send_keys("//local//file//path")
driver.execute_script('document.getElementById("readTermsOfUse").click();')
driver.find_element(:name, "upload_button").submit
sleep(5)
driver.quit
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.LocalFileDetector;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class JavaSample {

  public static final String AUTOMATE_USERNAME = "YOUR_USERNAME";
  public static final String AUTOMATE_KEY = "YOUR_ACCESS_KEY";
  public static final String URL = "https://" + AUTOMATE_USERNAME + ":" + AUTOMATE_KEY + "@hub-cloud.browserstack.com/wd/hub";

  public static void main(String[] args) throws Exception {

    DesiredCapabilities caps = new DesiredCapabilities();
    caps.setCapability("browser", "internet explorer");
    caps.setCapability("os", "windows");
    caps.setCapability("browser_version", "11.0");
    caps.setCapability("os_version", "10");
    caps.setCapability("browserstack.sendKeys", "true");
    caps.setCapability("browserstack.debug", "true");
    caps.setCapability("name", "Bstack-[Java] Sample Test");

    RemoteWebDriver driver = new RemoteWebDriver(new URL(URL), caps);
    driver.setFileDetector(new LocalFileDetector());
    driver.get("http://www.fileconvoy.com/");
    driver.findElement(By.id("upfile_0")).sendKeys("//local//file//path");
    driver.findElement(By.id("readTermsOfUse")).click();
    driver.findElement(By.name("upload_button")).submit();
    JavascriptExecutor jse = (JavascriptExecutor)driver;
    try {
    	WebDriverWait wait = new WebDriverWait(driver, 5);
    	wait.until(ExpectedConditions.presenceOfElementLocated(By.id("TopMessage")));
    	if(driver.findElementById("TopMessage").getText().contains("successfully uploaded")) {
    		jse.executeScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\": \"passed\", \"reason\": \"File uploaded successfully\"}}");
    	} else {
    		jse.executeScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\": \"failed\", \"reason\": \"File upload failed\"}}");
    	}
    }
    catch(Exception e) {
    	jse.executeScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\": \"failed\", \"reason\": \"File could not be uploaded in 5 seconds\"}}");
    }
    driver.quit();
  }
}
const webdriver = require("selenium-webdriver");
const remote = require("selenium-webdriver/remote");

// Input capabilities
const capabilities = {
  "browserName": "Internet Explorer",
  "browser_version": "11.0",
  "os": "Windows",
  "os_version": "10",
  "name": "Bstack-[NodeJS] Upload Test",
  "browserstack.sendKeys": "true",
  "browserstack.debug": "true",
  "browserstack.user": "YOUR_USERNAME",
  "browserstack.key": "YOUR_ACCESS_KEY"
};

const driver = new webdriver.Builder()
  .usingServer("https://hub-cloud.browserstack.com/wd/hub")
  .withCapabilities(capabilities)
  .build();

//This will detect your local file
driver.setFileDetector(new remote.FileDetector());

(async () => {
  await driver.get("http://www.fileconvoy.com");

  const filePathElement = await driver.findElement(webdriver.By.id("upfile_0"));
  await filePathElement.sendKeys("//local//file//path");

  await (await driver.findElement(webdriver.By.id("readTermsOfUse"))).click();
  await (await driver.findElement(webdriver.By.name("upload_button"))).click();
  try {
    await driver.wait(webdriver.until.elementIsVisible((await driver.findElement(webdriver.By.id('TopMessage')))), 5000);
    if((await driver.findElement(webdriver.By.id('TopMessage')).getText()).includes('successfully uploaded')) {
      await driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "File upload successful"}}');
    } else {
      await driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File upload failed"}}');
    }
    } catch (e) {
    await driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File could not be uploaded in time"}}');
    }
  await driver.quit();
})();
using System;
using System.Text;
using OpenQA.Selenium;
using OpenQA.Selenium.Remote;

namespace SeleniumTest
{
  class Program
  {
    static void Main(string[] args)
    {
      Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
      IWebDriver driver;
      OpenQA.Selenium.IE.InternetExplorerOptions capability = new OpenQA.Selenium.IE.InternetExplorerOptions();
      capability.AddAdditionalCapability("browser", "IE", true);
      capability.AddAdditionalCapability("browser_version", "11", true);
      capability.AddAdditionalCapability("os", "Windows", true);
      capability.AddAdditionalCapability("os_version", "10", true);
      capability.AddAdditionalCapability("browserstack.sendKeys", "true", true);
      capability.AddAdditionalCapability("browserstack.debug", "true", true);
      capability.AddAdditionalCapability("browserstack.user", "YOUR_USERNAME", true);
      capability.AddAdditionalCapability("browserstack.key", "YOUR_ACCESS_KEY", true);
      capability.AddAdditionalCapability("name", "Bstack-[C_sharp] Sample Test", true);

      driver = new RemoteWebDriver(
        new Uri("http://hub-cloud.browserstack.com/wd/hub/"), capability
      );
      driver.Navigate().GoToUrl("http://www.fileconvoy.com");
      IWebElement uploadFile = driver.FindElement(By.Id("upfile_0"));
      Console.WriteLine(driver.Title);
      String path = "//path//to//your//local//file";   //File path in your local machine
      LocalFileDetector detector = new LocalFileDetector();
      var allowsDetection = driver as IAllowsFileDetection;
      if (allowsDetection != null)
      {
        allowsDetection.FileDetector = detector;
      }
      uploadFile.SendKeys(path);
      driver.FindElement(By.Id("readTermsOfUse")).Click();
      driver.FindElement(By.Id("upload_button")).Click();
      driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
      if (driver.FindElement(By.CssSelector("#TopMessage")).Text.Contains("successfully uploaded"))
      {
        ((IJavaScriptExecutor)driver).ExecuteScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\":\"passed\", \"reason\": \"File uploaded successfully!\"}}");
      }
      else
      {
        ((IJavaScriptExecutor)driver).ExecuteScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\":\"failed\", \"reason\": \"File upload failed!\"}}");
      }
      driver.Quit();
    }
  }
}
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait

desired_cap = {
 'browser': 'Internet Explorer',
 'browser_version': '11.0',
 'os': 'Windows',
 'os_version': '10',
 'browserstack.sendKeys': 'true',
 'browserstack.debug': 'true',
 'name': 'Bstack-[Python] Sample Test'
}

driver = webdriver.Remote(
    command_executor='http://YOUR_USERNAME:YOUR_ACCESS_KEY@hub.browserstack.com/wd/hub',
    desired_capabilities=desired_cap)
driver.get('http://www.fileconvoy.com')
driver.find_element_by_id('upfile_0').send_keys('//local//file//path')
driver.find_element_by_id('readTermsOfUse').click()
driver.find_element_by_name('upload_button').submit()
try:
    WebDriverWait(driver, 5).until(lambda x: x.find_element_by_id('TopMessage'))
    if(driver.find_element_by_id('TopMessage').text == "Your file(s) have been successfully uploaded."):
        # Setting the status of test as 'passed' or 'failed' based on the condition; if title of the web page starts with 'BrowserStack'
        driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed", "reason": "File uploaded!"}}')
    else:
        driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed", "reason": "File upload failed"}}')
except TimeoutException:
    driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed", "reason": "File failed to upload in 5 seconds"}}')
driver.quit()
require 'rubygems'
require 'selenium-webdriver'

# Input capabilities
caps = Selenium::WebDriver::Remote::Capabilities.new
caps['browser'] = 'Internet Explorer'
caps['browser_version'] = '11.0'
caps['os'] = 'Windows'
caps['os_version'] = '10'
caps['name'] = 'Bstack-[Ruby] Sample Test'
caps['browserstack.sendKeys'] = 'true'
caps['browserstack.debug'] = 'true'
caps["javascriptEnabled"]='true' #Enabling the javascriptEnabled capability to execute javascript in the test script

driver = Selenium::WebDriver.for(:remote,
  :url => "http://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub",
  :desired_capabilities => caps)
driver.file_detector = lambda do |args|
  str = args.first.to_s
  str if File.exist?(str)
end
driver.navigate.to "http://www.fileconvoy.com"
driver.find_element(:id, "upfile_0").send_keys("//local//file//path")
driver.execute_script('document.getElementById("readTermsOfUse").click();')
driver.find_element(:name, "upload_button").submit
sleep(5)
driver.quit

Test file upload functionality in the different browsers including Chrome, Firefox, Edge, and Safari.

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.LocalFileDetector;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.net.URL;

public class JavaSample {

  public static final String AUTOMATE_USERNAME = "YOUR_USERNAME";
  public static final String AUTOMATE_KEY = "YOUR_ACCESS_KEY";
  public static final String URL = "https://" + AUTOMATE_USERNAME + ":" + AUTOMATE_KEY + "@hub-cloud.browserstack.com/wd/hub";

  public static void main(String[] args) throws Exception {

    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability("browserName", "Chrome");
    capabilities.setCapability("browserVersion", "latest");
    HashMap<String, Object> browserstackOptions = new HashMap<String, Object>();
    browserstackOptions.put("os", "Windows");
    browserstackOptions.put("osVersion", "10");
    browserstackOptions.put("projectName", "Upload Files");
    browserstackOptions.put("buildName", "Upload_file");
    capabilities.setCapability("bstack:options", browserstackOptions);

    WebDriver driver = new RemoteWebDriver(new URL(URL), caps);
    driver.setFileDetector(new LocalFileDetector());
    driver.get("http://www.fileconvoy.com/");
    driver.findElement(By.id("upfile_0")).sendKeys("//local//file//path");
    driver.findElement(By.id("readTermsOfUse")).click();
    driver.findElement(By.name("upload_button")).submit();
    JavascriptExecutor jse = (JavascriptExecutor)driver;
    try {
    	WebDriverWait wait = new WebDriverWait(driver, 5);
    	wait.until(ExpectedConditions.presenceOfElementLocated(By.id("TopMessage")));
    	if(driver.findElementById("TopMessage").getText().contains("successfully uploaded")) {
    		jse.executeScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\": \"passed\", \"reason\": \"File uploaded successfully\"}}");
    	} else {
    		jse.executeScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\": \"failed\", \"reason\": \"File upload failed\"}}");
    	}
    }
    catch(Exception e) {
    	jse.executeScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\": \"failed\", \"reason\": \"File could not be uploaded in 5 seconds\"}}");
    }
    driver.quit();
  }
}
const webdriver = require('selenium-webdriver');
const fs = require('fs');
const remote = require('selenium-webdriver/remote');

// Input capabilities
var capabilities = {
	'bstack:options' : {
		"os" : "Windows",
		"osVersion" : "10",
		"projectName" : "Upload Files",
		"buildName" : "Upload_file",
	},
	"browserName" : "Chrome",
	"browserVersion" : "latest",
}

async function runTestWithCaps () {
  let driver = new webdriver.Builder()
    .usingServer('http://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub')
    .withCapabilities(capabilities)
    .build();
  //This will detect your local file
  await driver.setFileDetector(new remote.FileDetector);  
  await driver.get('http://www.fileconvoy.com/');
  await driver.findElement(webdriver.By.id('upfile_0')).sendKeys('//path//to//your//local//file');  // Path to teh file in your system needs to be given here
  await driver.findElement(webdriver.By.id('readTermsOfUse')).click();
  await driver.findElement(webdriver.By.id('upload_button')).click();
  await driver.wait(webdriver.until.elementLocated(webdriver.By.id('TopMessage')), 5000);
  if((await driver.findElement(webdriver.By.id('TopMessage')).getText()).includes('successfully uploaded')) {
    await driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "File upload successful"}}');
  } else {
    await driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File upload failed"}}');
  }
  await driver.quit();
}
runTestWithCaps(); 
using System;
using System.Text;
using OpenQA.Selenium;
using OpenQA.Selenium.Remote;

namespace SeleniumTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            IWebDriver driver;
            ChromeOptions capabilities = new ChromeOptions();
            capabilities.BrowserVersion = "latest";
            Dictionary<string, object> browserstackOptions = new Dictionary<string, object>();
            browserstackOptions.Add("os", "Windows");
            browserstackOptions.Add("osVersion", "10");
            browserstackOptions.Add("projectName", "Upload Files");
            browserstackOptions.Add("buildName", "Upload_file");
            browserstackOptions.Add("userName", "YOUR_USERNAME");
            browserstackOptions.Add("accessKey", "YOUR_ACCESS_KEY");
            browserstackOptions.Add("browserName", "Chrome");
            capabilities.AddAdditionalOption("bstack:options", browserstackOptions);

            driver = new RemoteWebDriver(
              new Uri("http://hub-cloud.browserstack.com/wd/hub/"), capability
            );
            driver.Navigate().GoToUrl("http://www.fileconvoy.com");
            IWebElement uploadFile = driver.FindElement(By.Id("upfile_0"));
            Console.WriteLine(driver.Title);
            String path = "path//to//your//local//file";   //File path in your local machine
            LocalFileDetector detector = new LocalFileDetector();
            var allowsDetection = driver as IAllowsFileDetection;
            if (allowsDetection != null)
            {
              allowsDetection.FileDetector = detector;
            }
            uploadFile.SendKeys(path);
            driver.FindElement(By.Id("readTermsOfUse")).Click();
            driver.FindElement(By.Id("upload_button")).Click();
            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
            String result = driver.FindElement(By.CssSelector("#TopMessage")).Text;
            if(result.Contains("successfully uploaded"))
            {
                ((IJavaScriptExecutor)driver).ExecuteScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\":\"passed\", \"reason\": \"File uploaded successfully!\"}}");
            }
            else
            {
                ((IJavaScriptExecutor)driver).ExecuteScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\":\"failed\", \"reason\": \"File upload failed!\"}}");
            }
            driver.Quit();
        }
    }
}
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait

desired_cap = {
	'bstack:options' : {
		"os" : "Windows",
		"osVersion" : "10",
		"projectName" : "Upload Files",
		"buildName" : "Upload_file",
	},
	"browserName" : "Chrome",
	"browserVersion" : "latest",
}


driver = webdriver.Remote(
    command_executor='http://YOUR_USERNAME:YOUR_ACCESS_KEY@hub.browserstack.com/wd/hub',
    desired_capabilities=desired_cap)
driver.get('http://www.fileconvoy.com')
driver.find_element_by_id('upfile_0').send_keys('//local//file//path')
driver.find_element_by_id('readTermsOfUse').click()
driver.find_element_by_name('upload_button').submit()
try:
    WebDriverWait(driver, 5).until(lambda x: x.find_element_by_id('TopMessage'))
    if(driver.find_element_by_id('TopMessage').text == "Your file(s) have been successfully uploaded."):
        # Setting the status of test as 'passed' or 'failed' based on the condition; if title of the web page starts with 'BrowserStack'
        driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed", "reason": "File uploaded!"}}')
    else:
        driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed", "reason": "File upload failed"}}')
except TimeoutException:
    driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed", "reason": "File failed to upload in 5 seconds"}}')
driver.quit()
require 'rubygems'
require 'selenium-webdriver'

# Input capabilities
capabilities = {
	'bstack:options' => {
		"os" => "Windows",
		"osVersion" => "10",
		"projectName" => "Upload Files",
		"buildName" => "Upload_file",
	},
	"browserName" => "Chrome",
	"browserVersion" => "latest",
}

driver = Selenium::WebDriver.for(:remote,
  :url => "http://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub",
  :desired_capabilities => caps)
driver.file_detector = lambda do |args|
  str = args.first.to_s
  str if File.exist?(str)
end
driver.navigate.to "http://www.fileconvoy.com"
driver.find_element(:id, "upfile_0").send_keys("//local//file//path");
driver.find_element(:id, "readTermsOfUse").click;
driver.find_element(:name, "upload_button").submit;
sleep(5)
driver.quit
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.LocalFileDetector;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.net.URL;

public class JavaSample {

  public static final String AUTOMATE_USERNAME = "YOUR_USERNAME";
  public static final String AUTOMATE_KEY = "YOUR_ACCESS_KEY";
  public static final String URL = "https://" + AUTOMATE_USERNAME + ":" + AUTOMATE_KEY + "@hub-cloud.browserstack.com/wd/hub";

  public static void main(String[] args) throws Exception {

    DesiredCapabilities caps = new DesiredCapabilities();
    caps.setCapability("browser", "chrome");
    caps.setCapability("os", "windows");
    caps.setCapability("browser_version", "latest");
    caps.setCapability("os_version", "10");
    caps.setCapability("name", "Bstack-[Java] Sample Test");

    WebDriver driver = new RemoteWebDriver(new URL(URL), caps);
    driver.setFileDetector(new LocalFileDetector());
    driver.get("http://www.fileconvoy.com/");
    driver.findElement(By.id("upfile_0")).sendKeys("//local//file//path");
    driver.findElement(By.id("readTermsOfUse")).click();
    driver.findElement(By.name("upload_button")).submit();
    JavascriptExecutor jse = (JavascriptExecutor)driver;
    try {
    	WebDriverWait wait = new WebDriverWait(driver, 5);
    	wait.until(ExpectedConditions.presenceOfElementLocated(By.id("TopMessage")));
    	if(driver.findElementById("TopMessage").getText().contains("successfully uploaded")) {
    		jse.executeScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\": \"passed\", \"reason\": \"File uploaded successfully\"}}");
    	} else {
    		jse.executeScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\": \"failed\", \"reason\": \"File upload failed\"}}");
    	}
    }
    catch(Exception e) {
    	jse.executeScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\": \"failed\", \"reason\": \"File could not be uploaded in 5 seconds\"}}");
    }
    driver.quit();
  }
}
const webdriver = require('selenium-webdriver');
const fs = require('fs');
const remote = require('selenium-webdriver/remote');

// Input capabilities
const capabilities = {
 'browserName' : 'safari',
 'browser_version' : 'latest',
 'os' : 'OS X',
 'os_version' : 'Big Sur',
 'name': 'Safari test file upload', // test name
 'build': 'File upload testing' // Build name
}
async function runTestWithCaps () {
  let driver = new webdriver.Builder()
    .usingServer('http://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub')
    .withCapabilities(capabilities)
    .build();
  //This will detect your local file
  await driver.setFileDetector(new remote.FileDetector);  
  await driver.get('http://www.fileconvoy.com/');
  await driver.findElement(webdriver.By.id('upfile_0')).sendKeys('//path//to//your//local//file');  // Path to teh file in your system needs to be given here
  await driver.findElement(webdriver.By.id('readTermsOfUse')).click();
  await driver.findElement(webdriver.By.id('upload_button')).click();
  await driver.wait(webdriver.until.elementLocated(webdriver.By.id('TopMessage')), 5000);
  if((await driver.findElement(webdriver.By.id('TopMessage')).getText()).includes('successfully uploaded')) {
    await driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "File upload successful"}}');
  } else {
    await driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File upload failed"}}');
  }
  await driver.quit();
}
runTestWithCaps(); 
using System;
using System.Text;
using OpenQA.Selenium;
using OpenQA.Selenium.Remote;

namespace SeleniumTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            IWebDriver driver;
            OpenQA.Selenium.Chrome.ChromeOptions capability = new OpenQA.Selenium.Chrome.ChromeOptions();
            capability.AddAdditionalCapability("browser", "Chrome", true);
            capability.AddAdditionalCapability("browser_version", "75.0", true);
            capability.AddAdditionalCapability("os", "Windows", true);
            capability.AddAdditionalCapability("os_version", "10", true);
            capability.AddAdditionalCapability("browserstack.user", "YOUR_USERNAME", true);
            capability.AddAdditionalCapability("browserstack.key", "YOUR_ACCESS_KEY", true);
            capability.AddAdditionalCapability("name", "Bstack-[C_sharp] Sample Test", true);

            driver = new RemoteWebDriver(
              new Uri("http://hub-cloud.browserstack.com/wd/hub/"), capability
            );
            driver.Navigate().GoToUrl("http://www.fileconvoy.com");
            IWebElement uploadFile = driver.FindElement(By.Id("upfile_0"));
            Console.WriteLine(driver.Title);
            String path = "path//to//your//local//file";   //File path in your local machine
            LocalFileDetector detector = new LocalFileDetector();
            var allowsDetection = driver as IAllowsFileDetection;
            if (allowsDetection != null)
            {
              allowsDetection.FileDetector = detector;
            }
            uploadFile.SendKeys(path);
            driver.FindElement(By.Id("readTermsOfUse")).Click();
            driver.FindElement(By.Id("upload_button")).Click();
            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
            String result = driver.FindElement(By.CssSelector("#TopMessage")).Text;
            if(result.Contains("successfully uploaded"))
            {
                ((IJavaScriptExecutor)driver).ExecuteScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\":\"passed\", \"reason\": \"File uploaded successfully!\"}}");
            }
            else
            {
                ((IJavaScriptExecutor)driver).ExecuteScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\":\"failed\", \"reason\": \"File upload failed!\"}}");
            }
            driver.Quit();
        }
    }
}
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait

desired_cap = {
 'browser': 'Chrome',
 'browser_version': '75.0',
 'os': 'Windows',
 'os_version': '10',
 'name': 'Bstack-[Python] Sample Test'
}

driver = webdriver.Remote(
    command_executor='http://YOUR_USERNAME:YOUR_ACCESS_KEY@hub.browserstack.com/wd/hub',
    desired_capabilities=desired_cap)
driver.get('http://www.fileconvoy.com')
driver.find_element_by_id('upfile_0').send_keys('//local//file//path')
driver.find_element_by_id('readTermsOfUse').click()
driver.find_element_by_name('upload_button').submit()
try:
    WebDriverWait(driver, 5).until(lambda x: x.find_element_by_id('TopMessage'))
    if(driver.find_element_by_id('TopMessage').text == "Your file(s) have been successfully uploaded."):
        # Setting the status of test as 'passed' or 'failed' based on the condition; if title of the web page starts with 'BrowserStack'
        driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed", "reason": "File uploaded!"}}')
    else:
        driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed", "reason": "File upload failed"}}')
except TimeoutException:
    driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed", "reason": "File failed to upload in 5 seconds"}}')
driver.quit()
require 'rubygems'
require 'selenium-webdriver'

# Input capabilities
caps = Selenium::WebDriver::Remote::Capabilities.new
caps['browser'] = 'Chrome'
caps['browser_version'] = '75.0'
caps['os'] = 'Windows'
caps['os_version'] = '10'
caps['name'] = 'Bstack-[Ruby] Sample Test'


driver = Selenium::WebDriver.for(:remote,
  :url => "http://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub",
  :desired_capabilities => caps)
driver.file_detector = lambda do |args|
  str = args.first.to_s
  str if File.exist?(str)
end
driver.navigate.to "http://www.fileconvoy.com"
driver.find_element(:id, "upfile_0").send_keys("//local//file//path");
driver.find_element(:id, "readTermsOfUse").click;
driver.find_element(:name, "upload_button").submit;
sleep(5)
driver.quit

Uploading pre-loaded files in devices from a BrowserStack device to the web app is not currently supported for android. Alternatively, you can upload the file from your local machine to the /data/local/tmp/<file_name> directory in the BrowserStack remote instance, and then upload the file from /data/local/tmp/<file_name> directory to the web application.

In the following code snippet, the pushFile() method is used to upload the file from your machine to BrowserStack remote instance, as the method accepts remote_machine_file_path and local_machine_file_path as arguments respectively. The code then navigates to the URL where the file has to be uploaded and through the send_keys() method, uploads the file present in the location set in the remote_machine_file_path argument.

package com.browserstack;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.io.File;
import java.net.URL;
public class UploadFile {
    public static final String USERNAME = "YOUR_USERNAME";
    public static final String AUTOMATE_KEY = "YOUR_ACCESS_KEY";
    public static final String URL = "http://" + USERNAME + ":" + AUTOMATE_KEY + "@hub.browserstack.com/wd/hub";
    public static void main(String[] args) throws Exception {
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability("browserName", "chrome");
    HashMap<String, Object> browserstackOptions = new HashMap<String, Object>();
    browserstackOptions.put("osVersion", "10.0");
    browserstackOptions.put("deviceName", "Samsung Galaxy S20");
    browserstackOptions.put("realMobile", "true");
    browserstackOptions.put("projectName", "Upload Files");
    browserstackOptions.put("buildName", "Upload_file");
    capabilities.setCapability("bstack:options", browserstackOptions);

        /**uploading files**/
        AndroidDriver<WebElement> driver = new AndroidDriver<WebElement>(new URL(URL), capabilities);
        driver.get("https://the-internet.herokuapp.com/upload");
        driver.pushFile("/data/local/tmp/<file_name>", new File("<local_file_path>"));
        driver.findElement(By.id("file-upload")).sendKeys("/data/local/tmp/<file_name>");
        //Thread.sleep(2000);
        driver.findElement(By.id("file-submit")).submit();
        driver.quit();
    }
}
var wd = require('wd');
var fs = require('fs')
var assert = require('assert');
var asserters = wd.asserters;
var capabilities = {
	'bstack:options' : {
		"osVersion" : "10.0",
		"deviceName" : "Samsung Galaxy S20",
		"realMobile" : "true",
		"projectName" : "Upload Files",
		"buildName" : "Upload_file",
		"userName" : "YOUR_USERNAME",
		"accessKey" : "YOUR_ACCESS_KEY",
	},
	"browserName" : "chrome",
}

driver = wd.promiseRemote("http://hub.browserstack.com/wd/hub");
driver
  .init(capabilities)
  .then(function () {
    return driver.get('https://the-internet.herokuapp.com/upload');
  })
  .then(function () {
    let data = fs.readFileSync('<local_file_path>')
    let convertedData = new Buffer.from(data, 'base64')
    return driver.pushFileToDevice('/data/local/tmp/<file_name>', convertedData);
  })
  .then(function () {
    return driver.elementById("file-upload");
  })
  .then(function (uploadFile) {
    return uploadFile.sendKeys('/data/local/tmp/<file_name>');
  })
  .then(function () {
    return driver.elementById("file-submit");
  })
  .then(function (clickSubmit) {
    return clickSubmit.click();
  })
  .fin(function() { return driver.quit(); })
  .done();
using System;
using OpenQA.Selenium.Appium;
using OpenQA.Selenium.Appium.Android;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Support.UI;
using System.Collections.Generic;
using OpenQA.Selenium;
using System.IO;
using NUnit.Framework;
namespace BrowserStack
{
    public class UploadFile
    {
        [Test]
        public void Test()
        {
            ChromeOptions capabilities = new ChromeOptions();
            Dictionary<string, object> browserstackOptions = new Dictionary<string, object>();
            browserstackOptions.Add("osVersion", "10.0");
            browserstackOptions.Add("deviceName", "Samsung Galaxy S20");
            browserstackOptions.Add("realMobile", "true");
            browserstackOptions.Add("projectName", "Upload Files");
            browserstackOptions.Add("buildName", "Upload_file");
            browserstackOptions.Add("userName", "YOUR_USERNAME");
            browserstackOptions.Add("accessKey", "YOUR_ACCESS_KEY");
            browserstackOptions.Add("browserName", "chrome");
            capabilities.AddAdditionalOption("bstack:options", browserstackOptions);
            AndroidDriver<IWebElement> driver = new AndroidDriver<IWebElement>(

            new Uri("http://hub.browserstack.com/wd/hub"), capabilities);
            driver.PushFile("/data/local/tmp/<file_name>", new FileInfo("<local_file_path>"));
            driver.Navigate().GoToUrl("https://the-internet.herokuapp.com/upload");
            driver.FindElement(By.Id("file-upload")).SendKeys("/data/local/tmp/<file_name>");
            driver.FindElement(By.Id("file-submit")).Submit();
            driver.Quit();
        }
    }
}
from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.chrome.options import Options
import time
import os

bstack_options = {
	"userName": os.getenv("BROWSERSTACK_USERNAME") or "YOUR_USERNAME",
	"accessKey": os.getenv("BROWSERSTACK_ACCESS_KEY") or "YOUR_ACCESS_KEY",
	"osVersion" : "10.0",
	"deviceName" : "Samsung Galaxy S20",
	"realMobile" : "true",
	"projectName" : "Upload Files",
	"buildName" : "Upload_file",
}

options = Options()
options.set_capability('bstack:options', bstack_options)

driver = webdriver.Remote(
    command_executor='https://hub.browserstack.com/wd/hub',
    options=options)

driver.push_file("/data/local/tmp/<file_name>", source_path="<local_file_path>")
driver.get("http://cgi-lib.berkeley.edu/ex/fup.html")
driver.switch_to.context('CHROMIUM')
element = WebDriverWait(driver, 40).until(EC.presence_of_element_located((By.XPATH, '//input[@name="upfile"]')))
time.sleep(10)
driver.find_element(By.XPATH, '//input[@name="upfile"]').send_keys("/data/local/tmp/<file_name>")
driver.find_element(By.XPATH, '//input[@type="submit"]').click()
driver.quit()
require 'rubygems'
require 'appium_lib'

capabilities = {
	'bstack:options' => {
		"osVersion" => "10.0",
		"deviceName" => "Samsung Galaxy S20",
		"realMobile" => "true",
		"projectName" => "Upload Files",
		"buildName" => "Upload_file",
	},
	"browserName" => "chrome",
}

appium_driver = Appium::Driver.new({
    'caps' => capabilities,
    'appium_lib' => {
        :server_url => "https://YOUR_USERNAME:YOUR_ACCESS_KEY@hub.browserstack.com/wd/hub"
    }}, true)
driver = appium_driver.start_driver
driver.push_file('/data/local/tmp/<file_name>', (File.read '<local_file_path>'))
driver.get("https://the-internet.herokuapp.com/upload")
driver.find_element(:id, "file-upload").send_keys("/data/local/tmp/<file_name>")
driver.find_element(:id, "file-submit").submit();
driver.quit
package com.browserstack;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.io.File;
import java.net.URL;
public class UploadFile {
    public static final String USERNAME = "YOUR_USERNAME";
    public static final String AUTOMATE_KEY = "YOUR_ACCESS_KEY";
    public static final String URL = "http://" + USERNAME + ":" + AUTOMATE_KEY + "@hub-cloud.browserstack.com/wd/hub";
    public static void main(String[] args) throws Exception {
        DesiredCapabilities caps = new DesiredCapabilities();
        caps.setCapability("device", "Samsung Galaxy S9");
        caps.setCapability("os_version", "8.0");
        caps.setCapability("name", "upload");
        caps.setCapability("build", "Upload File");
        /**uploading files**/
        AndroidDriver<WebElement> driver = new AndroidDriver<WebElement>(new URL(URL), caps);
        driver.get("https://the-internet.herokuapp.com/upload");
        driver.pushFile("/data/local/tmp/<file_name>", new File("<local_file_path>"));
        driver.findElement(By.id("file-upload")).sendKeys("/data/local/tmp/<file_name>");
        //Thread.sleep(2000);
        driver.findElement(By.id("file-submit")).submit();
        driver.quit();
    }
}
var wd = require('wd');
var fs = require('fs')
var assert = require('assert');
var asserters = wd.asserters;
desiredCaps = {
  'browserstack.user' : 'YOUR_USERNAME',
  'browserstack.key' : 'YOUR_ACCESS_KEY',
  'build' : 'Node Push File',
  'name': 'upload file',
  'device' : 'Google Pixel 3',
  'browserstack.debug' : true
};
driver = wd.promiseRemote("http://hub-cloud.browserstack.com/wd/hub");
driver
  .init(desiredCaps)
  .then(function () {
    return driver.get('https://the-internet.herokuapp.com/upload');
  })
  .then(function () {
    let data = fs.readFileSync('<local_file_path>')
    let convertedData = new Buffer.from(data, 'base64')
    return driver.pushFileToDevice('/data/local/tmp/<file_name>', convertedData);
  })
  .then(function () {
    return driver.elementById("file-upload");
  })
  .then(function (uploadFile) {
    return uploadFile.sendKeys('/data/local/tmp/<file_name>');
  })
  .then(function () {
    return driver.elementById("file-submit");
  })
  .then(function (clickSubmit) {
    return clickSubmit.click();
  })
  .fin(function() { return driver.quit(); })
  .done();
using System;
using OpenQA.Selenium.Appium;
using OpenQA.Selenium.Appium.Android;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Support.UI;
using System.Collections.Generic;
using OpenQA.Selenium;
using System.IO;
using NUnit.Framework;
namespace BrowserStack
{
    public class UploadFile
    {
        [Test]
        public void Test()
        {
            AppiumOptions caps = new AppiumOptions();
            // Set your BrowserStack access credentials
            caps.AddAdditionalCapability("browserstack.user", "YOUR_USERNAME");
            caps.AddAdditionalCapability("browserstack.key", "YOUR_ACCESS_KEY");
            // Specify device and os_version
            caps.AddAdditionalCapability("device", "Samsung Galaxy S10");
            caps.AddAdditionalCapability("os_version", "9.0");
            caps.AddAdditionalCapability("build", "Upload File - CSharp");
            caps.AddAdditionalCapability("name", "upload_file");
            AndroidDriver<IWebElement> driver = new AndroidDriver<IWebElement>(
                    new Uri("http://hub-cloud.browserstack.com/wd/hub"), caps);
            driver.PushFile("/data/local/tmp/<file_name>", new FileInfo("<local_file_path>"));
            driver.Navigate().GoToUrl("https://the-internet.herokuapp.com/upload");
            driver.FindElement(By.Id("file-upload")).SendKeys("/data/local/tmp/<file_name>");
            driver.FindElement(By.Id("file-submit")).Submit();
            driver.Quit();
        }
    }
}
from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
import time
import os

desired_cap = {
	'bstack:options' : {
		"userName": os.getenv("BROWSERSTACK_USERNAME") or "YOUR_USERNAME",
		"accessKey": os.getenv("BROWSERSTACK_ACCESS_KEY") or "YOUR_ACCESS_KEY",
		"osVersion" : "10.0",
		"deviceName" : "Samsung Galaxy S20",
		"realMobile" : "true",
		"projectName" : "Upload Files",
		"buildName" : "Upload_file",
	},
	"browserName" : "chrome",
}

driver = webdriver.Remote(
    command_executor='https://hub.browserstack.com/wd/hub',
    desired_capabilities=desired_cap)
driver.push_file("/data/local/tmp/<file_name>", source_path="<local_file_path>")
driver.get("http://cgi-lib.berkeley.edu/ex/fup.html")
driver.switch_to.context('CHROMIUM')
element = WebDriverWait(driver, 40).until(EC.presence_of_element_located((By.XPATH, '//input[@name="upfile"]')))
time.sleep(10)
driver.find_element(By.XPATH, '//input[@name="upfile"]').send_keys("/data/local/tmp/<file_name>")
driver.find_element(By.XPATH, '//input[@type="submit"]').click()
driver.quit()
require 'rubygems'
require 'appium_lib'

caps = {}
caps['device'] = 'Google Pixel 3'
caps['platformName'] = 'Android'
caps['realMobile'] = 'true'
caps['name'] = 'BStack-[Ruby] Sample Test' # test name
caps['build'] = 'BStack Build Number 1' # CI/CD job or build name

appium_driver = Appium::Driver.new({
    'caps' => caps,
    'appium_lib' => {
        :server_url => "https://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub"
    }}, true)
driver = appium_driver.start_driver
driver.push_file('/data/local/tmp/<file_name>', (File.read '<local_file_path>'))
driver.get("https://the-internet.herokuapp.com/upload")
driver.find_element(:id, "file-upload").send_keys("/data/local/tmp/<file_name>")
driver.find_element(:id, "file-submit").submit();
driver.quit

Uploading a file to an iOS device can be achieved by downloading the file, and then uploading it in the same Automate session. Check out the Upload files downloaded in the same automate session section for more information

Upload preloaded files

BrowserStack remote instances include preloaded media files for desktop and mobile platforms, which you can use to test the file upload feature. It eliminates the need to upload a file from your local machine.

Windows 11, 10, 8.1, 8, 7

In the below remote file paths there are two \, the first \ is used as an escape character
*Video*
C:\\Users\\hello\\Documents\\video\\saper.avi
C:\\Users\\hello\\Documents\\video\\sample_mpeg4.mp4
C:\\Users\\hello\\Documents\\video\\sample_iTunes.mov
C:\\Users\\hello\\Documents\\video\\sample_mpeg2.m2v

*Images*
C:\\Users\\hello\\Documents\\images\\wallpaper1.jpg
C:\\Users\\hello\\Documents\\images\\icon.png
C:\\Users\\hello\\Documents\\images\\cartoon-animation.gif

*Documents*
C:\\Users\\hello\\Documents\\documents\\xls-sample1.xls
C:\\Users\\hello\\Documents\\documents\\text-sample1.txt
C:\\Users\\hello\\Documents\\documents\\pdf-sample1.pdf
C:\\Users\\hello\\Documents\\documents\\doc-sample1.docx

*Audio*
C:\\Users\\hello\\Documents\\audio\\first_noel.mp3
C:\\Users\\hello\\Documents\\audio\\BachCPE_SonataAmin_1.wma
C:\\Users\\hello\\Documents\\audio\\250Hz_44100Hz_16bit_05sec.wav

*Zip files*
C:\\Users\\hello\\Documents\\4KBzipFile.zip
C:\\Users\\hello\\Documents\\1MBzipFile.zip

Windows XP

C:\\Documents\ and\ Settings\\hello\\url.txt
*Video*
/Users/test1/Documents/video/saper.avi
/Users/test1/Documents/video/sample_mpeg4.mp4
/Users/test1/Documents/video/sample_iTunes.mov
/Users/test1/Documents/video/sample_mpeg2.m2v

*Images*
/Users/test1/Documents/images/wallpaper1.jpg
/Users/test1/Documents/images/icon.png
/Users/test1/Documents/images/cartoon-animation.gif

*Documents*
/Users/test1/Documents/documents/xls-sample1.xls
/Users/test1/Documents/documents/text-sample1.txt
/Users/test1/Documents/documents/pdf-sample1.pdf
/Users/test1/Documents/documents/doc-sample1.docx

*Audio*
/Users/test1/Documents/audio/first_noel.mp3
/Users/test1/Documents/audio/BachCPE_SonataAmin_1.wma
/Users/test1/Documents/audio/250Hz_44100Hz_16bit_05sec.wav

*Zip files*
/Users/test1/Documents/4KBzipFile.zip
/Users/test1/Documents/1MBzipFile.zip

Uploading preloaded files in Android is not currently supported however, you can upload the file from your machine to the web application using the pushFile() method as shown in the Upload files from your machine section.

Uploading preloaded files in iOS can be implemented using the following iOS snippets.

Use the preloaded file path locations in the following code snippet and test the file upload scenario for different desktop and mobile platforms.

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.LocalFileDetector;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class JavaSample {

  public static final String AUTOMATE_USERNAME = "YOUR_USERNAME";
  public static final String AUTOMATE_KEY = "YOUR_ACCESS_KEY";
  public static final String URL = "https://" + AUTOMATE_USERNAME + ":" + AUTOMATE_KEY + "@hub-cloud.browserstack.com/wd/hub";

  public static void main(String[] args) throws Exception {
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability("browserName", "IE");
    capabilities.setCapability("browserVersion", "11.0");
    HashMap<String, Object> browserstackOptions = new HashMap<String, Object>();
    browserstackOptions.put("os", "Windows");
    browserstackOptions.put("osVersion", "10");
    browserstackOptions.put("projectName", "Sample Test");
    browserstackOptions.put("buildName", "Sample_test");
    capabilities.setCapability("bstack:options", browserstackOptions);

    RemoteWebDriver driver = new RemoteWebDriver(new URL(URL), caps);
    driver.setFileDetector(new LocalFileDetector());
    driver.get("http://www.fileconvoy.com/");
    driver.findElement(By.id("upfile_0")).sendKeys("C:\\Users\\hello\\Documents\\audio\\first_noel.mp3"); //File path in remote machine
    driver.findElement(By.id("readTermsOfUse")).click();
    driver.findElement(By.name("upload_button")).submit();
    JavascriptExecutor jse = (JavascriptExecutor)driver;
    try {
    	WebDriverWait wait = new WebDriverWait(driver, 5);
    	wait.until(ExpectedConditions.presenceOfElementLocated(By.id("TopMessage")));
    	if(driver.findElementById("TopMessage").getText().contains("successfully uploaded")) {
    		jse.executeScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\": \"passed\", \"reason\": \"File uploaded successfully\"}}");
    	} else {
    		jse.executeScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\": \"failed\", \"reason\": \"File upload failed\"}}");
    	}
    }
    catch(Exception e) {
    	jse.executeScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\": \"failed\", \"reason\": \"File could not be uploaded in 5 seconds\"}}");
    }
    driver.quit();
  }
}
const webdriver = require("selenium-webdriver");
const remote = require("selenium-webdriver/remote");

// Input capabilities
var capabilities = {
	'bstack:options' : {
		"os" : "Windows",
		"osVersion" : "10",
		"projectName" : "Sample Test",
		"buildName" : "Sample_test",
		"userName" : "YOUR_USERNAME",
		"accessKey" : "YOUR_ACCESS_KEY",
	},
	"browserName" : "IE",
	"browserVersion" : "11.0",
}

let driver = new webdriver.Builder()
    .usingServer('https://hub-cloud.browserstack.com/wd/hub')
    .withCapabilities(capabilities)
    .build();

//This will detect your local file
driver.setFileDetector(new remote.FileDetector());

(async () => {
  await driver.get("http://www.fileconvoy.com");

  const filePathElement = await driver.findElement(webdriver.By.id("upfile_0"));
  await filePathElement.sendKeys("C:\\Users\\hello\\Documents\\audio\\first_noel.mp3");

  await (await driver.findElement(webdriver.By.id("readTermsOfUse"))).click();
  await (await driver.findElement(webdriver.By.name("upload_button"))).click();
  try {
    await driver.wait(webdriver.until.elementIsVisible((await driver.findElement(webdriver.By.id('TopMessage')))), 5000);
    if((await driver.findElement(webdriver.By.id('TopMessage')).getText()).includes('successfully uploaded')) {
      await driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "File upload successful"}}');
    } else {
      await driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File upload failed"}}');
    }
    } catch (e) {
    await driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File could not be uploaded in time"}}');
    }
  await driver.quit();
})();
using System;
using OpenQA.Selenium;
using OpenQA.Selenium.Remote;

namespace SeleniumTest
{
  class Program
  {
    static void Main(string[] args)
    {
      IWebDriver driver;
      InternetExplorerOptions capabilities = new InternetExplorerOptions();
      capabilities.BrowserVersion = "11.0";
      Dictionary<string, object> browserstackOptions = new Dictionary<string, object>();
      browserstackOptions.Add("os", "Windows");
      browserstackOptions.Add("osVersion", "10");
      browserstackOptions.Add("projectName", "Sample Test");
      browserstackOptions.Add("buildName", "Sample_test");
      browserstackOptions.Add("userName", "YOUR_USERNAME");
      browserstackOptions.Add("accessKey", "YOUR_ACCESS_KEY");
      browserstackOptions.Add("browserName", "IE");
      capabilities.AddAdditionalOption("bstack:options", browserstackOptions);

      driver = new RemoteWebDriver(
        new Uri("http://hub.browserstack.com/wd/hub/"), capabilities
      );
      driver.Navigate().GoToUrl("http://www.fileconvoy.com");
      IWebElement uploadFile = driver.FindElement(By.Id("upfile_0"));
      Console.WriteLine(driver.Title);
      String path = "C:\\Users\\hello\\Documents\\audio\\first_noel.mp3";   //File path in remote machine
      LocalFileDetector detector = new LocalFileDetector();
      var allowsDetection = driver as IAllowsFileDetection;
      if (allowsDetection != null)
      {
        allowsDetection.FileDetector = new LocalFileDetector();
      }
      uploadFile.SendKeys(path);
      driver.FindElement(By.Id("readTermsOfUse")).Click();
      driver.FindElement(By.Id("upload_button")).Click();
      driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
      if (driver.FindElement(By.CssSelector("#TopMessage")).Text.Contains("successfully uploaded"))
      {
        ((IJavaScriptExecutor)driver).ExecuteScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\":\"passed\", \"reason\": \"File uploaded successfully!\"}}");
      }
      else
      {
        ((IJavaScriptExecutor)driver).ExecuteScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\":\"failed\", \"reason\": \"File upload failed!\"}}");
      }
      driver.Quit();
    }
  }
}
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait

desired_cap = {
	'bstack:options' : {
		"os" : "Windows",
		"osVersion" : "10",
		"projectName" : "Sample Test",
		"buildName" : "Sample_test",
	},
	"browserName" : "IE",
	"browserVersion" : "11.0",
}


options.set_capability('bstack:options', desired_cap)
driver = webdriver.Remote(
    command_executor='https://hub-cloud.browserstack.com/wd/hub',
    options=options)
driver.get('http://www.fileconvoy.com')
driver.find_element_by_id('upfile_0').send_keys('C:\\Users\\hello\\Documents\\audio\\first_noel.mp3')  #File path in remote machine
driver.find_element_by_id('readTermsOfUse').click()
driver.find_element_by_name('upload_button').submit()
try:
    WebDriverWait(driver, 5).until(lambda x: x.find_element_by_id('TopMessage'))
    if(driver.find_element_by_id('TopMessage').text == "Your file(s) have been successfully uploaded."):
        # Setting the status of test as 'passed' or 'failed' based on the condition; if title of the web page starts with 'BrowserStack'
        driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed", "reason": "File uploaded!"}}')
    else:
        driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed", "reason": "File upload failed"}}')
except TimeoutException:
    driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed", "reason": "File failed to upload in 5 seconds"}}')
driver.quit()
require 'rubygems'
require 'selenium-webdriver'

# Input capabilities
capabilities = {
	'bstack:options' => {
		"os" => "Windows",
		"osVersion" => "10",
		"projectName" => "Sample Test",
		"buildName" => "Sample_test",
		"javascriptEnabled" => "true"
	},
	"browserName" => "IE",
	"browserVersion" => "11.0",
}

driver = Selenium::WebDriver.for(
    :remote,
    :url => "https://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub",
    :capabilities => capabilities
)
driver.file_detector = lambda do |args|
  str = args.first.to_s
  str if File.exist?(str)
end
driver.navigate.to "http://www.fileconvoy.com"
driver.find_element(:id, "upfile_0").send_keys("C:\\Users\\hello\\Documents\\audio\\first_noel.mp3")  #File path in remote machine
driver.execute_script('document.getElementById("readTermsOfUse").click();')
driver.find_element(:name, "upload_button").submit
sleep(5)
driver.quit
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.LocalFileDetector;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class JavaSample {

  public static final String AUTOMATE_USERNAME = "YOUR_USERNAME";
  public static final String AUTOMATE_KEY = "YOUR_ACCESS_KEY";
  public static final String URL = "https://" + AUTOMATE_USERNAME + ":" + AUTOMATE_KEY + "@hub-cloud.browserstack.com/wd/hub";

  public static void main(String[] args) throws Exception {

    DesiredCapabilities caps = new DesiredCapabilities();
    caps.setCapability("browser", "internet explorer");
    caps.setCapability("os", "windows");
    caps.setCapability("browser_version", "11.0");
    caps.setCapability("os_version", "10");
    caps.setCapability("browserstack.sendKeys", "true");
    caps.setCapability("browserstack.debug", "true");
    caps.setCapability("name", "Bstack-[Java] Sample Test");

    RemoteWebDriver driver = new RemoteWebDriver(new URL(URL), caps);
    driver.setFileDetector(new LocalFileDetector());
    driver.get("http://www.fileconvoy.com/");
    driver.findElement(By.id("upfile_0")).sendKeys("C:\\Users\\hello\\Documents\\audio\\first_noel.mp3"); //File path in remote machine
    driver.findElement(By.id("readTermsOfUse")).click();
    driver.findElement(By.name("upload_button")).submit();
    JavascriptExecutor jse = (JavascriptExecutor)driver;
    try {
    	WebDriverWait wait = new WebDriverWait(driver, 5);
    	wait.until(ExpectedConditions.presenceOfElementLocated(By.id("TopMessage")));
    	if(driver.findElementById("TopMessage").getText().contains("successfully uploaded")) {
    		jse.executeScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\": \"passed\", \"reason\": \"File uploaded successfully\"}}");
    	} else {
    		jse.executeScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\": \"failed\", \"reason\": \"File upload failed\"}}");
    	}
    }
    catch(Exception e) {
    	jse.executeScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\": \"failed\", \"reason\": \"File could not be uploaded in 5 seconds\"}}");
    }
    driver.quit();
  }
}
const webdriver = require("selenium-webdriver");
const remote = require("selenium-webdriver/remote");

// Input capabilities
const capabilities = {
  "browserName": "Internet Explorer",
  "browser_version": "11.0",
  "os": "Windows",
  "os_version": "10",
  "name": "Bstack-[NodeJS] Upload Test",
  "browserstack.sendKeys": "true",
  "browserstack.debug": "true",
  "browserstack.user": "YOUR_USERNAME",
  "browserstack.key": "YOUR_ACCESS_KEY"
};

const driver = new webdriver.Builder()
  .usingServer("https://hub-cloud.browserstack.com/wd/hub")
  .withCapabilities(capabilities)
  .build();

//This will detect your local file
driver.setFileDetector(new remote.FileDetector());

(async () => {
  await driver.get("http://www.fileconvoy.com");

  const filePathElement = await driver.findElement(webdriver.By.id("upfile_0"));
  await filePathElement.sendKeys("C:\\Users\\hello\\Documents\\audio\\first_noel.mp3");

  await (await driver.findElement(webdriver.By.id("readTermsOfUse"))).click();
  await (await driver.findElement(webdriver.By.name("upload_button"))).click();
  try {
    await driver.wait(webdriver.until.elementIsVisible((await driver.findElement(webdriver.By.id('TopMessage')))), 5000);
    if((await driver.findElement(webdriver.By.id('TopMessage')).getText()).includes('successfully uploaded')) {
      await driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "File upload successful"}}');
    } else {
      await driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File upload failed"}}');
    }
    } catch (e) {
    await driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File could not be uploaded in time"}}');
    }
  await driver.quit();
})();
using System;
using OpenQA.Selenium;
using OpenQA.Selenium.Remote;

namespace SeleniumTest
{
  class Program
  {
    static void Main(string[] args)
    {
      IWebDriver driver;
      OpenQA.Selenium.IE.InternetExplorerOptions capability = new OpenQA.Selenium.IE.InternetExplorerOptions();
      capability.AddAdditionalCapability("browser", "IE", true);
      capability.AddAdditionalCapability("browser_version", "11", true);
      capability.AddAdditionalCapability("os", "Windows", true);
      capability.AddAdditionalCapability("os_version", "10", true);
      capability.AddAdditionalCapability("browserstack.sendKeys", "true", true);
      capability.AddAdditionalCapability("browserstack.debug", "true", true);
      capability.AddAdditionalCapability("browserstack.user", "YOUR_USERNAME", true);
      capability.AddAdditionalCapability("browserstack.key", "YOUR_ACCESS_KEY", true);
      capability.AddAdditionalCapability("name", "Bstack-[C_sharp] Sample Test", true);

      driver = new RemoteWebDriver(
        new Uri("http://hub-cloud.browserstack.com/wd/hub/"), capability
      );
      driver.Navigate().GoToUrl("http://www.fileconvoy.com");
      IWebElement uploadFile = driver.FindElement(By.Id("upfile_0"));
      Console.WriteLine(driver.Title);
      String path = "C:\\Users\\hello\\Documents\\audio\\first_noel.mp3";   //File path in remote machine
      LocalFileDetector detector = new LocalFileDetector();
      var allowsDetection = driver as IAllowsFileDetection;
      if (allowsDetection != null)
      {
        allowsDetection.FileDetector = new LocalFileDetector();
      }
      uploadFile.SendKeys(path);
      driver.FindElement(By.Id("readTermsOfUse")).Click();
      driver.FindElement(By.Id("upload_button")).Click();
      driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
      if (driver.FindElement(By.CssSelector("#TopMessage")).Text.Contains("successfully uploaded"))
      {
        ((IJavaScriptExecutor)driver).ExecuteScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\":\"passed\", \"reason\": \"File uploaded successfully!\"}}");
      }
      else
      {
        ((IJavaScriptExecutor)driver).ExecuteScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\":\"failed\", \"reason\": \"File upload failed!\"}}");
      }
      driver.Quit();
    }
  }
}
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait

desired_cap = {
 'browser': 'Internet Explorer',
 'browser_version': '11.0',
 'os': 'Windows',
 'os_version': '10',
 'browserstack.sendKeys': 'true',
 'browserstack.debug': 'true',
 'name': 'Bstack-[Python] Sample Test'
}

driver = webdriver.Remote(
    command_executor='http://YOUR_USERNAME:YOUR_ACCESS_KEY@hub.browserstack.com/wd/hub',
    desired_capabilities=desired_cap)
driver.get('http://www.fileconvoy.com')
driver.find_element_by_id('upfile_0').send_keys('C:\\Users\\hello\\Documents\\audio\\first_noel.mp3')  #File path in remote machine
driver.find_element_by_id('readTermsOfUse').click()
driver.find_element_by_name('upload_button').submit()
try:
    WebDriverWait(driver, 5).until(lambda x: x.find_element_by_id('TopMessage'))
    if(driver.find_element_by_id('TopMessage').text == "Your file(s) have been successfully uploaded."):
        # Setting the status of test as 'passed' or 'failed' based on the condition; if title of the web page starts with 'BrowserStack'
        driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed", "reason": "File uploaded!"}}')
    else:
        driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed", "reason": "File upload failed"}}')
except TimeoutException:
    driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed", "reason": "File failed to upload in 5 seconds"}}')
driver.quit()
require 'rubygems'
require 'selenium-webdriver'

# Input capabilities
caps = Selenium::WebDriver::Remote::Capabilities.new
caps['browser'] = 'Internet Explorer'
caps['browser_version'] = '11.0'
caps['os'] = 'Windows'
caps['os_version'] = '10'
caps['name'] = 'Bstack-[Ruby] Sample Test'
caps['browserstack.sendKeys'] = 'true'
caps['browserstack.debug'] = 'true'
caps["javascriptEnabled"]='true' #Enabling the javascriptEnabled capability to execute javascript in the test script

driver = Selenium::WebDriver.for(:remote,
  :url => "http://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub",
  :desired_capabilities => caps)
driver.file_detector = lambda do |args|
  str = args.first.to_s
  str if File.exist?(str)
end
driver.navigate.to "http://www.fileconvoy.com"
driver.find_element(:id, "upfile_0").send_keys("C:\\Users\\hello\\Documents\\audio\\first_noel.mp3")  #File path in remote machine
driver.execute_script('document.getElementById("readTermsOfUse").click();')
driver.find_element(:name, "upload_button").submit
sleep(5)
driver.quit

Test file upload functionality in the different browsers including Chrome, Firefox, Edge, and Safari.

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.LocalFileDetector;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.net.URL;

public class JavaSample {

  public static final String AUTOMATE_USERNAME = "YOUR_USERNAME";
  public static final String AUTOMATE_KEY = "YOUR_ACCESS_KEY";
  public static final String URL = "https://" + AUTOMATE_USERNAME + ":" + AUTOMATE_KEY + "@hub-cloud.browserstack.com/wd/hub";

  public static void main(String[] args) throws Exception {

    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability("browserName", "Chrome");
    capabilities.setCapability("browserVersion", "latest");
    HashMap<String, Object> browserstackOptions = new HashMap<String, Object>();
    browserstackOptions.put("os", "Windows");
    browserstackOptions.put("osVersion", "10");
    browserstackOptions.put("projectName", "Sample Test");
    browserstackOptions.put("buildName", "Sample Test");
    capabilities.setCapability("bstack:options", browserstackOptions);

    RemoteWebDriver driver = new RemoteWebDriver(new URL(URL), caps);
    driver.setFileDetector(new LocalFileDetector());
    driver.get("http://www.fileconvoy.com/");
    driver.findElement(By.id("upfile_0")).sendKeys("C:\\Users\\hello\\Documents\\images\\wallpaper1.jpg");  //File path in remote machine
    driver.findElement(By.id("readTermsOfUse")).click();
    driver.findElement(By.name("upload_button")).submit();
    JavascriptExecutor jse = (JavascriptExecutor)driver;
    try {
    	WebDriverWait wait = new WebDriverWait(driver, 5);
    	wait.until(ExpectedConditions.presenceOfElementLocated(By.id("TopMessage")));
    	if(driver.findElementById("TopMessage").getText().contains("successfully uploaded")) {
    		jse.executeScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\": \"passed\", \"reason\": \"File uploaded successfully\"}}");
    	} else {
    		jse.executeScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\": \"failed\", \"reason\": \"File upload failed\"}}");
    	}
    }
    catch(Exception e) {
    	jse.executeScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\": \"failed\", \"reason\": \"File could not be uploaded in 5 seconds\"}}");
    }
    driver.quit();
  }
}
const webdriver = require('selenium-webdriver');
const fs = require('fs');
const remote = require('selenium-webdriver/remote');

// Input capabilities
var capabilities = {
	'bstack:options' : {
		"os" : "Windows",
		"osVersion" : "10",
		"projectName" : "Sample Test",
		"buildName" : "Sample_test",
	},
	"browserName" : "Chrome",
	"browserVersion" : "latest",
}

async function runTestWithCaps () {
  let driver = new webdriver.Builder()
    .usingServer('http://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub')
    .withCapabilities(capabilities)
    .build();
  //This will detect your local file
  await driver.setFileDetector(new remote.FileDetector);  
  await driver.get('http://www.fileconvoy.com/');
  await driver.findElement(webdriver.By.id('upfile_0')).sendKeys('/Users/test1/Documents/video/saper.avi');  // The file path in remote Mac machine is given here. See the sample file paths for different remote machines in the documentation page
  await driver.findElement(webdriver.By.id('readTermsOfUse')).click();
  await driver.findElement(webdriver.By.id('upload_button')).click();
  await driver.wait(webdriver.until.elementLocated(webdriver.By.id('TopMessage')), 5000);
  if((await driver.findElement(webdriver.By.id('TopMessage')).getText()).includes('successfully uploaded')) {
    await driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "File upload successful"}}');
  } else {
    await driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File upload failed"}}');
  }
  await driver.quit();
}
runTestWithCaps(); 
using System;
using OpenQA.Selenium;
using OpenQA.Selenium.Remote;

namespace SeleniumTest
{
    class Program
    {
        static void Main(string[] args)
        {
            IWebDriver driver;
            ChromeOptions capabilities = new ChromeOptions();
            capabilities.BrowserVersion = "latest";
            Dictionary<string, object> browserstackOptions = new Dictionary<string, object>();
            browserstackOptions.Add("os", "Windows");
            browserstackOptions.Add("osVersion", "10");
            browserstackOptions.Add("projectName", "Sample Test");
            browserstackOptions.Add("buildName", "Sample_test");
            browserstackOptions.Add("userName", "YOUR_USERNAME");
            browserstackOptions.Add("accessKey", "YOUR_ACCESS_KEY");
            browserstackOptions.Add("browserName", "Chrome");
            capabilities.AddAdditionalOption("bstack:options", browserstackOptions);

            driver = new RemoteWebDriver(
              new Uri("http://hub-cloud.browserstack.com/wd/hub/"), capability
            );
            driver.Navigate().GoToUrl("http://www.fileconvoy.com");
            IWebElement uploadFile = driver.FindElement(By.Id("upfile_0"));
            Console.WriteLine(driver.Title);
            String path = "C:\\Users\\hello\\Documents\\images\\wallpaper1.jpg";   //File path in remote machine
            uploadFile.SendKeys(path);
            driver.FindElement(By.Id("readTermsOfUse")).Click();
            driver.FindElement(By.Id("upload_button")).Click();
            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
            String result = driver.FindElement(By.CssSelector("#TopMessage")).Text;
            if(result.Contains("successfully uploaded"))
            {
                ((IJavaScriptExecutor)driver).ExecuteScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\":\"passed\", \"reason\": \"File uploaded successfully!\"}}");
            }
            else
            {
                ((IJavaScriptExecutor)driver).ExecuteScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\":\"failed\", \"reason\": \"File upload failed!\"}}");
            }
            driver.Quit();
        }
    }
}
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait

desired_cap = {
	'bstack:options' : {
		"os" : "Windows",
		"osVersion" : "10",
		"projectName" : "Sample Test",
		"buildName" : "Sample_test",
	},
	"browserName" : "Chrome",
	"browserVersion" : "latest",
}

driver = webdriver.Remote(
    command_executor='http://YOUR_USERNAME:YOUR_ACCESS_KEY@hub.browserstack.com/wd/hub',
    desired_capabilities=desired_cap)
driver.get('http://www.fileconvoy.com')
driver.find_element_by_id('upfile_0').send_keys('C:\\Users\\hello\\Documents\\images\\wallpaper1.jpg')  #File path in remote machine
driver.find_element_by_id('readTermsOfUse').click()
driver.find_element_by_name('upload_button').submit()
try:
    WebDriverWait(driver, 5).until(lambda x: x.find_element_by_id('TopMessage'))
    if(driver.find_element_by_id('TopMessage').text == "Your file(s) have been successfully uploaded."):
        # Setting the status of test as 'passed' or 'failed' based on the condition; if title of the web page starts with 'BrowserStack'
        driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed", "reason": "File uploaded!"}}')
    else:
        driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed", "reason": "File upload failed"}}')
except TimeoutException:
    driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed", "reason": "File failed to upload in 5 seconds"}}')
driver.quit()
require 'rubygems'
require 'selenium-webdriver'

# Input capabilities
capabilities = {
	'bstack:options' => {
		"os" => "Windows",
		"osVersion" => "10",
		"projectName" => "Sample Test",
		"buildName" => "Sample_test",
	},
	"browserName" => "Chrome",
	"browserVersion" => "latest",
}

driver = Selenium::WebDriver.for(:remote,
  :url => "http://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub",
  :desired_capabilities => caps)
driver.file_detector = lambda do |args|
  str = args.first.to_s
  str if File.exist?(str)
end
driver.navigate.to "http://www.fileconvoy.com"
driver.find_element(:id, "upfile_0").send_keys("C:\\Users\\hello\\Documents\\images\\wallpaper1.jpg"); #File path in remote machine
driver.find_element(:id, "readTermsOfUse").click;
driver.find_element(:name, "upload_button").submit;
sleep(5)
driver.quit
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.LocalFileDetector;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.net.URL;

public class JavaSample {

  public static final String AUTOMATE_USERNAME = "YOUR_USERNAME";
  public static final String AUTOMATE_KEY = "YOUR_ACCESS_KEY";
  public static final String URL = "https://" + AUTOMATE_USERNAME + ":" + AUTOMATE_KEY + "@hub-cloud.browserstack.com/wd/hub";

  public static void main(String[] args) throws Exception {

    DesiredCapabilities caps = new DesiredCapabilities();
    caps.setCapability("browser", "chrome");
    caps.setCapability("os", "windows");
    caps.setCapability("browser_version", "latest");
    caps.setCapability("os_version", "10");
    caps.setCapability("name", "Bstack-[Java] Sample Test");

    RemoteWebDriver driver = new RemoteWebDriver(new URL(URL), caps);
    driver.setFileDetector(new LocalFileDetector());
    driver.get("http://www.fileconvoy.com/");
    driver.findElement(By.id("upfile_0")).sendKeys("C:\\Users\\hello\\Documents\\images\\wallpaper1.jpg");  //File path in remote machine
    driver.findElement(By.id("readTermsOfUse")).click();
    driver.findElement(By.name("upload_button")).submit();
    JavascriptExecutor jse = (JavascriptExecutor)driver;
    try {
    	WebDriverWait wait = new WebDriverWait(driver, 5);
    	wait.until(ExpectedConditions.presenceOfElementLocated(By.id("TopMessage")));
    	if(driver.findElementById("TopMessage").getText().contains("successfully uploaded")) {
    		jse.executeScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\": \"passed\", \"reason\": \"File uploaded successfully\"}}");
    	} else {
    		jse.executeScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\": \"failed\", \"reason\": \"File upload failed\"}}");
    	}
    }
    catch(Exception e) {
    	jse.executeScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\": \"failed\", \"reason\": \"File could not be uploaded in 5 seconds\"}}");
    }
    driver.quit();
  }
}
const webdriver = require('selenium-webdriver');
const fs = require('fs');
const remote = require('selenium-webdriver/remote');

// Input capabilities
const capabilities = {
 'browserName' : 'safari',
 'browser_version' : 'latest',
 'os' : 'OS X',
 'os_version' : 'Big Sur',
 'name': 'Safari test file upload', // test name
 'build': 'File upload testing' // Build name
}
async function runTestWithCaps () {
  let driver = new webdriver.Builder()
    .usingServer('http://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub')
    .withCapabilities(capabilities)
    .build();
  //This will detect your local file
  await driver.setFileDetector(new remote.FileDetector);  
  await driver.get('http://www.fileconvoy.com/');
  await driver.findElement(webdriver.By.id('upfile_0')).sendKeys('/Users/test1/Documents/video/saper.avi');  // The file path in remote Mac machine is given here. See the sample file paths for different remote machines in the documentation page
  await driver.findElement(webdriver.By.id('readTermsOfUse')).click();
  await driver.findElement(webdriver.By.id('upload_button')).click();
  await driver.wait(webdriver.until.elementLocated(webdriver.By.id('TopMessage')), 5000);
  if((await driver.findElement(webdriver.By.id('TopMessage')).getText()).includes('successfully uploaded')) {
    await driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "File upload successful"}}');
  } else {
    await driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File upload failed"}}');
  }
  await driver.quit();
}
runTestWithCaps(); 
using System;
using OpenQA.Selenium;
using OpenQA.Selenium.Remote;

namespace SeleniumTest
{
    class Program
    {
        static void Main(string[] args)
        {
            IWebDriver driver;
            OpenQA.Selenium.Chrome.ChromeOptions capability = new OpenQA.Selenium.Chrome.ChromeOptions();
            capability.AddAdditionalCapability("browser", "Chrome", true);
            capability.AddAdditionalCapability("browser_version", "latest", true);
            capability.AddAdditionalCapability("os", "Windows", true);
            capability.AddAdditionalCapability("os_version", "10", true);
            capability.AddAdditionalCapability("browserstack.user", "YOUR_USERNAME", true);
            capability.AddAdditionalCapability("browserstack.key", "YOUR_ACCESS_KEY", true);
            capability.AddAdditionalCapability("name", "Bstack-[C_sharp] Sample Test", true);

            driver = new RemoteWebDriver(
              new Uri("http://hub-cloud.browserstack.com/wd/hub/"), capability
            );
            driver.Navigate().GoToUrl("http://www.fileconvoy.com");
            IWebElement uploadFile = driver.FindElement(By.Id("upfile_0"));
            Console.WriteLine(driver.Title);
            String path = "C:\\Users\\hello\\Documents\\images\\wallpaper1.jpg";   //File path in remote machine
            uploadFile.SendKeys(path);
            driver.FindElement(By.Id("readTermsOfUse")).Click();
            driver.FindElement(By.Id("upload_button")).Click();
            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
            String result = driver.FindElement(By.CssSelector("#TopMessage")).Text;
            if(result.Contains("successfully uploaded"))
            {
                ((IJavaScriptExecutor)driver).ExecuteScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\":\"passed\", \"reason\": \"File uploaded successfully!\"}}");
            }
            else
            {
                ((IJavaScriptExecutor)driver).ExecuteScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\":\"failed\", \"reason\": \"File upload failed!\"}}");
            }
            driver.Quit();
        }
    }
}
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait

desired_cap = {
 'browser': 'Chrome',
 'browser_version': '75.0',
 'os': 'Windows',
 'os_version': '10',
 'name': 'Bstack-[Python] Sample Test'
}

driver = webdriver.Remote(
    command_executor='http://YOUR_USERNAME:YOUR_ACCESS_KEY@hub.browserstack.com/wd/hub',
    desired_capabilities=desired_cap)
driver.get('http://www.fileconvoy.com')
driver.find_element_by_id('upfile_0').send_keys('C:\\Users\\hello\\Documents\\images\\wallpaper1.jpg')  #File path in remote machine
driver.find_element_by_id('readTermsOfUse').click()
driver.find_element_by_name('upload_button').submit()
try:
    WebDriverWait(driver, 5).until(lambda x: x.find_element_by_id('TopMessage'))
    if(driver.find_element_by_id('TopMessage').text == "Your file(s) have been successfully uploaded."):
        # Setting the status of test as 'passed' or 'failed' based on the condition; if title of the web page starts with 'BrowserStack'
        driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed", "reason": "File uploaded!"}}')
    else:
        driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed", "reason": "File upload failed"}}')
except TimeoutException:
    driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed", "reason": "File failed to upload in 5 seconds"}}')
driver.quit()
require 'rubygems'
require 'selenium-webdriver'

# Input capabilities
caps = Selenium::WebDriver::Remote::Capabilities.new
caps['browser'] = 'Chrome'
caps['browser_version'] = '75.0'
caps['os'] = 'Windows'
caps['os_version'] = '10'
caps['name'] = 'Bstack-[Ruby] Sample Test'


driver = Selenium::WebDriver.for(:remote,
  :url => "http://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub",
  :desired_capabilities => caps)
driver.file_detector = lambda do |args|
  str = args.first.to_s
  str if File.exist?(str)
end
driver.navigate.to "http://www.fileconvoy.com"
driver.find_element(:id, "upfile_0").send_keys("C:\\Users\\hello\\Documents\\images\\wallpaper1.jpg"); #File path in remote machine
driver.find_element(:id, "readTermsOfUse").click;
driver.find_element(:name, "upload_button").submit;
sleep(5)
driver.quit
import java.net.URL;
import java.util.List;
import java.util.Set;
import java.net.MalformedURLException;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import io.appium.java_client.MobileBy;
import io.appium.java_client.ios.IOSDriver;
import io.appium.java_client.ios.IOSElement;
import org.apache.commons.lang3.*;
public class Upload extends Thread{
   public static String userName = "YOUR_USERNAME";
   public static String accessKey = "YOUR_ACCESS_KEY";
   public static void main(String args[]) throws MalformedURLException, InterruptedException {
    DesiredCapabilities capabilities = new DesiredCapabilities();
    HashMap<String, Object> browserstackOptions = new HashMap<String, Object>();
    browserstackOptions.put("osVersion", "14");
    browserstackOptions.put("deviceName", "iPhone 12");
    browserstackOptions.put("realMobile", "true");
    browserstackOptions.put("projectName", "Sample Test");
    browserstackOptions.put("buildName", "Sample_test");
    browserstackOptions.put("debug", "true");
    capabilities.setCapability("bstack:options", browserstackOptions);

     IOSDriver<IOSElement> driver = new IOSDriver<IOSElement>(new URL("https://"+userName+":"+accessKey+"@hub-cloud.browserstack.com/wd/hub"), caps);
     driver.get("https://the-internet.herokuapp.com/upload");
     Thread.sleep(5000);
     driver.findElement(By.id("file-upload")).click();
     driver.context("NATIVE_APP");
     driver.findElement(By.name("Photo Library")).click();
     Thread.sleep(5000);
     List list = driver.findElements(By.className("XCUIElementTypeImage"));
    ((IOSElement) list.get(0)).click();
     Thread.sleep(5000);
     driver.findElement(By.name("Choose")).click();
     Set<String> contextName = driver.getContextHandles();
     driver.context(contextName.toArray()[1].toString());
     driver.findElement(By.id("file-submit")).click();
     driver.quit();
  }
}
var wd = require('wd');
// Input capabilities
var capabilities = {
	'bstack:options' : {
		"osVersion" : "14",
		"deviceName" : "iPhone 12",
		"realMobile" : "true",
		"projectName" : "Sample Test",
		"buildName" : "Sample_test",
		"debug" : "true",
	},
	"browserName" : "safari",
}

async function runTestWithCaps () {
  let driver = new webdriver.Builder()
    .usingServer('https://hub-cloud.browserstack.com/wd/hub')
    .withCapabilities(capabilities)
    .build();
  await driver.get("https://the-internet.herokuapp.com/upload")
  await new Promise(r => setTimeout(r, 2000));
  element = await driver.waitForElementById('file-upload')
  await element.click()
  await driver.context('NATIVE_APP')
  element = await driver.waitForElementByName('Photo Library')
  await element.click()
  await new Promise(r => setTimeout(r, 2000));
  element = await driver.elementsByClassName('XCUIElementTypeImage')
  await element[0].click()
  await new Promise(r => setTimeout(r, 5000));
  element = await driver.waitForElementByName('Choose')
  await element.click()
  await new Promise(r => setTimeout(r, 10000));
  contexts = await driver.contexts();
  await driver.context(contexts[1])
  element = await driver.waitForElementById("file-submit")
  await element.click()
  await driver.quit();
}
runTestWithCaps();
using System;
using System.Threading;
using OpenQA.Selenium;
using OpenQA.Selenium.Appium;
using OpenQA.Selenium.Appium.iOS;
namespace SampleTests
{
    class UploadFile
    {
        static void Main(string[] args)
        {
            AppiumDriver<IWebElement> driver;
            SafariOptions capabilities = new SafariOptions();
            Dictionary<string, object> browserstackOptions = new Dictionary<string, object>();
            browserstackOptions.Add("osVersion", "14");
            browserstackOptions.Add("deviceName", "iPhone 12");
            browserstackOptions.Add("realMobile", "true");
            browserstackOptions.Add("projectName", "Sample Test");
            browserstackOptions.Add("buildName", "Sample_test");
            browserstackOptions.Add("debug", "true");
            capabilities.AddAdditionalOption("bstack:options", browserstackOptions);
            driver = new IOSDriver<IWebElement>(
              new Uri("https://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub/"), capability
            );
            driver.Navigate().GoToUrl("https://the-internet.herokuapp.com/upload");
            Thread.Sleep(10000);
            driver.FindElementById("file-upload").Click();
            driver.Context = "NATIVE_APP";
            driver.FindElement(By.Name("Photo Library")).Click();
            Thread.Sleep(5000);
            IWebElement element = driver.FindElementsByClassName("XCUIElementTypeImage")[0];
            element.Click();
            driver.FindElementByName("Choose").Click();
            driver.Context = driver.Contexts[1];
            Console.WriteLine(driver.Title);
            driver.FindElementById("file-submit").Click();
            driver.Quit();
        }
    }
}
from appium import webdriver
from appium.webdriver.common.mobileby import MobileBy
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common import action_chains, keys
from time import sleep
from selenium.webdriver.common.by import By
desired_cap = {
	'bstack:options' : {
		"osVersion" : "14",
		"deviceName" : "iPhone 12",
		"realMobile" : "true",
		"projectName" : "Sample Test",
		"buildName" : "Sample_test",
		"debug" : "true",
	},
}

options.set_capability('bstack:options', desired_cap)
driver = webdriver.Remote(
    command_executor='https://hub-cloud.browserstack.com/wd/hub',
    options=options)
driver.get("https://the-internet.herokuapp.com/upload")
sleep(10)
driver.find_element_by_id('file-upload').click()
driver.switch_to.context('NATIVE_APP')
driver.find_element_by_name('Photo Library').click()
sleep(5)
elements = driver.find_elements_by_class_name("XCUIElementTypeImage")
elements[0].click() # 1 represents second element from the list of 9 preloaded images and videos
sleep(5)
driver.find_element_by_name("Choose").click()
sleep(10)
driver.switch_to.context(driver.contexts[1])
driver.find_element_by_id("file-submit").click()
driver.quit()
require 'rubygems'
require 'appium_lib'
# Input capabilities
capabilities = {
	'bstack:options' => {
		"osVersion" => "14",
		"deviceName" => "iPhone 12",
		"realMobile" => "true",
		"projectName" => "Sample Test",
		"buildName" => "Sample_test",
		"debug" => "true",
	},
}

appium_driver = Appium::Driver.new({'caps' => capabilities,'appium_lib' => {:server_url => "https://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub"}}, true)
driver = appium_driver.start_driver
driver.navigate.to "https://the-internet.herokuapp.com/upload"
sleep(5)
driver.find_element(xpath: "//*[@id='file-upload']").click
driver.set_context('NATIVE_APP')
sleep(10)
driver.find_element(name: "Photo Library").click
sleep(5)
elements=driver.find_elements(:class_name,"XCUIElementTypeImage")
elements[0].click
driver.find_element(name: "Choose").click
contexts = driver.available_contexts
driver.set_context contexts[1]
driver.find_element(:id,"file-submit").click()
driver.quit()
import java.net.URL;
import java.util.List;
import java.util.Set;
import java.net.MalformedURLException;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import io.appium.java_client.MobileBy;
import io.appium.java_client.ios.IOSDriver;
import io.appium.java_client.ios.IOSElement;
import org.apache.commons.lang3.*;
public class Upload extends Thread{
   public static String userName = "YOUR_USERNAME";
   public static String accessKey = "YOUR_ACCESS_KEY";
   public static void main(String args[]) throws MalformedURLException, InterruptedException {
     DesiredCapabilities caps = new DesiredCapabilities();
     caps.setCapability("device", "iPhone 12 Pro Max");
     caps.setCapability("os_version", "14");
     caps.setCapability("real_mobile", "true");
     caps.setCapability("project", "My First Project");
     caps.setCapability("build", "My First Build");
     caps.setCapability("name", "Bstack-[Java] Sample Test");
     caps.setCapability("nativeWebTap", "true");
     IOSDriver<IOSElement> driver = new IOSDriver<IOSElement>(new URL("https://"+userName+":"+accessKey+"@hub-cloud.browserstack.com/wd/hub"), caps);
     driver.get("https://the-internet.herokuapp.com/upload");
     Thread.sleep(5000);
     driver.findElement(By.id("file-upload")).click();
     driver.context("NATIVE_APP");
     driver.findElement(By.name("Photo Library")).click();
     Thread.sleep(5000);
     List list = driver.findElements(By.className("XCUIElementTypeImage"));
    ((IOSElement) list.get(0)).click();
     Thread.sleep(5000);
     driver.findElement(By.name("Choose")).click();
     Set<String> contextName = driver.getContextHandles();
     driver.context(contextName.toArray()[1].toString());
     driver.findElement(By.id("file-submit")).click();
     driver.quit();
  }
}
var wd = require('wd');
// Input capabilities
const capabilities = {
 'device' : 'iPhone 12',
 'realMobile' : 'true',
 'os_version' : '14.0',
 'browserName' : 'iPhone',
 'name': 'BStack-[NodeJS] Sample Test',
 'build': 'BStack Build Number 1',
  "nativeWebTap":true
}
async function runTestWithCaps () {
  let driver = wd.promiseRemote("http://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub");
  await driver.init(capabilities);
  await driver.get("https://the-internet.herokuapp.com/upload")
  await new Promise(r => setTimeout(r, 2000));
  element = await driver.waitForElementById('file-upload')
  await element.click()
  await driver.context('NATIVE_APP')
  element = await driver.waitForElementByName('Photo Library')
  await element.click()
  await new Promise(r => setTimeout(r, 2000));
  element = await driver.elementsByClassName('XCUIElementTypeImage')
  await element[0].click()
  await new Promise(r => setTimeout(r, 5000));
  element = await driver.waitForElementByName('Choose')
  await element.click()
  await new Promise(r => setTimeout(r, 10000));
  contexts = await driver.contexts();
  await driver.context(contexts[1])
  element = await driver.waitForElementById("file-submit")
  await element.click()
  await driver.quit();
}
runTestWithCaps();
using System;
using System.Threading;
using OpenQA.Selenium;
using OpenQA.Selenium.Appium;
using OpenQA.Selenium.Appium.iOS;
namespace SampleTests
{
    class UploadFile
    {
        static void Main(string[] args)
        {
            AppiumDriver<IWebElement> driver;
            AppiumOptions capability = new AppiumOptions();
            capability.AddAdditionalCapability("browserName", "iPhone");
            capability.AddAdditionalCapability("device", "iPhone 12");
            capability.AddAdditionalCapability("realMobile", "true");
            capability.AddAdditionalCapability("os_version", "14");
            capability.AddAdditionalCapability("browserstack.debug", "true");
            capability.AddAdditionalCapability("nativeWebTap", "true");
            driver = new IOSDriver<IWebElement>(
              new Uri("https://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub/"), capability
            );
            driver.Navigate().GoToUrl("https://the-internet.herokuapp.com/upload");
            Thread.Sleep(10000);
            driver.FindElementById("file-upload").Click();
            driver.Context = "NATIVE_APP";
            driver.FindElement(By.Name("Photo Library")).Click();
            Thread.Sleep(5000);
            IWebElement element = driver.FindElementsByClassName("XCUIElementTypeImage")[0];
            element.Click();
            driver.FindElementByName("Choose").Click();
            driver.Context = driver.Contexts[1];
            Console.WriteLine(driver.Title);
            driver.FindElementById("file-submit").Click();
            driver.Quit();
        }
    }
}
from appium import webdriver
from appium.webdriver.common.mobileby import MobileBy
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common import action_chains, keys
from time import sleep
from selenium.webdriver.common.by import By
desired_cap = {
        "device": "iPhone 12 Pro max",
        "os_version": "14",
        "real_mobile": "true",
        "browserstack.debug": "true",
        "nativeWebTap":"true"
}
driver = webdriver.Remote(command_executor='http://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub', desired_capabilities=desired_cap)
driver.get("https://the-internet.herokuapp.com/upload")
sleep(10)
driver.find_element_by_id('file-upload').click()
driver.switch_to.context('NATIVE_APP')
driver.find_element_by_name('Photo Library').click()
sleep(5)
elements = driver.find_elements_by_class_name("XCUIElementTypeImage")
elements[0].click() # 1 represents second element from the list of 9 preloaded images and videos
sleep(5)
driver.find_element_by_name("Choose").click()
sleep(10)
driver.switch_to.context(driver.contexts[1])
driver.find_element_by_id("file-submit").click()
driver.quit()
require 'rubygems'
require 'appium_lib'
# Input capabilities
caps = {}
caps['device'] = 'iPhone 12'
caps['os_version'] = '14'
caps['platformName'] = 'iOS'
caps['realMobile'] = 'true'
caps['name'] = 'BStack-[Ruby] Sample Test' # test name
caps['build'] = 'BStack Build Number 1' # CI/CD job or build name
caps['nativeWebTap'] = 'true'
appium_driver = Appium::Driver.new({'caps' => caps,'appium_lib' => {:server_url => "https://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub"}}, true)
driver = appium_driver.start_driver
driver.navigate.to "https://the-internet.herokuapp.com/upload"
sleep(5)
driver.find_element(xpath: "//*[@id='file-upload']").click
driver.set_context('NATIVE_APP')
sleep(10)
driver.find_element(name: "Photo Library").click
sleep(5)
elements=driver.find_elements(:class_name,"XCUIElementTypeImage")
elements[0].click
driver.find_element(name: "Choose").click
contexts = driver.available_contexts
driver.set_context contexts[1]
driver.find_element(:id,"file-submit").click()
driver.quit()
Important: If you are using iOS 15, add the NATIVE_APP context after initiating the web app, and replace the ElementID file-upload with Choose file in the sample script.

Upload files downloaded in the same automate session

BrowserStack remote instances include a specific download folder where any file downloaded from the web in an Automate session is available for your tests. You use this folder location to download a file, and then upload this file.

The file is downloaded in the following locations on the remote BrowserStack instances:

Use the scripts in the upload files from your machine section and change the file path to the following folder location.

C:\Documents and Settings\hello\Downloads

Use the scripts in the upload files from your machine section and change the file path to the following folder location.

C:\Users\hello\Downloads

Use the scripts in the upload files from your machine section and change the file path to the following folder location.

/Users/test1/Downloads

Uploading files that are downloaded in the same Automate session is currently not supported on Android devices. Instead, you can upload the file from your machine to the web application using the pushFile() method. Check out the Upload files from your machine section for more information.

Uploading files that are downloaded in the same automate session can be implemented on iOS devices using the following iOS snippets.

Through your test script, you can send commands to tell the remote browsers to:

  1. Navigate to a URL.
  2. Download a specific file.
  3. Upload the file to the web app under test using LocalFileDetector/pushFile and sendkeys method.
import java.net.URL;
import java.util.List;
import java.util.Set;
import java.net.MalformedURLException;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import io.appium.java_client.MobileBy;
import io.appium.java_client.ios.IOSDriver;
import io.appium.java_client.ios.IOSElement;
import org.apache.commons.lang3.*;
public class Upload extends Thread{
 public static String userName = "YOUR_USERNAME";
 public static String accessKey = "YOUR_ACCESS_KEY";
 public static void main(String args[]) throws MalformedURLException, InterruptedException {
DesiredCapabilities capabilities = new DesiredCapabilities();
HashMap<String, Object> browserstackOptions = new HashMap<String, Object>();
browserstackOptions.put("osVersion", "14");
browserstackOptions.put("deviceName", "iPhone 12");
browserstackOptions.put("realMobile", "true");
browserstackOptions.put("projectName", "Upload Files");
browserstackOptions.put("buildName", "Upload_file");
browserstackOptions.put("debug", "true");
capabilities.setCapability("bstack:options", browserstackOptions);

  IOSDriver<IOSElement> driver = new IOSDriver<IOSElement>(new URL("https://"+userName+":"+accessKey+"@hub-cloud.browserstack.com/wd/hub"), caps);
  driver.get("https://support.staffbase.com/hc/en-us/article_attachments/360009197031/username.csv");
  driver.context("NATIVE_APP");
  IOSElement download = (IOSElement) new WebDriverWait(driver, 30).until(
  ExpectedConditions.elementToBeClickable(MobileBy.name("Download")));
  driver.findElementByName("Download").click();
  Set<String> contextNames = driver.getContextHandles();
  driver.context(contextNames.toArray()[1].toString());
  driver.get("https://the-internet.herokuapp.com/upload");
  Thread.sleep(5000);
  driver.findElement(By.id("file-upload")).click();
  driver.context("NATIVE_APP");
  driver.findElement(By.name("Browse")).click();
  Thread.sleep(5000);
  driver.findElement(By.name("Recents")).click();
  Thread.sleep(5000);
  IOSElement elem=driver.findElement(By.xpath("//XCUIElementTypeCollectionView"));
  List list=elem.findElements(By.xpath("//XCUIElementTypeCell"));
  ((WebElement) list.get(0)).click();
  Thread.sleep(5000);
  Set<String> contextName = driver.getContextHandles();
  driver.context(contextName.toArray()[1].toString());
  driver.findElement(By.id("file-submit")).click();
  driver.quit();
 }
}
var wd = require('wd');
// Input capabilities
var capabilities = {
	'bstack:options' : {
		"osVersion" : "14",
		"deviceName" : "iPhone 12",
		"realMobile" : "true",
		"projectName" : "Upload Files",
		"buildName" : "Upload_file",
		"debug" : "true",
	},
	"browserName" : "safari",
}

async function runTestWithCaps () {
  let driver = new webdriver.Builder()
    .usingServer('https://hub-cloud.browserstack.com/wd/hub')
    .withCapabilities(capabilities)
    .build();
  await driver.get("https://support.staffbase.com/hc/en-us/article_attachments/360009197031/username.csv");
  await new Promise(r => setTimeout(r, 2000));
  await driver.context('NATIVE_APP');
  let element = await driver.waitForElementByName('Download');
  await element.click()
  let contexts = await driver.contexts();
  await driver.context(contexts[1]);
  await new Promise(r => setTimeout(r, 2000));
  await driver.get("https://the-internet.herokuapp.com/upload")
  await new Promise(r => setTimeout(r, 2000));
  element = await driver.waitForElementById('file-upload')
  await element.click()
  await driver.context('NATIVE_APP')
  element = await driver.waitForElementByName('Browse')
  await element.click()
  await new Promise(r => setTimeout(r, 2000));
  element = await driver.waitForElementByName('Recents')
  await element.click()
  element = await driver.waitForElementByXPath('//XCUIElementTypeCollectionView')
  await new Promise(r => setTimeout(r, 2000));
  let elements = await element.elementsByXPath("//XCUIElementTypeCell")
  await elements[0].click()
  contexts = await driver.contexts();
  await driver.context(contexts[1])
  element = await driver.waitForElementById("file-submit")
  await element.click()
  await driver.quit();
}
runTestWithCaps();
using System;
using System.Threading;
using OpenQA.Selenium;
using OpenQA.Selenium.Appium;
using OpenQA.Selenium.Appium.iOS;
namespace SampleTests
{
    class UploadFile
    {
        static void Main(string[] args)
        {
            AppiumDriver<IWebElement> driver;
            SafariOptions capabilities = new SafariOptions();
            Dictionary<string, object> browserstackOptions = new Dictionary<string, object>();
            browserstackOptions.Add("osVersion", "14");
            browserstackOptions.Add("deviceName", "iPhone 12");
            browserstackOptions.Add("realMobile", "true");
            browserstackOptions.Add("projectName", "Upload Files");
            browserstackOptions.Add("buildName", "Upload_file");
            browserstackOptions.Add("debug", "true");
            capabilities.AddAdditionalOption("bstack:options", browserstackOptions);

            driver = new IOSDriver<IWebElement>(
              new Uri("https://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub/"), capability
            );
            driver.Navigate().GoToUrl("https://support.staffbase.com/hc/en-us/article_attachments/360009197031/username.csv");
            driver.Context = "NATIVE_APP";
            driver.FindElement(By.Name("Download")).Click();
            driver.Context = driver.Contexts[1];
            driver.Navigate().GoToUrl("https://the-internet.herokuapp.com/upload");
            Thread.Sleep(10000);
            driver.FindElementById("file-upload").Click();
            driver.Context = "NATIVE_APP";
            driver.FindElement(By.Name("Browse")).Click();
            driver.FindElement(By.Name("Recents")).Click();
            IWebElement element = driver.FindElementByXPath("//XCUIElementTypeCollectionView");
            element.FindElements(By.XPath("//XCUIElementTypeCell"))[0].Click();
            driver.Context = driver.Contexts[1];
            Console.WriteLine(driver.Title);
            driver.FindElementById("file-submit").Click();
            driver.Quit();
        }
    }
}
from appium import webdriver
from appium.webdriver.common.mobileby import MobileBy
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common import action_chains, keys
from time import sleep
from selenium.webdriver.common.by import By
desired_cap = {
	'bstack:options' : {
		"osVersion" : "14",
		"deviceName" : "iPhone 12",
		"realMobile" : "true",
		"projectName" : "Upload Files",
		"buildName" : "Upload_file",
		"debug" : "true",
	},
}

options.set_capability('bstack:options', desired_cap)
driver = webdriver.Remote(
    command_executor='https://hub-cloud.browserstack.com/wd/hub',
    options=options)
# download file
driver.get("https://support.staffbase.com/hc/en-us/article_attachments/360009197031/username.csv")
# accept download
driver.switch_to.context('NATIVE_APP')
driver.find_element_by_name('Download').click()
driver.switch_to.context(driver.contexts[1])
# go to upload url
driver.get("https://the-internet.herokuapp.com/upload")
sleep(10)
driver.find_element_by_id('file-upload').click()
driver.switch_to.context('NATIVE_APP')
driver.find_element_by_name('Browse').click()
driver.find_element_by_name('Recents').click()
element = driver.find_element_by_xpath("//XCUIElementTypeCollectionView")
print(type(element))
element.find_elements_by_xpath("//XCUIElementTypeCell")[0].click()
driver.switch_to.context(driver.contexts[1])
driver.find_element_by_id("file-submit").click()
driver.quit()
require 'rubygems'
require 'appium_lib'
# Input capabilities
capabilities = {
	'bstack:options' => {
		"osVersion" => "14",
		"deviceName" => "iPhone 12",
		"realMobile" => "true",
		"projectName" => "Upload Files",
		"buildName" => "Upload_file",
		"debug" => "true",
	},
}

appium_driver = Appium::Driver.new({'caps' => capabilities,'appium_lib' => {:server_url => "https://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub"}}, true)
driver = appium_driver.start_driver
driver.navigate.to "https://support.staffbase.com/hc/en-us/article_attachments/360009197031/username.csv"
driver.set_context('NATIVE_APP')
driver.find_element(xpath: "//*[@name='Download']").click
contexts = driver.available_contexts
driver.set_context contexts[1]
driver.navigate.to "https://the-internet.herokuapp.com/upload"
sleep(5)
driver.find_element(xpath: "//*[@id='file-upload']").click
driver.set_context('NATIVE_APP')
sleep(10)
driver.find_element(xpath: "//*[@name='Browse']").click
sleep(5)
driver.find_element(xpath: "//*[@name='Recents']").click
element=driver.find_element(:xpath,"//XCUIElementTypeCollectionView")
element.find_elements(xpath: "//XCUIElementTypeCell")[0].click
contexts = driver.available_contexts
driver.set_context contexts[1]
driver.find_element(:id,"file-submit").click()
driver.quit()
import java.net.URL;
import java.util.List;
import java.util.Set;
import java.net.MalformedURLException;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import io.appium.java_client.MobileBy;
import io.appium.java_client.ios.IOSDriver;
import io.appium.java_client.ios.IOSElement;
import org.apache.commons.lang3.*;
public class Upload extends Thread{
 public static String userName = "YOUR_USERNAME";
 public static String accessKey = "YOUR_ACCESS_KEY";
 public static void main(String args[]) throws MalformedURLException, InterruptedException {
  DesiredCapabilities caps = new DesiredCapabilities();
  caps.setCapability("device", "iPhone 12");
  caps.setCapability("os_version", "14");
  caps.setCapability("real_mobile", "true");
  caps.setCapability("project", "My First Project");
  caps.setCapability("build", "My First Build");
  caps.setCapability("name", "Bstack-[Java] Sample Test");
  caps.setCapability("nativeWebTap", "true");
  IOSDriver<IOSElement> driver = new IOSDriver<IOSElement>(new URL("https://"+userName+":"+accessKey+"@hub-cloud.browserstack.com/wd/hub"), caps);
  driver.get("https://support.staffbase.com/hc/en-us/article_attachments/360009197031/username.csv");
  driver.context("NATIVE_APP");
  IOSElement download = (IOSElement) new WebDriverWait(driver, 30).until(
  ExpectedConditions.elementToBeClickable(MobileBy.name("Download")));
  driver.findElementByName("Download").click();
  Set<String> contextNames = driver.getContextHandles();
  driver.context(contextNames.toArray()[1].toString());
  driver.get("https://the-internet.herokuapp.com/upload");
  Thread.sleep(5000);
  driver.findElement(By.id("file-upload")).click();
  driver.context("NATIVE_APP");
  driver.findElement(By.name("Browse")).click();
  Thread.sleep(5000);
  driver.findElement(By.name("Recents")).click();
  Thread.sleep(5000);
  IOSElement elem=driver.findElement(By.xpath("//XCUIElementTypeCollectionView"));
  List list=elem.findElements(By.xpath("//XCUIElementTypeCell"));
  ((WebElement) list.get(0)).click();
  Thread.sleep(5000);
  Set<String> contextName = driver.getContextHandles();
  driver.context(contextName.toArray()[1].toString());
  driver.findElement(By.id("file-submit")).click();
  driver.quit();
 }
}
var wd = require('wd');
// Input capabilities
const capabilities = {
 'device' : 'iPhone 12',
 'realMobile' : 'true',
 'os_version' : '14.0',
 'browserName' : 'iPhone',
 'name': 'BStack-[NodeJS] Sample Test',
 'build': 'BStack Build Number 1',
  "nativeWebTap":true
}
async function runTestWithCaps () {
  let driver = wd.promiseRemote("http://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub");
  await driver.init(capabilities);
  await driver.get("https://support.staffbase.com/hc/en-us/article_attachments/360009197031/username.csv");
  await new Promise(r => setTimeout(r, 2000));
  await driver.context('NATIVE_APP');
  let element = await driver.waitForElementByName('Download');
  await element.click()
  let contexts = await driver.contexts();
  await driver.context(contexts[1]);
  await new Promise(r => setTimeout(r, 2000));
  await driver.get("https://the-internet.herokuapp.com/upload")
  await new Promise(r => setTimeout(r, 2000));
  element = await driver.waitForElementById('file-upload')
  await element.click()
  await driver.context('NATIVE_APP')
  element = await driver.waitForElementByName('Browse')
  await element.click()
  await new Promise(r => setTimeout(r, 2000));
  element = await driver.waitForElementByName('Recents')
  await element.click()
  element = await driver.waitForElementByXPath('//XCUIElementTypeCollectionView')
  await new Promise(r => setTimeout(r, 2000));
  let elements = await element.elementsByXPath("//XCUIElementTypeCell")
  await elements[0].click()
  contexts = await driver.contexts();
  await driver.context(contexts[1])
  element = await driver.waitForElementById("file-submit")
  await element.click()
  await driver.quit();
}
runTestWithCaps();
using System;
using System.Threading;
using OpenQA.Selenium;
using OpenQA.Selenium.Appium;
using OpenQA.Selenium.Appium.iOS;
namespace SampleTests
{
    class UploadFile
    {
        static void Main(string[] args)
        {
            AppiumDriver<IWebElement> driver;
            AppiumOptions capability = new AppiumOptions();
            capability.AddAdditionalCapability("browserName", "iPhone");
            capability.AddAdditionalCapability("device", "iPhone 12");
            capability.AddAdditionalCapability("realMobile", "true");
            capability.AddAdditionalCapability("os_version", "14");
            capability.AddAdditionalCapability("browserstack.debug", "true");
            capability.AddAdditionalCapability("nativeWebTap", "true");
            driver = new IOSDriver<IWebElement>(
              new Uri("https://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub/"), capability
            );
            driver.Navigate().GoToUrl("https://support.staffbase.com/hc/en-us/article_attachments/360009197031/username.csv");
            driver.Context = "NATIVE_APP";
            driver.FindElement(By.Name("Download")).Click();
            driver.Context = driver.Contexts[1];
            driver.Navigate().GoToUrl("https://the-internet.herokuapp.com/upload");
            Thread.Sleep(10000);
            driver.FindElementById("file-upload").Click();
            driver.Context = "NATIVE_APP";
            driver.FindElement(By.Name("Browse")).Click();
            driver.FindElement(By.Name("Recents")).Click();
            IWebElement element = driver.FindElementByXPath("//XCUIElementTypeCollectionView");
            element.FindElements(By.XPath("//XCUIElementTypeCell"))[0].Click();
            driver.Context = driver.Contexts[1];
            Console.WriteLine(driver.Title);
            driver.FindElementById("file-submit").Click();
            driver.Quit();
        }
    }
}
from appium import webdriver
from appium.webdriver.common.mobileby import MobileBy
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common import action_chains, keys
from time import sleep
from selenium.webdriver.common.by import By
desired_cap = {
        "device": "iPhone 12",
        "os_version": "14",
        "real_mobile": "true",
        "browserstack.debug": "true",
        "nativeWebTap":"true"
}
driver = webdriver.Remote(command_executor='http://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub', desired_capabilities=desired_cap)
# download file
driver.get("https://support.staffbase.com/hc/en-us/article_attachments/360009197031/username.csv")
# accept download
driver.switch_to.context('NATIVE_APP')
driver.find_element_by_name('Download').click()
driver.switch_to.context(driver.contexts[1])
# go to upload url
driver.get("https://the-internet.herokuapp.com/upload")
sleep(10)
driver.find_element_by_id('file-upload').click()
driver.switch_to.context('NATIVE_APP')
driver.find_element_by_name('Browse').click()
driver.find_element_by_name('Recents').click()
element = driver.find_element_by_xpath("//XCUIElementTypeCollectionView")
print(type(element))
element.find_elements_by_xpath("//XCUIElementTypeCell")[0].click()
driver.switch_to.context(driver.contexts[1])
driver.find_element_by_id("file-submit").click()
driver.quit()
require 'rubygems'
require 'appium_lib'
# Input capabilities
caps = {}
caps['device'] = 'iPhone 12'
caps['os_version'] = '14'
caps['platformName'] = 'iOS'
caps['realMobile'] = 'true'
caps['name'] = 'BStack-[Ruby] Sample Test' # test name  
caps['build'] = 'BStack Build Number 1' # CI/CD job or build name
caps['nativeWebTap'] = 'true'
appium_driver = Appium::Driver.new({'caps' => caps,'appium_lib' => {:server_url => "https://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub"}}, true)
driver = appium_driver.start_driver
driver.navigate.to "https://support.staffbase.com/hc/en-us/article_attachments/360009197031/username.csv"
driver.set_context('NATIVE_APP')
driver.find_element(xpath: "//*[@name='Download']").click
contexts = driver.available_contexts
driver.set_context contexts[1]
driver.navigate.to "https://the-internet.herokuapp.com/upload"
sleep(5)
driver.find_element(xpath: "//*[@id='file-upload']").click
driver.set_context('NATIVE_APP')
sleep(10)
driver.find_element(xpath: "//*[@name='Browse']").click
sleep(5)
driver.find_element(xpath: "//*[@name='Recents']").click
element=driver.find_element(:xpath,"//XCUIElementTypeCollectionView")
element.find_elements(xpath: "//XCUIElementTypeCell")[0].click
contexts = driver.available_contexts
driver.set_context contexts[1]
driver.find_element(:id,"file-submit").click()
driver.quit()

Upload your own media

You can also use your media files for testing. Prior to starting the test execution, upload the media files using REST API. The REST API returns a response media_url for each successful file upload. Use the calapbility values uploadMedia for W3C protocol and browserstack.uploadMedia for JSON wire protocol in your test scripts. BrowserStack save these media files to the device at the beginning of the test execution.

Capability Description Values
uploadMedia Set this capability if you want to use your uploaded images, videos, or audios in the test. Upload your media files to BrowserStack servers using REST API. Use the media_url value returned as a result of the upload request to set this capability. The media_url returned on successful upload.
Example: ["media://hashedid", "media://hashedid"]
Capability Description Values
browserstack.uploadMedia Set this capability if you want to use your uploaded images, videos, or audio in the test. Upload your media files to BrowserStack servers using REST API. Use the media_url value returned as a result of the upload request to set this capability. The media_url returned on successful upload.
Example: ["media://hashedid", "media://hashedid"]

Example:

MutableCapabilities capabilities = new MutableCapabilities();
HashMap<String, Object> browserstackOptions = new HashMap<String, Object>();
browserstackOptions.put("uploadMedia", "media://21d66a8a0471097bbf5789330129e9ab97e467e3","media://4d5f6w4h6dq19fg4nl9o5e9ab97d1s1y0i9kl2d3d");
capabilities.setCapability("bstack:options", browserstackOptions);
var capabilities = {
	'bstack:options' : {
		"uploadMedia" : ['media://21d66a8a0471097bbf5789330129e9ab97e467e3','media://4d5f6w4h6dq19fg4nl9o5e9ab97d1s1y0i9kl2d3d']
	},
}
SafariOptions capabilities = new SafariOptions();
Dictionary<string, object> browserstackOptions = new Dictionary<string, object>();
browserstackOptions.Add("uploadMedia", "media://21d66a8a0471097bbf5789330129e9ab97e467e3","media://4d5f6w4h6dq19fg4nl9o5e9ab97d1s1y0i9kl2d3d");
capabilities.AddAdditionalOption("bstack:options", browserstackOptions);
$caps = array(
	'bstack:options' => array(
		"uploadMedia" => ['media://21d66a8a0471097bbf5789330129e9ab97e467e3','media://4d5f6w4h6dq19fg4nl9o5e9ab97d1s1y0i9kl2d3d'],
	),
)

desired_cap = {
	'bstack:options' : {
		"uploadMedia" : ['media://21d66a8a0471097bbf5789330129e9ab97e467e3','media://4d5f6w4h6dq19fg4nl9o5e9ab97d1s1y0i9kl2d3d'],
	},
}
capabilities = {
	'bstack:options' => {
		"uploadMedia" => ['media://21d66a8a0471097bbf5789330129e9ab97e467e3','media://4d5f6w4h6dq19fg4nl9o5e9ab97d1s1y0i9kl2d3d'],
	},
}
DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
desiredCapabilities.setCapability("browserstack.uploadMedia", new String[]{"media://21d66a8a0471097bbf5789330129e9ab97e467e3","media://4d5f6w4h6dq19fg4nl9o5e9ab97d1s1y0i9kl2d3d"});
var capabilities = {
	'browserstack.uploadMedia': ['media://21d66a8a0471097bbf5789330129e9ab97e467e3','media://4d5f6w4h6dq19fg4nl9o5e9ab97d1s1y0i9kl2d3d']
}
DesiredCapabilities capability = new DesiredCapabilities();
capability.SetCapability("browserstack.uploadMedia", new[] {"media://21d66a8a0471097bbf5789330129e9ab97e467e3","media://4d5f6w4h6dq19fg4nl9o5e9ab97d1s1y0i9kl2d3d"});
$capabilities = new DesiredCapabilities();
$capabilities->setCapability("browserstack.uploadMedia", ["media://21d66a8a0471097bbf5789330129e9ab97e467e3","media://4d5f6w4h6dq19fg4nl9o5e9ab97d1s1y0i9kl2d3d"]);
desired_cap = {
	'browserstack.uploadMedia': ['media://21d66a8a0471097bbf5789330129e9ab97e467e3','media://4d5f6w4h6dq19fg4nl9o5e9ab97d1s1y0i9kl2d3d']
}
desired_caps = {
    'browserstack.uploadMedia': ['media://21d66a8a0471097bbf5789330129e9ab97e467e3','media://4d5f6w4h6dq19fg4nl9o5e9ab97d1s1y0i9kl2d3d']
}

Access uploaded media files during testing

During test execution, you can access your uploaded media files as follows:

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;

DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("bstack:options", new JSONObject()
    .put("os", "Windows")
    .put("osVersion", "10")
    .put("projectName", "Sample Test")
    .put("buildName", "Sample_test")
    .put("uploadMedia", new JSONArray().put("media://<FILE_HASHED_ID>"))
);
capabilities.setCapability("browserName", "IE");
capabilities.setCapability("browserVersion", "11.0");

WebDriver driver = new InternetExplorerDriver(new URL("https://YOUR_USERNAME:YOUR_ACCESSKEY@hub-cloud.browserstack.com/wd/hub"), capabilities);

try {
    driver.get("http://www.fileconvoy.com");
    WebElement uploadElement = driver.findElement(By.id("upfile_0"));
    uploadElement.sendKeys("C:\\Users\\hello\\Documents\\<MEDIA_FOLDER>\\<IMAGE_NAME>.<IMAGE_EXT>");
    ((JavascriptExecutor) driver).executeScript("document.getElementById('readTermsOfUse').click();");
    driver.findElement(By.name("upload_button")).submit();
    WebElement topMessage = driver.findElement(By.id("TopMessage"));
    if (topMessage.getText().contains("successfully uploaded")) {
        ((JavascriptExecutor) driver).executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "File upload successful"}}');
    } else {
        ((JavascriptExecutor) driver).executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File upload failed"}}');
    }
} catch (Exception e) {
    ((JavascriptExecutor) driver).executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "Something wrong with script"}}');
} finally {
    driver.quit();
}
const {Builder, By, Key, until} = require('selenium-webdriver');

let capabilities = {
    'bstack:options': {
        'os': 'Windows',
        'osVersion': '10',
        'projectName': 'Sample Test',
        'buildName': 'Sample_test',
        'uploadMedia': ['media://<FILE_HASHED_ID>']
    },
    'browserName': 'IE',
    'browserVersion': '11.0',
};

let driver = new Builder().usingServer('https://YOUR_USERNAME:YOUR_ACCESSKEY@hub-cloud.browserstack.com/wd/hub').withCapabilities(capabilities).build();

try {
    driver.get('http://www.fileconvoy.com');
    driver.findElement(By.id('upfile_0')).sendKeys('C:\\Users\\hello\\Documents\\<MEDIA_FOLDER>\\<IMAGE_NAME>.<IMAGE_EXT>');
    driver.executeScript('document.getElementById("readTermsOfUse").click();');
    driver.findElement(By.name('upload_button')).submit();
    if (driver.findElement(By.id('TopMessage')).getText().includes('successfully uploaded')) {
        driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "File upload successful"}}');
    } else {
        driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File upload failed"}}');
    }
} catch (exception) {
    driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "Something wrong with script"}}');
} finally {
    driver.quit();
}
using OpenQA.Selenium;
using OpenQA.Selenium.IE;
using Newtonsoft.Json;
using System;

var capabilities = new DesiredCapabilities();
capabilities.SetCapability("bstack:options", JsonConvert.SerializeObject(new
    {
        os = "Windows",
        osVersion = "10",
        projectName = "Sample Test",
        buildName = "Sample_test",
        uploadMedia = new[] { "media://<FILE_HASHED_ID>" }
    }));
capabilities.SetCapability("browserName", "IE");
capabilities.SetCapability("browserVersion", "11.0");

IWebDriver driver = new RemoteWebDriver(new Uri("https://YOUR_USERNAME:YOUR_ACCESSKEY@hub-cloud.browserstack.com/wd/hub"), capabilities);

try
{
    driver.Navigate().GoToUrl("http://www.fileconvoy.com");
    IWebElement uploadElement = driver.FindElement(By.Id("upfile_0"));
    uploadElement.SendKeys("C:\\Users\\hello\\Documents\\<MEDIA_FOLDER>\\<IMAGE_NAME>.<IMAGE_EXT>");
    IJavaScriptExecutor jse = (IJavaScriptExecutor)driver;
    jse.ExecuteScript("document.getElementById('readTermsOfUse').click();");
    driver.FindElement(By.Name("upload_button")).Submit();
    IWebElement topMessage = driver.FindElement(By.Id("TopMessage"));
    if (topMessage.Text.Contains("successfully uploaded"))
    {
        jse.ExecuteScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "File upload successful"}}');
    }
    else
    {
        jse.ExecuteScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File upload failed"}}');
    }
}
catch (Exception e)
{
    IJavaScriptExecutor jse = (IJavaScriptExecutor)driver;
    jse.ExecuteScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "Something wrong with script"}}');
}
finally
{
    driver.Quit();
}
from selenium import webdriver

capabilities = {
    'bstack:options': {
        'os': 'Windows',
        'osVersion': '10',
        'projectName': 'Sample Test',
        'buildName': 'Sample_test',
        'uploadMedia': ['media://<FILE_HASHED_ID>']
    },
    'browserName': 'IE',
    'browserVersion': '11.0',
}

driver = webdriver.Remote(
    command_executor='https://YOUR_USERNAME:YOUR_ACCESSKEY@hub-cloud.browserstack.com/wd/hub',
    desired_capabilities=capabilities
)

try:
    driver.get("http://www.fileconvoy.com")
    driver.find_element_by_id("upfile_0").send_keys("C:\\Users\\hello\\Documents\\<MEDIA_FOLDER>\\<IMAGE_NAME>.<IMAGE_EXT>")
    driver.execute_script("document.getElementById('readTermsOfUse').click();")
    driver.find_element_by_name("upload_button").submit()
    if "successfully uploaded" in driver.find_element_by_id("TopMessage").text:
        driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "File upload successful"}}')
    else:
        driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File upload failed"}}')
except:
    driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "Something wrong with script"}}')
finally:
    driver.quit()
require 'rubygems'
require 'selenium-webdriver'

# Input capabilities
capabilities = {
	'bstack:options' => {
		"os" => "Windows",
		"osVersion" => "10",
		"projectName" => "Sample Test",
		"buildName" => "Sample_test",
		"uploadMedia" => ["media://<FILE_HASHED_ID>"]
	},
	"browserName" => "IE",
	"browserVersion" => "11.0",
}

begin
  driver = Selenium::WebDriver.for(
    :remote,
    :url => "https://YOUR_USERNAME:YOUR_ACCESSKEY@hub-cloud.browserstack.com/wd/hub",
    :capabilities => capabilities
  )
  driver.navigate.to "http://www.fileconvoy.com"
  driver.find_element(:id, "upfile_0").send_keys("C:\\Users\\hello\\Documents\\<MEDIA_FOLDER>\\<IMAGE_NAME>.<IMAGE_EXT>")  #File path in remote machine
  # MEDIA_FOLDER will be depended on file type of uploadMedia passed, values can be "video", "images", "audio"
  driver.execute_script('document.getElementById("readTermsOfUse").click();')
  driver.find_element(:name, "upload_button").submit
  if driver.find_element(:id, 'TopMessage').text.include? 'successfully uploaded'
    driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "File upload successful"}}')
  else
    driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File upload failed"}}')
  end
rescue => exception
  driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "Something wrong with script"}}')
ensure
  driver.quit
end
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.net.URL;

public class FileUpload {
    public static void main(String[] args) throws Exception {
        ChromeOptions caps = new ChromeOptions();
        caps.setCapability("os", "Windows");
        caps.setCapability("os_version", "10");
        caps.setCapability("browser", "chrome");
        caps.setCapability("browser_version", "latest");
        caps.setCapability("browserstack.local", "false");
        caps.setCapability("browserstack.uploadMedia", "media://<FILE_HASHED_ID>");

        WebDriver driver = new RemoteWebDriver(new URL("https://YOUR_USERNAME:YOUR_ACCESSKEY@hub-cloud.browserstack.com/wd/hub"), caps);
        try {
            driver.get("http://www.fileconvoy.com");
            driver.findElement(By.id("upfile_0")).sendKeys("C:\\Users\\hello\\Documents\\<MEDIA_FOLDER>\\<IMAGE_NAME>.<IMAGE_EXT>");  //File path in remote machine
            // MEDIA_FOLDER will be depended on file type of uploadMedia passed, values can be "video", "images", "audio"
            driver.executeScript("document.getElementById('readTermsOfUse').click();");
            driver.findElement(By.name("upload_button")).submit();
            String ele = driver.findElement(By.id("TopMessage")).getText();
            if (ele.contains("successfully uploaded")) {
                driver.executeScript("browserstack_executor: {'action': 'setSessionStatus', 'arguments': {'status':'passed','reason': 'File upload successful'}}");
            } else {
                driver.executeScript("browserstack_executor: {'action': 'setSessionStatus', 'arguments': {'status':'failed','reason': 'File upload failed'}}");
            }
        } catch (Exception e) {
            driver.executeScript("browserstack_executor: {'action': 'setSessionStatus', 'arguments': {'status':'failed','reason': 'Something wrong with script'}}");
        } finally {
            driver.quit();
        }
    }
}
const {Builder, By, Key, until} = require('selenium-webdriver');

async function example() {
  const cap = {
    'browserName': 'chrome',
    'browserstack.local':'false',
    'browserstack.uploadMedia':["media://<FILE_HASHED_ID>"],
    'browser_version': 'latest',
    'os':'Windows',
    'os_version':'10'
  }
  let driver = await new Builder().usingServer('https://YOUR_USERNAME:YOUR_ACCESSKEY@hub-cloud.browserstack.com/wd/hub').
    withCapabilities(cap).build();
  try {
    await driver.get('http://www.fileconvoy.com');
    await driver.findElement(By.id('upfile_0')).sendKeys("C:\\Users\\hello\\Documents\\<MEDIA_FOLDER>\\<IMAGE_NAME>.<IMAGE_EXT>");
    await driver.executeScript("document.getElementById('readTermsOfUse').click();");
    await driver.findElement(By.name("upload_button")).submit();
    let ele = await driver.findElement(By.id("TopMessage")).getText();
    if (ele.includes('successfully uploaded')) {
      await driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "File upload successful"}}');
    } else {
      await driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File upload failed"}}');
    }
  } catch (error) {
    await driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "Something wrong with script"}}');
  } finally {
    await driver.quit();
  }
}
example();
using OpenQA.Selenium;
using OpenQA.Selenium.Remote;

class FileUpload
{
    static void Main(string[] args)
    {
        var caps = new DesiredCapabilities();
        caps.SetCapability("os", "Windows");
        caps.SetCapability("os_version", "10");
        caps.SetCapability("browser", "chrome");
        caps.SetCapability("browser_version", "latest");
        caps.SetCapability("browserstack.local", "false");
        caps.SetCapability("browserstack.uploadMedia", "media://<FILE_HASHED_ID>");
        IWebDriver driver = new RemoteWebDriver(new Uri("https://YOUR_USERNAME:YOUR_ACCESSKEY@hub-cloud.browserstack.com/wd/hub"), caps);
        try
        {
            driver.Navigate().GoToUrl("http://www.fileconvoy.com");
            driver.FindElement(By.Id("upfile_0")).SendKeys("C:\\Users\\hello\\Documents\\<MEDIA_FOLDER>\\<IMAGE_NAME>.<IMAGE_EXT>");
            driver.ExecuteScript("document.getElementById('readTermsOfUse').click();");
            driver.FindElement(By.Name("upload_button")).Submit();
            string ele = driver.FindElement(By.Id("TopMessage")).Text;
            if (ele.Contains("successfully uploaded"))
            {
                driver.ExecuteScript("browserstack_executor: {'action': 'setSessionStatus', 'arguments': {'status':'passed','reason': 'File upload successful'}}");
            }
            else
            {
                driver.ExecuteScript("browserstack_executor: {'action': 'setSessionStatus', 'arguments': {'status':'failed','reason': 'File upload failed'}}");
            }
        }
        catch (Exception e)
        {
            driver.ExecuteScript("browserstack_executor: {'action': 'setSessionStatus', 'arguments': {'status':'failed','reason': 'Something wrong with script'}}");
        }
        finally
        {
            driver.Quit();
        }
    }
}
from selenium import webdriver

# Input capabilities
caps = {
  "os": "Windows",
  "os_version": "10",
  "browser": "chrome",
  "browser_version": "latest",
  "browserstack.local": "false",
  "browserstack.uploadMedia": ["media://<FILE_HASHED_ID>"],
}

try:
  driver = webdriver.Remote(
    command_executor='https://YOUR_USERNAME:YOUR_ACCESSKEY@hub-cloud.browserstack.com/wd/hub',
    desired_capabilities=caps
  )

  driver.get("http://www.fileconvoy.com")
  driver.find_element_by_id("upfile_0").send_keys("C:\\Users\\hello\\Documents\\<MEDIA_FOLDER>\\<IMAGE_NAME>.<IMAGE_EXT>")  #File path in remote machine
  # MEDIA_FOLDER will be depended on file type of uploadMedia passed, values can be "video", "images", "audio"
  driver.execute_script('document.getElementById("readTermsOfUse").click();')
  driver.find_element_by_name("upload_button").submit()
  if "successfully uploaded" in driver.find_element_by_id("TopMessage").text:
    driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "File upload successful"}}')
  else:
    driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File upload failed"}}')
except Exception as e:
  driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "Something wrong with script"}}')
finally:
  driver.quit()
require 'rubygems'
require 'selenium-webdriver'

# Input capabilities
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["os"] = "Windows"
caps["os_version"] = "10"
caps["browser"] = "chrome"
caps["browser_version"] = "latest"
caps["browserstack.local"] = "false"
caps["browserstack.uploadMedia"] = ["media://<FILE_HASHED_ID>"]

begin
  driver = Selenium::WebDriver.for(
    :remote,
    :url => "https://YOUR_USERNAME:YOUR_ACCESSKEY@hub-cloud.browserstack.com/wd/hub",
    :capabilities => caps
  )
  driver.navigate.to "http://www.fileconvoy.com"
  driver.find_element(:id, "upfile_0").send_keys("C:\\Users\\hello\\Documents\\<MEDIA_FOLDER>\\<IMAGE_NAME>.<IMAGE_EXT>")  #File path in remote machine
  # MEDIA_FOLDER will be depended on file type of uploadMedia passed, values can be "video", "images", "audio"
  driver.execute_script('document.getElementById("readTermsOfUse").click();')
  driver.find_element(:name, "upload_button").submit
  if driver.find_element(:id, 'TopMessage').text.include? 'successfully uploaded'
    driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "File upload successful"}}')
  else
    driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File upload failed"}}')
  end
rescue => exception
  driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "Something wrong with script"}}')
ensure
  driver.quit
end
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;

DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("bstack:options", new JSONObject()
    .put("os", "OS X")
    .put("osVersion", "Big Sur")
    .put("projectName", "Sample Test")
    .put("buildName", "Sample_test")
    .put("uploadMedia", new JSONArray().put("media://<FILE_HASHED_ID>"))
);
capabilities.setCapability("browserName", "IE");
capabilities.setCapability("browserVersion", "11.0");

WebDriver driver = new InternetExplorerDriver(new URL("https://YOUR_USERNAME:YOUR_ACCESSKEY@hub-cloud.browserstack.com/wd/hub"), capabilities);

try {
    driver.get("http://www.fileconvoy.com");
    WebElement uploadElement = driver.findElement(By.id("upfile_0"));
    uploadElement.sendKeys("/Users/test1/Documents/<MEDIA_FOLDER><IMAGE_NAME>.<IMAGE_EXT>");
    ((JavascriptExecutor) driver).executeScript("document.getElementById('readTermsOfUse').click();");
    driver.findElement(By.name("upload_button")).submit();
    WebElement topMessage = driver.findElement(By.id("TopMessage"));
    if (topMessage.getText().contains("successfully uploaded")) {
        ((JavascriptExecutor) driver).executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "File upload successful"}}');
    } else {
        ((JavascriptExecutor) driver).executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File upload failed"}}');
    }
} catch (Exception e) {
    ((JavascriptExecutor) driver).executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "Something wrong with script"}}');
} finally {
    driver.quit();
}
const {Builder, By, Key, until} = require('selenium-webdriver');

let capabilities = {
    'bstack:options': {
        'os': 'OS X',
        'osVersion': 'Big Sur',
        'projectName': 'Sample Test',
        'buildName': 'Sample_test',
        'uploadMedia': ['media://<FILE_HASHED_ID>']
    },
    'browserName': 'IE',
    'browserVersion': '11.0',
};

let driver = new Builder().usingServer('https://YOUR_USERNAME:YOUR_ACCESSKEY@hub-cloud.browserstack.com/wd/hub').withCapabilities(capabilities).build();

try {
    driver.get('http://www.fileconvoy.com');
    driver.findElement(By.id('upfile_0')).sendKeys("/Users/test1/Documents/<MEDIA_FOLDER><IMAGE_NAME>.<IMAGE_EXT>");
    driver.executeScript('document.getElementById("readTermsOfUse").click();');
    driver.findElement(By.name('upload_button')).submit();
    if (driver.findElement(By.id('TopMessage')).getText().includes('successfully uploaded')) {
        driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "File upload successful"}}');
    } else {
        driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File upload failed"}}');
    }
} catch (exception) {
    driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "Something wrong with script"}}');
} finally {
    driver.quit();
}
using OpenQA.Selenium;
using OpenQA.Selenium.IE;
using Newtonsoft.Json;
using System;

var capabilities = new DesiredCapabilities();
capabilities.SetCapability("bstack:options", JsonConvert.SerializeObject(new
    {
        os = "OS X",
        osVersion = "Big Sur",
        projectName = "Sample Test",
        buildName = "Sample_test",
        uploadMedia = new[] { "media://<FILE_HASHED_ID>" }
    }));
capabilities.SetCapability("browserName", "IE");
capabilities.SetCapability("browserVersion", "11.0");

IWebDriver driver = new RemoteWebDriver(new Uri("https://YOUR_USERNAME:YOUR_ACCESSKEY@hub-cloud.browserstack.com/wd/hub"), capabilities);

try
{
    driver.Navigate().GoToUrl("http://www.fileconvoy.com");
    IWebElement uploadElement = driver.FindElement(By.Id("upfile_0"));
    uploadElement.SendKeys("/Users/test1/Documents/<MEDIA_FOLDER><IMAGE_NAME>.<IMAGE_EXT>");
    IJavaScriptExecutor jse = (IJavaScriptExecutor)driver;
    jse.ExecuteScript("document.getElementById('readTermsOfUse').click();");
    driver.FindElement(By.Name("upload_button")).Submit();
    IWebElement topMessage = driver.FindElement(By.Id("TopMessage"));
    if (topMessage.Text.Contains("successfully uploaded"))
    {
        jse.ExecuteScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "File upload successful"}}');
    }
    else
    {
        jse.ExecuteScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File upload failed"}}');
    }
}
catch (Exception e)
{
    IJavaScriptExecutor jse = (IJavaScriptExecutor)driver;
    jse.ExecuteScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "Something wrong with script"}}');
}
finally
{
    driver.Quit();
}
from selenium import webdriver

capabilities = {
    'bstack:options': {
        'os': 'OS X',
        'osVersion': 'Big Sur',
        'projectName': 'Sample Test',
        'buildName': 'Sample_test',
        'uploadMedia': ['media://<FILE_HASHED_ID>']
    },
    'browserName': 'IE',
    'browserVersion': '11.0',
}

driver = webdriver.Remote(
    command_executor='https://YOUR_USERNAME:YOUR_ACCESSKEY@hub-cloud.browserstack.com/wd/hub',
    desired_capabilities=capabilities
)

try:
    driver.get("http://www.fileconvoy.com")
    driver.find_element_by_id("upfile_0").send_keys("/Users/test1/Documents/<MEDIA_FOLDER><IMAGE_NAME>.<IMAGE_EXT>")
    driver.execute_script("document.getElementById('readTermsOfUse').click();")
    driver.find_element_by_name("upload_button").submit()
    if "successfully uploaded" in driver.find_element_by_id("TopMessage").text:
        driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "File upload successful"}}')
    else:
        driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File upload failed"}}')
except:
    driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "Something wrong with script"}}')
finally:
    driver.quit()
require 'rubygems'
require 'selenium-webdriver'

# Input capabilities
capabilities = {
	'bstack:options' => {
		"os" => "OS X",
		"osVersion" => "Big Sur",
		"projectName" => "Sample Test",
		"buildName" => "Sample_test",
		"uploadMedia" => ["media://<FILE_HASHED_ID>"]
	},
	"browserName" => "IE",
	"browserVersion" => "11.0",
}

begin
  driver = Selenium::WebDriver.for(
    :remote,
    :url => "https://YOUR_USERNAME:YOUR_ACCESSKEY@hub-cloud.browserstack.com/wd/hub",
    :capabilities => capabilities
  )
  driver.navigate.to "http://www.fileconvoy.com"
  driver.find_element(:id, "upfile_0").send_keys("/Users/test1/Documents/<MEDIA_FOLDER><IMAGE_NAME>.<IMAGE_EXT>")  #File path in remote machine
  # MEDIA_FOLDER will be depended on file type of uploadMedia passed, values can be "video", "images", "audio"
  driver.execute_script('document.getElementById("readTermsOfUse").click();')
  driver.find_element(:name, "upload_button").submit
  if driver.find_element(:id, 'TopMessage').text.include? 'successfully uploaded'
    driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "File upload successful"}}')
  else
    driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File upload failed"}}')
  end
rescue => exception
  driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "Something wrong with script"}}')
ensure
  driver.quit
end
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.net.URL;

public class FileUpload {
    public static void main(String[] args) throws Exception {
        ChromeOptions caps = new ChromeOptions();
        caps.setCapability("os", "OS X");
        caps.setCapability("os_version", "Big Sur");
        caps.setCapability("browser", "chrome");
        caps.setCapability("browser_version", "latest");
        caps.setCapability("browserstack.local", "false");
        caps.setCapability("browserstack.uploadMedia", "media://<FILE_HASHED_ID>");

        WebDriver driver = new RemoteWebDriver(new URL("https://YOUR_USERNAME:YOUR_ACCESSKEY@hub-cloud.browserstack.com/wd/hub"), caps);
        try {
            driver.get("http://www.fileconvoy.com");
            driver.findElement(By.id("upfile_0")).sendKeys("/Users/test1/Documents/<MEDIA_FOLDER><IMAGE_NAME>.<IMAGE_EXT>");  //File path in remote machine
            // MEDIA_FOLDER will be depended on file type of uploadMedia passed, values can be "video", "images", "audio"
            driver.executeScript("document.getElementById('readTermsOfUse').click();");
            driver.findElement(By.name("upload_button")).submit();
            String ele = driver.findElement(By.id("TopMessage")).getText();
            if (ele.contains("successfully uploaded")) {
                driver.executeScript("browserstack_executor: {'action': 'setSessionStatus', 'arguments': {'status':'passed','reason': 'File upload successful'}}");
            } else {
                driver.executeScript("browserstack_executor: {'action': 'setSessionStatus', 'arguments': {'status':'failed','reason': 'File upload failed'}}");
            }
        } catch (Exception e) {
            driver.executeScript("browserstack_executor: {'action': 'setSessionStatus', 'arguments': {'status':'failed','reason': 'Something wrong with script'}}");
        } finally {
            driver.quit();
        }
    }
}
const {Builder, By, Key, until} = require('selenium-webdriver');

async function example() {
  const cap = {
    'browserName': 'chrome',
    'browserstack.local':'false',
    'browserstack.uploadMedia':["media://<FILE_HASHED_ID>"],
    'browser_version': 'latest',
    'os':'OS X',
    'os_version':'Big Sur'
  }
  let driver = await new Builder().usingServer('https://YOUR_USERNAME:YOUR_ACCESSKEY@hub-cloud.browserstack.com/wd/hub').
    withCapabilities(cap).build();
  try {
    await driver.get('http://www.fileconvoy.com');
    await driver.findElement(By.id('upfile_0')).sendKeys("/Users/test1/Documents/<MEDIA_FOLDER><IMAGE_NAME>.<IMAGE_EXT>");
    await driver.executeScript("document.getElementById('readTermsOfUse').click();");
    await driver.findElement(By.name("upload_button")).submit();
    let ele = await driver.findElement(By.id("TopMessage")).getText();
    if (ele.includes('successfully uploaded')) {
      await driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "File upload successful"}}');
    } else {
      await driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File upload failed"}}');
    }
  } catch (error) {
    await driver.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "Something wrong with script"}}');
  } finally {
    await driver.quit();
  }
}
example();
using OpenQA.Selenium;
using OpenQA.Selenium.Remote;

class FileUpload
{
    static void Main(string[] args)
    {
        var caps = new DesiredCapabilities();
        caps.SetCapability("os", "OS X");
        caps.SetCapability("os_version", "Big Sur");
        caps.SetCapability("browser", "chrome");
        caps.SetCapability("browser_version", "latest");
        caps.SetCapability("browserstack.local", "false");
        caps.SetCapability("browserstack.uploadMedia", "media://<FILE_HASHED_ID>");
        IWebDriver driver = new RemoteWebDriver(new Uri("https://YOUR_USERNAME:YOUR_ACCESSKEY@hub-cloud.browserstack.com/wd/hub"), caps);
        try
        {
            driver.Navigate().GoToUrl("http://www.fileconvoy.com");
            driver.FindElement(By.Id("upfile_0")).SendKeys("/Users/test1/Documents/<MEDIA_FOLDER><IMAGE_NAME>.<IMAGE_EXT>");
            driver.ExecuteScript("document.getElementById('readTermsOfUse').click();");
            driver.FindElement(By.Name("upload_button")).Submit();
            string ele = driver.FindElement(By.Id("TopMessage")).Text;
            if (ele.Contains("successfully uploaded"))
            {
                driver.ExecuteScript("browserstack_executor: {'action': 'setSessionStatus', 'arguments': {'status':'passed','reason': 'File upload successful'}}");
            }
            else
            {
                driver.ExecuteScript("browserstack_executor: {'action': 'setSessionStatus', 'arguments': {'status':'failed','reason': 'File upload failed'}}");
            }
        }
        catch (Exception e)
        {
            driver.ExecuteScript("browserstack_executor: {'action': 'setSessionStatus', 'arguments': {'status':'failed','reason': 'Something wrong with script'}}");
        }
        finally
        {
            driver.Quit();
        }
    }
}
from selenium import webdriver

# Input capabilities
caps = {
  "os": "OS X",
  "os_version": "Big Sur",
  "browser": "chrome",
  "browser_version": "latest",
  "browserstack.local": "false",
  "browserstack.uploadMedia": ["media://<FILE_HASHED_ID>"],
}

try:
  driver = webdriver.Remote(
    command_executor='https://YOUR_USERNAME:YOUR_ACCESSKEY@hub-cloud.browserstack.com/wd/hub',
    desired_capabilities=caps
  )

  driver.get("http://www.fileconvoy.com")
  driver.find_element_by_id("upfile_0").send_keys("/Users/test1/Documents/<MEDIA_FOLDER><IMAGE_NAME>.<IMAGE_EXT>")  #File path in remote machine
  # MEDIA_FOLDER will be depended on file type of uploadMedia passed, values can be "video", "images", "audio"
  driver.execute_script('document.getElementById("readTermsOfUse").click();')
  driver.find_element_by_name("upload_button").submit()
  if "successfully uploaded" in driver.find_element_by_id("TopMessage").text:
    driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "File upload successful"}}')
  else:
    driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File upload failed"}}')
except Exception as e:
  driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "Something wrong with script"}}')
finally:
  driver.quit()
require 'rubygems'
require 'selenium-webdriver'

# Input capabilities
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["os"] = "OS X"
caps["os_version"] = "Big Sur"
caps["browser"] = "chrome"
caps["browser_version"] = "latest"
caps["browserstack.local"] = "false"
caps["browserstack.uploadMedia"] = ["media://<FILE_HASHED_ID>"]

begin
  driver = Selenium::WebDriver.for(
    :remote,
    :url => "https://YOUR_USERNAME:YOUR_ACCESSKEY@hub-cloud.browserstack.com/wd/hub",
    :capabilities => caps
  )
  driver.navigate.to "http://www.fileconvoy.com"
  driver.find_element(:id, "upfile_0").send_keys("/Users/test1/Documents/<MEDIA_FOLDER><IMAGE_NAME>.<IMAGE_EXT>")  #File path in remote machine
  # MEDIA_FOLDER will be depended on file type of uploadMedia passed, values can be "video", "images", "audio"
  driver.execute_script('document.getElementById("readTermsOfUse").click();')
  driver.find_element(:name, "upload_button").submit
  if driver.find_element(:id, 'TopMessage').text.include? 'successfully uploaded'
    driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "File upload successful"}}')
  else
    driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "File upload failed"}}')
  end
rescue => exception
  driver.execute_script('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "Something wrong with script"}}')
ensure
  driver.quit
end
import java.net.URL;
import java.util.List;
import java.util.Set;
import java.net.MalformedURLException;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import io.appium.java_client.MobileBy;
import io.appium.java_client.ios.IOSDriver;
import io.appium.java_client.ios.IOSElement;
import org.apache.commons.lang3.*;
public class Upload extends Thread{
   public static String userName = "YOUR_USERNAME";
   public static String accessKey = "YOUR_ACCESS_KEY";
   public static void main(String args[]) throws MalformedURLException, InterruptedException {
    DesiredCapabilities capabilities = new DesiredCapabilities();
    HashMap<String, Object> browserstackOptions = new HashMap<String, Object>();
    browserstackOptions.put("osVersion", "14");
    browserstackOptions.put("deviceName", "iPhone 12");
    browserstackOptions.put("realMobile", "true");
    browserstackOptions.put("projectName", "Sample Test");
    browserstackOptions.put("buildName", "Sample_test");
    browserstackOptions.put("debug", "true");
    browserstackOptions.put("uploadMedia", ["media://a1980ac27df347a2991b4aa6c93a1ca1290ac4e1"]);
    capabilities.setCapability("bstack:options", browserstackOptions);

     IOSDriver<IOSElement> driver = new IOSDriver<IOSElement>(new URL("https://"+userName+":"+accessKey+"@hub-cloud.browserstack.com/wd/hub"), caps);
     driver.get("https://the-internet.herokuapp.com/upload");
     Thread.sleep(5000);
     driver.findElement(By.id("file-upload")).click();
     driver.context("NATIVE_APP");
     driver.findElement(By.name("Photo Library")).click();
     Thread.sleep(5000);
     List list = driver.findElements(By.className("XCUIElementTypeImage"));
    ((IOSElement) list.get(0)).click();
     Thread.sleep(5000);
     driver.findElement(By.name("Choose")).click();
     Set<String> contextName = driver.getContextHandles();
     driver.context(contextName.toArray()[1].toString());
     driver.findElement(By.id("file-submit")).click();
     driver.quit();
  }
}
var wd = require('wd');
// Input capabilities
var capabilities = {
	'bstack:options' : {
		"osVersion" : "14",
		"deviceName" : "iPhone 12",
		"realMobile" : "true",
		"projectName" : "Sample Test",
		"buildName" : "Sample_test",
		"debug" : "true",
        "uploadMedia" : ["media://9bc4f2cac7da82760b81d2692a1063cf8d66a043"]
	},
	"browserName" : "safari",
}

async function runTestWithCaps () {
  let driver = new webdriver.Builder()
    .usingServer('https://hub-cloud.browserstack.com/wd/hub')
    .withCapabilities(capabilities)
    .build();
  await driver.get("https://the-internet.herokuapp.com/upload")
  await new Promise(r => setTimeout(r, 2000));
  element = await driver.waitForElementById('file-upload')
  await element.click()
  await driver.context('NATIVE_APP')
  element = await driver.waitForElementByName('Photo Library')
  await element.click()
  await new Promise(r => setTimeout(r, 2000));
  element = await driver.elementsByClassName('XCUIElementTypeImage')
  await element[0].click()
  await new Promise(r => setTimeout(r, 5000));
  element = await driver.waitForElementByName('Choose')
  await element.click()
  await new Promise(r => setTimeout(r, 10000));
  contexts = await driver.contexts();
  await driver.context(contexts[1])
  element = await driver.waitForElementById("file-submit")
  await element.click()
  await driver.quit();
}
runTestWithCaps();
using System;
using System.Threading;
using OpenQA.Selenium;
using OpenQA.Selenium.Appium;
using OpenQA.Selenium.Appium.iOS;
namespace SampleTests
{
    class UploadFile
    {
        static void Main(string[] args)
        {
            AppiumDriver<IWebElement> driver;
            SafariOptions capabilities = new SafariOptions();
            Dictionary<string, object> browserstackOptions = new Dictionary<string, object>();
            browserstackOptions.Add("osVersion", "14");
            browserstackOptions.Add("deviceName", "iPhone 12");
            browserstackOptions.Add("realMobile", "true");
            browserstackOptions.Add("projectName", "Sample Test");
            browserstackOptions.Add("buildName", "Sample_test");
            browserstackOptions.Add("debug", "true");
            browserstackOptions.Add("uploadMedia", ["media://a1980ac27df347a2991b4aa6c93a1ca1290ac4e1"]);
            capabilities.AddAdditionalOption("bstack:options", browserstackOptions);
            driver = new IOSDriver<IWebElement>(
              new Uri("https://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub/"), capability
            );
            driver.Navigate().GoToUrl("https://the-internet.herokuapp.com/upload");
            Thread.Sleep(10000);
            driver.FindElementById("file-upload").Click();
            driver.Context = "NATIVE_APP";
            driver.FindElement(By.Name("Photo Library")).Click();
            Thread.Sleep(5000);
            IWebElement element = driver.FindElementsByClassName("XCUIElementTypeImage")[0];
            element.Click();
            driver.FindElementByName("Choose").Click();
            driver.Context = driver.Contexts[1];
            Console.WriteLine(driver.Title);
            driver.FindElementById("file-submit").Click();
            driver.Quit();
        }
    }
}
from appium import webdriver
from appium.webdriver.common.mobileby import MobileBy
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common import action_chains, keys
from time import sleep
from selenium.webdriver.common.by import By
desired_cap = {
	'bstack:options' : {
		"osVersion" : "14",
		"deviceName" : "iPhone 12",
		"realMobile" : "true",
		"projectName" : "Sample Test",
		"buildName" : "Sample_test",
		"debug" : "true",
        "uploadMedia" : ["media://9bc4f2cac7da82760b81d2692a1063cf8d66a043"]
	},
}

options.set_capability('bstack:options', desired_cap)
driver = webdriver.Remote(
    command_executor='https://hub-cloud.browserstack.com/wd/hub',
    options=options)
driver.get("https://the-internet.herokuapp.com/upload")
sleep(10)
driver.find_element_by_id('file-upload').click()
driver.switch_to.context('NATIVE_APP')
driver.find_element_by_name('Photo Library').click()
sleep(5)
elements = driver.find_elements_by_class_name("XCUIElementTypeImage")
elements[0].click() # 1 represents second element from the list of 9 preloaded images and videos
sleep(5)
driver.find_element_by_name("Choose").click()
sleep(10)
driver.switch_to.context(driver.contexts[1])
driver.find_element_by_id("file-submit").click()
driver.quit()
require 'rubygems'
require 'appium_lib'
# Input capabilities
capabilities = {
	'bstack:options' => {
		"osVersion" => "14",
		"deviceName" => "iPhone 12",
		"realMobile" => "true",
		"projectName" => "Sample Test",
		"buildName" => "Sample_test",
		"debug" => "true",
        "uploadMedia" => ["media://9bc4f2cac7da82760b81d2692a1063cf8d66a043"]
	},
}

appium_driver = Appium::Driver.new({'caps' => capabilities,'appium_lib' => {:server_url => "https://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub"}}, true)
driver = appium_driver.start_driver
driver.navigate.to "https://the-internet.herokuapp.com/upload"
sleep(5)
driver.find_element(xpath: "//*[@id='file-upload']").click
driver.set_context('NATIVE_APP')
sleep(10)
driver.find_element(name: "Photo Library").click
sleep(5)
elements=driver.find_elements(:class_name,"XCUIElementTypeImage")
elements[0].click
driver.find_element(name: "Choose").click
contexts = driver.available_contexts
driver.set_context contexts[1]
driver.find_element(:id,"file-submit").click()
driver.quit()
import java.net.URL;
import java.util.List;
import java.util.Set;
import java.net.MalformedURLException;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import io.appium.java_client.MobileBy;
import io.appium.java_client.ios.IOSDriver;
import io.appium.java_client.ios.IOSElement;
import org.apache.commons.lang3.*;
public class Upload extends Thread{
   public static String userName = "YOUR_USERNAME";
   public static String accessKey = "YOUR_ACCESS_KEY";
   public static void main(String args[]) throws MalformedURLException, InterruptedException {
     DesiredCapabilities caps = new DesiredCapabilities();
     caps.setCapability("device", "iPhone 12 Pro Max");
     caps.setCapability("os_version", "14");
     caps.setCapability("real_mobile", "true");
     caps.setCapability("project", "My First Project");
     caps.setCapability("build", "My First Build");
     caps.setCapability("name", "Bstack-[Java] Sample Test");
     caps.setCapability("nativeWebTap", "true");
     caps.setCapability("browserstack.uploadMedia", ["media://b2a75853f2d472a28654eeb642af08c99e9cde84"]);
     IOSDriver<IOSElement> driver = new IOSDriver<IOSElement>(new URL("https://"+userName+":"+accessKey+"@hub-cloud.browserstack.com/wd/hub"), caps);
     driver.get("https://the-internet.herokuapp.com/upload");
     Thread.sleep(5000);
     driver.findElement(By.id("file-upload")).click();
     driver.context("NATIVE_APP");
     driver.findElement(By.name("Photo Library")).click();
     Thread.sleep(5000);
     List list = driver.findElements(By.className("XCUIElementTypeImage"));
    ((IOSElement) list.get(0)).click();
     Thread.sleep(5000);
     driver.findElement(By.name("Choose")).click();
     Set<String> contextName = driver.getContextHandles();
     driver.context(contextName.toArray()[1].toString());
     driver.findElement(By.id("file-submit")).click();
     driver.quit();
  }
}
var wd = require('wd');
// Input capabilities
const capabilities = {
 'device' : 'iPhone 12',
 'realMobile' : 'true',
 'os_version' : '14.0',
 'browserName' : 'iPhone',
 'name': 'BStack-[NodeJS] Sample Test',
 'build': 'BStack Build Number 1',
 'nativeWebTap':true,
 'browserstack.uploadMedia' : ['media://b2a75853f2d472a28654eeb642af08c99e9cde84']
}
async function runTestWithCaps () {
  let driver = wd.promiseRemote("http://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub");
  await driver.init(capabilities);
  await driver.get("https://the-internet.herokuapp.com/upload")
  await new Promise(r => setTimeout(r, 2000));
  element = await driver.waitForElementById('file-upload')
  await element.click()
  await driver.context('NATIVE_APP')
  element = await driver.waitForElementByName('Photo Library')
  await element.click()
  await new Promise(r => setTimeout(r, 2000));
  element = await driver.elementsByClassName('XCUIElementTypeImage')
  await element[0].click()
  await new Promise(r => setTimeout(r, 5000));
  element = await driver.waitForElementByName('Choose')
  await element.click()
  await new Promise(r => setTimeout(r, 10000));
  contexts = await driver.contexts();
  await driver.context(contexts[1])
  element = await driver.waitForElementById("file-submit")
  await element.click()
  await driver.quit();
}
runTestWithCaps();
using System;
using System.Threading;
using OpenQA.Selenium;
using OpenQA.Selenium.Appium;
using OpenQA.Selenium.Appium.iOS;
namespace SampleTests
{
    class UploadFile
    {
        static void Main(string[] args)
        {
            AppiumDriver<IWebElement> driver;
            AppiumOptions capability = new AppiumOptions();
            capability.AddAdditionalCapability("browserName", "iPhone");
            capability.AddAdditionalCapability("device", "iPhone 12");
            capability.AddAdditionalCapability("realMobile", "true");
            capability.AddAdditionalCapability("os_version", "14");
            capability.AddAdditionalCapability("browserstack.debug", "true");
            capability.AddAdditionalCapability("nativeWebTap", "true");
            capability.AddAdditionalCapability("browserstack.uploadMedia", ["media://b2a75853f2d472a28654eeb642af08c99e9cde84"]);
            driver = new IOSDriver<IWebElement>(
              new Uri("https://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub/"), capability
            );
            driver.Navigate().GoToUrl("https://the-internet.herokuapp.com/upload");
            Thread.Sleep(10000);
            driver.FindElementById("file-upload").Click();
            driver.Context = "NATIVE_APP";
            driver.FindElement(By.Name("Photo Library")).Click();
            Thread.Sleep(5000);
            IWebElement element = driver.FindElementsByClassName("XCUIElementTypeImage")[0];
            element.Click();
            driver.FindElementByName("Choose").Click();
            driver.Context = driver.Contexts[1];
            Console.WriteLine(driver.Title);
            driver.FindElementById("file-submit").Click();
            driver.Quit();
        }
    }
}
from appium import webdriver
from appium.webdriver.common.mobileby import MobileBy
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common import action_chains, keys
from time import sleep
from selenium.webdriver.common.by import By
desired_cap = {
        "device": "iPhone 12 Pro max",
        "os_version": "14",
        "real_mobile": "true",
        "browserstack.debug": "true",
        "nativeWebTap":"true",
        "browserstack.uploadMedia" : ["media://b2a75853f2d472a28654eeb642af08c99e9cde84"]
}
driver = webdriver.Remote(command_executor='http://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub', desired_capabilities=desired_cap)
driver.get("https://the-internet.herokuapp.com/upload")
sleep(10)
driver.find_element_by_id('file-upload').click()
driver.switch_to.context('NATIVE_APP')
driver.find_element_by_name('Photo Library').click()
sleep(5)
elements = driver.find_elements_by_class_name("XCUIElementTypeImage")
elements[0].click() # 1 represents second element from the list of 9 preloaded images and videos
sleep(5)
driver.find_element_by_name("Choose").click()
sleep(10)
driver.switch_to.context(driver.contexts[1])
driver.find_element_by_id("file-submit").click()
driver.quit()
require 'rubygems'
require 'appium_lib'
require 'yaml'
staging = YAML.load(File.read("staging_config.yml"))

# Input capabilities
caps = {}
caps['device'] = 'iPhone XS'
caps['os_version'] = '14.7'
caps['platformName'] = 'ios'
caps['browserstack.debug'] = "true"
caps['browserstack.console'] = "verbose"
caps["browserstack.networkLogs"] = "true"
caps['browserstack.video'] = 'true'
caps['browserstack.appiumLogs']= 'true'
caps['realMobile'] = 'true'
caps['name'] = 'BStack-[Ruby] Sample Test' # test name
caps['build'] = 'BStack Build Number 1' # CI/CD job or build name
caps['nativeWebTap'] = 'true'
caps['browserstack.uploadMedia'] = ["media://b2a75853f2d472a28654eeb642af08c99e9cde84"]


#fetch Keys for staging
env = "wtf2"
user = staging.fetch("#{env}").fetch('user')
key = staging.fetch("#{env}").fetch('key')

#create Appium driver
appium_driver = Appium::Driver.new({'caps' => caps,'appium_lib' => {:server_url => "https://#{user}:#{key}@hub-k8s-wtf2.bsstag.com/wd/hub"}}, true)
driver = appium_driver.start_driver

#Start Tests
driver.navigate.to "https://the-internet.herokuapp.com/upload"
sleep(5)
driver.find_element(xpath: "//*[@id='file-upload']").click
driver.set_context('NATIVE_APP')
driver.find_element(name: "Photo Library").click
sleep(5)
elements=driver.find_elements(:class_name,"XCUIElementTypeImage")
elements[0].click
driver.find_element(name: "Choose").click
element=driver.find_element(:xpath,"//XCUIElementTypeCollectionView")
element.find_elements(xpath: "//XCUIElementTypeCell")[1].click
contexts = driver.available_contexts
driver.set_context contexts[1]
driver.find_element(:id,"file-submit").click()
sleep(5)
puts "Uploaded File Name:"
puts driver.find_element(:css, "div#uploaded-files").text
driver.quit()
Note: Only 5 media files per test are allowed.

Supported media types

The supported file types and size limits are:

OS Max size Allowed type
macOS and iOS 15MB PNG, JPG/JPEG, BMP/BMPF,
GIF, TIFF/TIF,
Android 15MB PNG, JPG/JPEG, GIF, BMP/BMPF
Windows -
Any supported browser
15MB PNG/APNG, JPG/JPEG, GIF,
AVIF, SVG, WebP
OS Max size Allowed type
macOS and iOS 50MB MP4, MOV
Android 50MB 3GP/ 3GPP, MP4,
MKV
Windows -
Any supported browser
50MB MP4, WEBM, 3GP,
QT/QTFF, OGG
OS Max size Allowed type
macOS and iOS 15MB AAC, AIFF, MP3,
AAC, WAV
Android 15MB MP3, WAV
Windows 15MB AAC, MP3, WAV

We're sorry to hear that. Please share your feedback so we can do better

Contact our Support team for immediate help while we work on improving our docs.

We're continuously improving our docs. We'd love to know what you liked






Thank you for your valuable feedback

Is this page helping you?

Yes
No

We're sorry to hear that. Please share your feedback so we can do better

Contact our Support team for immediate help while we work on improving our docs.

We're continuously improving our docs. We'd love to know what you liked






Thank you for your valuable feedback!

Talk to an Expert
Download Copy