Introducing support for Playwright and Puppeteer tests (beta) on BrowserStack Automate!

Test File Upload Functionality

Test your web app’s file upload functionality on BrowserStack Automate.

Introduction

This document guides you on how to test your web app’s File Upload functionality in Automate by:

Supported Browsers and Operating Systems

Component List
Supported OS All desktop and mobile OS
Supported Browser All (Chrome, Firefox, Safari, IE, Edge)

Uploading files from your machine

You can send a file to remote browsers—directly from your workstation—in Automate, through the LocalFileDetector method.

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();
    }
  }
}
<?php

  require_once('vendor/autoload.php');
  use Facebook\WebDriver\Remote\RemoteWebDriver;
  use Facebook\WebDriver\WebDriverBy;
  use Facebook\WebDriver\Remote\LocalFileDetector;

  $caps = array(
 "browser" => "Internet Explorer",
 "browser_version" => "11.0",
 "os" => "Windows",
 "os_version" => "10",
 "browserstack.sendKeys" => "true",
 "name" => "Bstack-[Php] Sample Test",
 "browserstack.debug" => "true",
 "pageLoadStrategy" => 'none'
);
  $web_driver = RemoteWebDriver::create(
    "https://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub",
    $caps
  );
  $web_driver->get("http://www.fileconvoy.com");
  $file_input = $web_driver->findElement(WebDriverBy::id("upfile_0"));
  $file_input->setFileDetector(new LocalFileDetector());
  $file_input->sendKeys("//local//file//path");

  $web_driver->findElement(WebDriverBy::id("readTermsOfUse"))->click();
  $web_driver->findElement(WebDriverBy::name("upload_button"))->submit();
  sleep(5);
  $web_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
use Selenium::Remote::Driver;

#Input capabilities
my $extraCaps = {
  "browser" => "Internet Explorer",
  "browser_version" => "11.0",
  "os" => "Windows",
  "os_version" => "10",
  "browserstack.sendKeys" => "true",
  "browserstack.debug" => "true",
  "name" => "Bstack-[Perl] Sample Test"
};

my $login = "YOUR_USERNAME";
my $key = "YOUR_ACCESS_KEY";
my $host = "$login:$key\@hub-cloud.browserstack.com";

my $driver = new Selenium::Remote::Driver('remote_server_addr' => $host,
  'port' => '80', 'extra_capabilities' => $extraCaps);
my $remote_fname = $driver->upload_file("//local//file//path");
$driver->get('http://www.fileconvoy.com');
$driver->find_element('upfile_0','id')->send_keys($remote_fname);
$driver->find_element('readTermsOfUse', 'id')->click();
$driver->find_element('upload_button', 'name')->click();
sleep 40;
$driver->quit();

Note: Other browsers include Chrome, Firefox, Edge and Safari browsers.

You can send a file to remote browsers—directly from your workstation—in Automate, through the LocalFileDetector method.

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();
        }
    }
}
<?php

  require_once('vendor/autoload.php');
  use Facebook\WebDriver\Remote\RemoteWebDriver;
  use Facebook\WebDriver\WebDriverBy;
  use Facebook\WebDriver\Remote\LocalFileDetector;

  $caps = array(
 "browser" => "Chrome",
 "browser_version" => "75.0",
 "os" => "Windows",
 "os_version" => "10",
 "name" => "Bstack-[Php] Sample Test"
);
  $web_driver = RemoteWebDriver::create(
    "https://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub",
    $caps
  );
  $web_driver->get("http://www.fileconvoy.com");
  $file_input = $web_driver->findElement(WebDriverBy::id("upfile_0"));
  $file_input->setFileDetector(new LocalFileDetector());
  $file_input->sendKeys("//local//file//path");

  $web_driver->findElement(WebDriverBy::id("readTermsOfUse"))->click();
  $web_driver->findElement(WebDriverBy::name("upload_button"))->submit();
  sleep(5);
  $web_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
use Selenium::Remote::Driver;

#Input capabilities
my $extraCaps = {
  "browser" => "Chrome",
  "browser_version" => "75.0",
  "os" => "Windows",
  "os_version" => "10",
  "name" => "Bstack-[Perl] Sample Test"
};

my $login = "YOUR_USERNAME";
my $key = "YOUR_ACCESS_KEY";
my $host = "$login:$key\@hub-cloud.browserstack.com";

my $driver = new Selenium::Remote::Driver('remote_server_addr' => $host,
  'port' => '80', 'extra_capabilities' => $extraCaps);
my $remote_fname = $driver->upload_file("//local//file//path");
$driver->get('http://www.fileconvoy.com');
$driver->find_element('upfile_0','id')->send_keys($remote_fname);
$driver->find_element('readTermsOfUse', 'id')->click();
$driver->find_element('upload_button', 'name')->click();
sleep 40;
$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();
        }
    }
}
<?php
require 'android_upload.php';

class AppAutomateTest extends BrowserStackTest {

	public function sendkeys($elem, $keys)
    {
        $data = array(
            'value' => str_split($keys),
            'text' => $keys
        );
        $url = $this->getSessionUrl()->descend('element')->descend($elem->getId())->descend('value');
        $this->getDriver()->curl('POST', $url, $data);
    }
    public function testNativeApplication() {
        $this->pushFile('/data/local/tmp/<file_name>', '<local_file_path>');
        $this->url("https://the-internet.herokuapp.com/upload");
        $elem=$this->byId('file-upload');
        $this->sendkeys($elem, "/data/local/tmp/<file_name>");
        $this->element($this->using('id')->value('file-submit'))->submit();
    }
}
?>
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
import time
userName = "YOUR_USERNAME"
accessKey = "YOUR_ACCESS_KEY"
desired_caps = {
  	"os_version" : "8.0",
	"device" : "Samsung Galaxy S9",
	"name" : "test",
	"build" : "Python File Upload"
}
driver = webdriver.Remote("https://" + userName + ":" + accessKey + "@hub-cloud.browserstack.com/wd/hub", desired_caps)
driver.push_file("/data/local/tmp/<file_name>", source_path="<local_file_path>")
driver.get("https://the-internet.herokuapp.com/upload")
driver.find_element_by_id("file-upload").send_keys("/data/local/tmp/<file_name>")
driver.find_element_by_id("file-submit").submit();
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

Note: Ensure to upload the file from your machine to BrowserStack remote machine’s /data/local/tmp/<file_name> directory only, and then upload file from BrowserStack remote machine’s /data/local/tmp/<file_name> directory to the web application.

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

Uploading file in iOS device is possible by downloading that file first and then uploading it in the same automate session. For more details, refer the section for uploading the files which are downloaded in the same Automate session.

Note: You can upload any file format from your local system by simply giving the path to that file.

Uploading pre-loaded files

By default, desktop and mobile platforms have some sample media files. This is also true for remote instances spun up on BrowserStack. Following are the file paths you can use:

Windows 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

You can choose any of the files from the above list for Windows operating systems, in the code snippet given below.

*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

You can choose any of the files from the above list for macOS operating systems, in the code snippet given below.

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

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

You can use those files to test your web app’s file upload functionality using Selenium’s LocalFileDetector method and the file path.

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();
    }
  }
}
<?php

  require_once('vendor/autoload.php');
  use Facebook\WebDriver\Remote\RemoteWebDriver;
  use Facebook\WebDriver\WebDriverBy;
  use Facebook\WebDriver\Remote\LocalFileDetector;

  $caps = array(
 "browser" => "Internet Explorer",
 "browser_version" => "11.0",
 "os" => "Windows",
 "os_version" => "10",
 "browserstack.sendKeys" => "true",
 "name" => "Bstack-[Php] Sample Test",
 "browserstack.debug" => "true"
);
  $web_driver = RemoteWebDriver::create(
    "https://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub",
    $caps
  );
  $web_driver->get("http://www.fileconvoy.com");
  $file_input = $web_driver->findElement(WebDriverBy::id("upfile_0"));
  $file_input->setFileDetector(new LocalFileDetector());
  $file_input->sendKeys("C:\\Users\\hello\\Documents\\audio\\first_noel.mp3");   //File path in remote machine

  $web_driver->findElement(WebDriverBy::id("readTermsOfUse"))->click();
  $web_driver->findElement(WebDriverBy::name("upload_button"))->submit();
  sleep(5);
  $web_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
use Selenium::Remote::Driver;

#Input capabilities
my $extraCaps = {
  "browser" => "Internet Explorer",
  "browser_version" => "11.0",
  "os" => "Windows",
  "os_version" => "10",
  "browserstack.sendKeys" => "true",
  "browserstack.debug" => "true",
  "name" => "Bstack-[Perl] Sample Test"
};

my $login = "YOUR_USERNAME";
my $key = "YOUR_ACCESS_KEY";
my $host = "$login:$key\@hub-cloud.browserstack.com";

my $driver = new Selenium::Remote::Driver('remote_server_addr' => $host,
  'port' => '80', 'extra_capabilities' => $extraCaps);
my $remote_fname = $driver->upload_file("C:\\Users\\hello\\Documents\\audio\\first_noel.mp3"); #File path in remote machine
$driver->get('http://www.fileconvoy.com');
$driver->find_element('upfile_0','id')->send_keys($remote_fname);
$driver->find_element('readTermsOfUse', 'id')->click();
$driver->find_element('upload_button', 'name')->submit();
sleep 40;
$driver->quit();

Note: Other browsers include Chrome, Firefox, Edge and Safari browsers.

You can use those files to test your web app’s file upload functionality using Selenium’s LocalFileDetector method and the file path.

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();
        }
    }
}
<?php

  require_once('vendor/autoload.php');
  use Facebook\WebDriver\Remote\RemoteWebDriver;
  use Facebook\WebDriver\WebDriverBy;
  use Facebook\WebDriver\Remote\LocalFileDetector;

  $caps = array(
 "browser" => "Chrome",
 "browser_version" => "75.0",
 "os" => "Windows",
 "os_version" => "10",
 "name" => "Bstack-[Php] Sample Test"
);
  $web_driver = RemoteWebDriver::create(
    "https://YOUR_USERNAME:YOUR_ACCESS_KEY@hub-cloud.browserstack.com/wd/hub",
    $caps
  );
  $web_driver->get("http://www.fileconvoy.com");
  $file_input = $web_driver->findElement(WebDriverBy::id("upfile_0"));
  $file_input->setFileDetector(new LocalFileDetector());
  $file_input->sendKeys("C:\\Users\\hello\\Documents\\images\\wallpaper1.jpg");   //File path in remote machine

  $web_driver->findElement(WebDriverBy::id("readTermsOfUse"))->click();
  $web_driver->findElement(WebDriverBy::name("upload_button"))->submit();
  sleep(5);
  $web_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
use Selenium::Remote::Driver;

#Input capabilities
my $extraCaps = {
  "browser" => "Chrome",
  "browser_version" => "75.0",
  "os" => "Windows",
  "os_version" => "10",
  "name" => "Bstack-[Perl] Sample Test"
};

my $login = "YOUR_USERNAME";
my $key = "YOUR_ACCESS_KEY";
my $host = "$login:$key\@hub-cloud.browserstack.com";

my $driver = new Selenium::Remote::Driver('remote_server_addr' => $host,
  'port' => '80', 'extra_capabilities' => $extraCaps);
my $remote_fname = $driver->upload_file("C:\\Users\\hello\\Documents\\images\\wallpaper1.jpg");   #File path in remote machine
$driver->get('http://www.fileconvoy.com');
$driver->find_element('upfile_0','id')->send_keys($remote_fname);
$driver->find_element('readTermsOfUse', 'id')->click();
$driver->find_element('upload_button', 'name')->submit();
sleep 40;
$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();
        }
    }
}
<?php
require 'ios_upload.php';

class AppAutomateTest extends BrowserStackTest {

	public function sendkeys($elem, $keys)
    {
        $data = array(
            'value' => str_split($keys),
            'text' => $keys
        );
        $url = $this->getSessionUrl()->descend('element')->descend($elem->getId())->descend('value');
        $this->getDriver()->curl('POST', $url, $data);
    }
    public function testNativeApplication() {
        $this->url("https://the-internet.herokuapp.com/upload");
        $this->byId('file-upload')->click();
        $this->context('NATIVE_APP');
        $this->byName('Photo Library')->click();
        sleep(5);
        $this->elements($this->using("class name")->value("XCUIElementTypeImage"))[0]->click();
        $this->byName('Choose')->click();
        $contexts = $this->contexts();
        $this->context($contexts[1]);
        $this->byId("file-submit")->click();
    }
}
?>
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()

Uploading the files which are downloaded from the web in the same Automate session

To do this, you’ll need the download file path. The file will be downloaded in these locations on the remote desktops:

C:\Documents and Settings\hello\Downloads
C:\Users\hello\Downloads
/Users/test1/Downloads

Uploading files that are downloaded in the same automate session is not possible in Android devices as of now, however you can upload the file from your machine to the web application using the pushFile() method as shown in Uploading files from your machine section

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 instruct the remote browsers to:

  1. Navigate to a URL.
  2. Download a specific file.
  3. Then upload the file to the web app under test using LocalFileDetector or 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 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();
        }
    }
}
<?php
require 'android_upload.php';

class AppAutomateTest extends BrowserStackTest {

	public function sendkeys($elem, $keys)
    {
        $data = array(
            'value' => str_split($keys),
            'text' => $keys
        );
        $url = $this->getSessionUrl()->descend('element')->descend($elem->getId())->descend('value');
        $this->getDriver()->curl('POST', $url, $data);
    }
    public function testNativeApplication() {
        $this->url("https://support.staffbase.com/hc/en-us/article_attachments/360009197031/username.csv");
        $this->context('NATIVE_APP');
        $this->byName('Download')->click();
        $contexts = $this->contexts();
        $this->context($contexts[1]);
        $this->url("https://the-internet.herokuapp.com/upload");
        $this->byId('file-upload')->click();
        $this->context('NATIVE_APP');
        $this->byName('Browse')->click();
        $this->byName('Recents')->click();
        $this->byXpath("//XCUIElementTypeCollectionView");
        $this->elements($this->using('xpath')->value('//XCUIElementTypeCell'))[0]->click();
        $contexts = $this->contexts();
        $this->context($contexts[1]);
        $this->byId("file-submit")->click();
    }
}
?>
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()

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
Talk to an Expert