diff --git a/src/Tests/EntityBrowserUploadWidgetWebTest.php b/src/Tests/EntityBrowserUploadWidgetWebTest.php
new file mode 100644
index 0000000..1b2dacd
--- /dev/null
+++ b/src/Tests/EntityBrowserUploadWidgetWebTest.php
@@ -0,0 +1,173 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\entity_browser\Tests\EntityBrowserUploadWidgetWebTest.
+ */
+
+namespace Drupal\entity_browser\Tests;
+
+use Drupal\simpletest\WebTestBase;
+use Drupal\user\Entity\Role;
+
+/**
+ * Entity Browser upload widget tests.
+ *
+ * @group entity_browser
+ */
+class EntityBrowserUploadWidgetWebTest extends WebTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = [
+    'system',
+    'user',
+    'node',
+    'file',
+    'image',
+    'field_ui',
+    'views_ui',
+    'entity',
+    'entity_reference',
+    'entity_browser',
+    'ctools',
+  ];
+
+  /**
+   * User with permissions to administer configuration, content types and
+   * entity browsers.
+   *
+   * @var \Drupal\user\Entity\User
+   */
+  protected $user;
+
+  /**
+   * Prepares environment for
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->user = $this->drupalCreateUser([
+      'administer users',
+      'administer permissions',
+      'administer site configuration',
+      'administer content types',
+      'administer node fields',
+      'administer node display',
+      'administer node form display',
+      'administer entity browsers',
+    ]);
+    $this->drupalLogin($this->user);
+  }
+
+  /**
+   * Tests Entity Browser upload widget.
+   */
+  public function testUploadWidget() {
+    // Create a new content type.
+    $edit = [
+      'name' => 'Entity browser',
+      'title_label' => 'An example Custom Content type.',
+      'type' => 'entity_browser',
+    ];
+    $this->drupalPostForm('admin/structure/types/add', $edit, t('Save and manage fields'));
+
+    // Create entity_reference field.
+    $edit = [
+      'new_storage_type' => 'entity_reference',
+      'label' => 'Images',
+      'field_name' => 'images',
+    ];
+    $this->drupalPostForm('admin/structure/types/manage/entity_browser/fields/add-field', $edit, t('Save and continue'));
+
+    // Set type of item to reference.
+    $edit = [
+      'settings[target_type]' => 'file',
+      'cardinality' => '-1',
+    ];
+    $this->drupalPostForm('/admin/structure/types/manage/entity_browser/fields/node.entity_browser.field_images/storage', $edit, t('Save field settings'));
+
+    // Create a new entity browser.
+    $entity_browser = $this->createEntityBrowser();
+
+    // Go to the form display page.
+    $this->drupalGet('/admin/structure/types/manage/entity_browser/form-display');
+
+    // Switch widget dropdown to entity browser and click on the widget settings
+    // button to open the widget settings form.
+    $edit = [
+      'fields[field_images][type]' => 'entity_browser_entity_reference',
+    ];
+    $this->drupalPostAjaxForm(NULL, $edit, 'field_images_settings_edit');
+
+    // Update widget settings form.
+    $edit = [
+      'fields[field_images][settings_edit_form][settings][entity_browser]' => $entity_browser->id(),
+      'fields[field_images][settings_edit_form][settings][field_widget_display]' => 'label',
+      'fields[field_images][settings_edit_form][settings][field_widget_edit]' => 1,
+      'fields[field_images][settings_edit_form][settings][field_widget_remove]' => 1,
+      'fields[field_images][settings_edit_form][settings][open]' => 1,
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Update'));
+    $this->drupalPostForm(NULL, [], t('Save'));
+
+    // Add new node and test if the upload widget is present.
+    $this->drupalGet('/node/add/entity_browser');
+    $this->assertLink('Open browser');
+    $this->assertResponse(200);
+    $this->drupalGet('/entity-browser/iframe/' . $entity_browser->id(), ['query' => ['uuid' => $entity_browser->uuid(), 'original_path' => '/node/add/entity_browser']]);
+    $this->assertFieldByName('files[upload][]');
+
+  }
+
+  /**
+   * Creates and tests a new entity_browser with an upload widget.
+   *
+   * @return \Drupal\entity_browser\EntityBrowserInterface
+   *   The fully loaded entity_browser created.
+   */
+  public function createEntityBrowser() {
+    // Add a new entity_browser.
+    $this->drupalGet('/admin/config/content/entity_browser/add');
+    $edit = [
+      'label' => 'test entity browser',
+      'id' => 'test_entity_browser',
+      'display' => 'iframe',
+      'widget_selector' => 'tabs',
+      'selection_display' => 'no_display',
+      'submit_text' => 'Select',
+    ];
+    $this->drupalPostForm(NULL, $edit, 'Next');
+    // Display configuration step.
+    $this->assertUrl('/admin/config/content/entity_browser/test_entity_browser/display', ['query' => ['js' => 'nojs']]);
+    $edit = [
+      'width' => 720,
+      'height' => 500,
+      'link_text' => 'Open browser',
+      'auto_open' => FALSE,
+    ];
+    $this->drupalPostForm(NULL, $edit, 'Next');
+    // Widget selector step.
+    $this->assertUrl('/admin/config/content/entity_browser/test_entity_browser/widget_selector', ['query' => ['js' => 'nojs']]);
+    $this->drupalPostForm(NULL, [], 'Next');
+    // Selection display step.
+    $this->assertUrl('/admin/config/content/entity_browser/test_entity_browser/selection_display', ['query' => ['js' => 'nojs']]);
+    $this->drupalPostForm(NULL, [], 'Next');
+    // Widgets step.
+    $this->assertUrl('/admin/config/content/entity_browser/test_entity_browser/widgets', ['query' => ['js' => 'nojs']]);
+    $this->drupalPostAjaxForm(NULL, ['widget' => 'upload'], 'widget');
+    $this->drupalPostForm(NULL, [], 'Finish');
+    $loaded_entity_browser = $this->container->get('entity_type.manager')
+      ->getStorage('entity_browser')
+      ->load('test_entity_browser');
+    // Add the permission to access to this entity_browser page to the user.
+    $role = Role::load('authenticated');
+    $role->grantPermission('access test_entity_browser entity browser pages');
+    $role->save();
+    return $loaded_entity_browser;
+  }
+
+}
