diff --git a/core/modules/views/src/Plugin/views/exposed_form/ExposedFormPluginBase.php b/core/modules/views/src/Plugin/views/exposed_form/ExposedFormPluginBase.php
index 87e5ef38ebe9c000e6ee22682ead0e368e99ff3f..d986a97d0574c77344722e1eaaa211c7720317d7 100644
--- a/core/modules/views/src/Plugin/views/exposed_form/ExposedFormPluginBase.php
+++ b/core/modules/views/src/Plugin/views/exposed_form/ExposedFormPluginBase.php
@@ -246,32 +246,6 @@ public function exposedFormAlter(&$form, FormStateInterface $form_state) {
       }
     }
 
-    // Get an array of exposed filters and exposed required filters,
-    // keyed by identifier option.
-    $exposed_filters = [];
-    $exposed_required_filters = [];
-    foreach ($this->view->filter as $id => $handler) {
-      if ($handler->canExpose() && $handler->isExposed() && !empty($handler->options['expose']['identifier'])) {
-        if ($handler->options['expose']['required'] && $handler->options['plugin_id'] !== 'boolean') {
-          $exposed_required_filters[$handler->options['expose']['identifier']] = $id;
-        }
-        $exposed_filters[$handler->options['expose']['identifier']] = $id;
-      }
-    }
-
-    // If any required exposed filters loop through them to see if they have any
-    // input. If not don't auto process the form.
-    if (!empty($exposed_required_filters)) {
-      // Prevent form validation if exposed filter is not set.
-      $exposed_input = $this->view->getExposedInput();
-      foreach ($exposed_required_filters as $key => $required_filter) {
-        if (!$exposed_input || empty($exposed_input[$key])) {
-          $form_state->setAlwaysProcess(FALSE);
-          break;
-        }
-      }
-    }
-
     if (!empty($this->options['reset_button'])) {
       $form['actions']['reset'] = [
         '#value' => $this->options['reset_button_label'],
@@ -279,6 +253,13 @@ public function exposedFormAlter(&$form, FormStateInterface $form_state) {
         '#weight' => 10,
       ];
 
+      // Get an array of exposed filters, keyed by identifier option.
+      $exposed_filters = [];
+      foreach ($this->view->filter as $id => $handler) {
+        if ($handler->canExpose() && $handler->isExposed() && !empty($handler->options['expose']['identifier'])) {
+          $exposed_filters[$handler->options['expose']['identifier']] = $id;
+        }
+      }
       $all_exposed = array_merge($exposed_sorts, $exposed_filters);
 
       // Set the access to FALSE if there is no exposed input.
diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_exposed_form_buttons_required.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_exposed_form_buttons_required.yml
deleted file mode 100644
index 8c9a08c87e7f8ac3c8566113a1ebec845c1be0fa..0000000000000000000000000000000000000000
--- a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_exposed_form_buttons_required.yml
+++ /dev/null
@@ -1,124 +0,0 @@
-langcode: en
-status: true
-dependencies:
-  config:
-    - core.entity_view_mode.node.teaser
-    - node.type.article
-    - node.type.page
-    - node.type.recipe
-  module:
-    - node
-id: test_exposed_form_buttons_required
-label: ''
-module: views
-description: ''
-tag: ''
-base_table: node_field_data
-base_field: nid
-display:
-  default:
-    id: default
-    display_title: Default
-    display_plugin: default
-    position: 0
-    display_options:
-      pager:
-        type: full
-      exposed_form:
-        type: input_required
-        options:
-          submit_button: Apply
-          reset_button: true
-          reset_button_label: Reset
-          exposed_sorts_label: 'Sort by'
-          expose_sort_order: true
-          sort_asc_label: Asc
-          sort_desc_label: Desc
-          text_input_required: 'Select any filter and click on Apply to see results'
-          text_input_required_format: basic_html
-      access:
-        type: none
-      cache:
-        type: tag
-      filters:
-        type:
-          id: type
-          table: node_field_data
-          field: type
-          relationship: none
-          group_type: group
-          admin_label: ''
-          entity_type: node
-          entity_field: type
-          plugin_id: in_operator
-          operator: in
-          value:
-            all: all
-            article: article
-            page: page
-          group: 1
-          exposed: true
-          expose:
-            operator_id: type_op
-            label: 'Content: Type'
-            description: 'Exposed description'
-            use_operator: false
-            operator: ''
-            operator_limit_selection: false
-            operator_list: {  }
-            identifier: type
-            required: true
-            remember: false
-            multiple: false
-            remember_roles:
-              authenticated: authenticated
-              anonymous: '0'
-              administrator: '0'
-              author: '0'
-              editor: '0'
-            reduce: false
-          is_grouped: false
-          group_info:
-            label: ''
-            description: ''
-            identifier: ''
-            optional: true
-            widget: select
-            multiple: false
-            remember: false
-            default_group: All
-            default_group_multiple: {  }
-            group_items: {  }
-      style:
-        type: default
-      row:
-        type: 'entity:node'
-      query:
-        type: views_query
-        options:
-          query_comment: ''
-      display_extenders: {  }
-    cache_metadata:
-      max-age: -1
-      contexts:
-        - 'languages:language_interface'
-        - url
-        - url.query_args
-        - 'user.node_grants:view'
-      tags: {  }
-  page_1:
-    id: page_1
-    display_title: Page
-    display_plugin: page
-    position: 0
-    display_options:
-      display_extenders: {  }
-      path: test_exposed_form_buttons_required
-    cache_metadata:
-      max-age: -1
-      contexts:
-        - 'languages:language_interface'
-        - url
-        - url.query_args
-        - 'user.node_grants:view'
-      tags: {  }
diff --git a/core/modules/views/tests/src/Functional/Plugin/ExposedFormTest.php b/core/modules/views/tests/src/Functional/Plugin/ExposedFormTest.php
index 4a875a3e3a1072354e307bf8bc03924e2a1c82d3..d231907de9249658a842640cfdae2eb9fec94bcd 100644
--- a/core/modules/views/tests/src/Functional/Plugin/ExposedFormTest.php
+++ b/core/modules/views/tests/src/Functional/Plugin/ExposedFormTest.php
@@ -8,6 +8,7 @@
 use Drupal\Tests\views\Functional\ViewTestBase;
 use Drupal\views\ViewExecutable;
 use Drupal\views\Views;
+use Drupal\views\Entity\View;
 
 /**
  * Tests exposed forms functionality.
@@ -23,7 +24,7 @@ class ExposedFormTest extends ViewTestBase {
    *
    * @var array
    */
-  public static $testViews = ['test_exposed_form_buttons', 'test_exposed_form_buttons_required', 'test_exposed_block', 'test_exposed_form_sort_items_per_page', 'test_exposed_form_pager'];
+  public static $testViews = ['test_exposed_form_buttons', 'test_exposed_block', 'test_exposed_form_sort_items_per_page', 'test_exposed_form_pager'];
 
   /**
    * Modules to enable.
@@ -299,27 +300,23 @@ public function providerTestExposedBlock() {
    * Tests the input required exposed form type.
    */
   public function testInputRequired() {
-    $this->drupalGet('test_exposed_form_buttons_required');
+    $view = View::load('test_exposed_form_buttons');
+    $display = &$view->getDisplay('default');
+    $display['display_options']['exposed_form']['type'] = 'input_required';
+    $view->save();
+
+    $this->drupalGet('test_exposed_form_buttons');
     $this->assertSession()->statusCodeEquals(200);
-    $this->helperButtonHasLabel('edit-submit-test-exposed-form-buttons-required', 'Apply');
+    $this->helperButtonHasLabel('edit-submit-test-exposed-form-buttons', 'Apply');
 
     // Ensure that no results are displayed by default when no input is
     // provided.
     $this->assertSession()->elementNotExists('xpath', "//div[contains(@class, 'views-row')]");
-    // Ensure that no error element is shown.
-    $this->assertSession()->elementNotExists('css', '.messages--error');
-    $this->assertFalse($this->getSession()->getPage()->findField('type')->hasClass('error'));
-    $edit = [
-      'type' => 'article',
-    ];
-    $this->submitForm($edit, 'Apply');
+
+    $this->drupalGet('test_exposed_form_buttons', ['query' => ['type' => 'article']]);
 
     // Ensure that results are displayed by default when input is provided.
     $this->assertSession()->elementsCount('xpath', "//div[contains(@class, 'views-row')]", 5);
-
-    // Test exposed filter on preview.
-    $this->drupalGet('admin/structure/views/view/test_view/test_exposed_form_buttons_required');
-    $this->assertSession()->elementNotExists('css', '.messages--error');
   }
 
   /**
@@ -330,6 +327,7 @@ public function testTextInputRequired() {
     $display = &$view->storage->getDisplay('default');
     $display['display_options']['exposed_form']['type'] = 'input_required';
     // Set up the "on demand text".
+    // @see https://www.drupal.org/node/535868
     $on_demand_text = 'Select any filter and click Apply to see results.';
     $display['display_options']['exposed_form']['options']['text_input_required'] = $on_demand_text;
     $display['display_options']['exposed_form']['options']['text_input_required_format'] = filter_default_format();