diff --git a/tests/modules/entity_browser_test/config/install/entity_browser.browser.test_entity_browser_standalone_upload.yml b/tests/modules/entity_browser_test/config/install/entity_browser.browser.test_entity_browser_standalone_upload.yml
new file mode 100644
index 0000000..61f970f
--- /dev/null
+++ b/tests/modules/entity_browser_test/config/install/entity_browser.browser.test_entity_browser_standalone_upload.yml
@@ -0,0 +1,21 @@
+langcode: en
+status: true
+dependencies: { }
+name: test_entity_browser_standalone_upload
+label: 'Test entity browser standalone upload'
+display: standalone
+display_configuration:
+  path: '/entity-browser/standalone-upload'
+selection_display: no_display
+selection_display_configuration: {  }
+widget_selector: single
+widget_selector_configuration: {  }
+widgets:
+  2dc1ab07-2f8f-42c9-aab7-7eef7f8b7d87:
+    settings:
+      upload_location: 'public://'
+      submit_text: 'Select files'
+    uuid: 2dc1ab07-2f8f-42c9-aab7-7eef7f8b7d87
+    weight: -9
+    label: upload
+    id: upload
diff --git a/tests/src/FunctionalJavascript/UploadWidgetTest.php b/tests/src/FunctionalJavascript/UploadWidgetTest.php
new file mode 100644
index 0000000..b7bf839
--- /dev/null
+++ b/tests/src/FunctionalJavascript/UploadWidgetTest.php
@@ -0,0 +1,73 @@
+<?php
+
+namespace Drupal\Tests\entity_browser\FunctionalJavascript;
+
+use Drupal\user\Entity\Role;
+
+/**
+ * Tests the Upload Widget.
+ *
+ * @group entity_browser
+ */
+class UploadWidgetTest extends EntityBrowserJavascriptTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
+    parent::setUp();
+
+    // Grant permission to this user to use also the EB page we are testing.
+    /** @var \Drupal\user\RoleInterface $role */
+    $role = Role::load('authenticated');
+    $this->grantPermissions($role, ['access test_entity_browser_standalone_upload entity browser pages']);
+
+  }
+
+  /**
+   * Tests Entity Browser upload widget.
+   */
+  public function testUploadWidget() {
+
+    /** @var \Drupal\entity_browser\EntityBrowserInterface $browser */
+    $browser = $this->container->get('entity_type.manager')
+      ->getStorage('entity_browser')
+      ->load('test_entity_browser_standalone_upload');
+
+    $page = $this->getSession()->getPage();
+
+    // Make sure the test file is not present beforehand.
+    $this->assertFileNotExists('public://druplicon.png');
+
+    // Go to the widget standalone page and test the upload.
+    $this->drupalGet($browser->getDisplay()->path());
+    $page->attachFileToField('edit-upload-upload', \Drupal::root() . '/core/misc/druplicon.png');
+    $this->waitForAjaxToFinish();
+    $this->assertSession()->fieldExists('druplicon.png');
+    $page->pressButton('Select files');
+    $this->assertSession()->statusCodeEquals(200);
+
+    // Check if the file was correctly uploaded to the EB destination.
+    $this->assertFileExists('public://druplicon.png');
+
+    // Now change upload location and submit label and check again.
+    $widget = $browser->getWidget('2dc1ab07-2f8f-42c9-aab7-7eef7f8b7d87');
+    $config = $widget->getConfiguration();
+    $config['settings']['upload_location'] = 'public://some_location';
+    $config['settings']['submit_text'] = 'Fancy submit';
+    $widget->setConfiguration($config);
+    $browser->save();
+
+    $this->drupalGet($browser->getDisplay()->path());
+    $page->attachFileToField('edit-upload-upload', \Drupal::root() . '/core/misc/druplicon.png');
+    $this->waitForAjaxToFinish();
+    $this->assertSession()->fieldExists('druplicon.png');
+    $page->pressButton('Fancy submit');
+    $this->assertSession()->statusCodeEquals(200);
+
+    // Check if the file was correctly uploaded to the EB destination.
+    $this->assertFileExists('public://some_location/druplicon.png');
+
+  }
+
+}
