diff --git a/core/modules/system/src/Plugin/views/field/BulkForm.php b/core/modules/system/src/Plugin/views/field/BulkForm.php
index f9f581b426cab96d5a845c6648fe8b206883d7ed..a2cfdd2583de2e6bbfa0982d2173fae2290b4e76 100644
--- a/core/modules/system/src/Plugin/views/field/BulkForm.php
+++ b/core/modules/system/src/Plugin/views/field/BulkForm.php
@@ -345,7 +345,8 @@ protected function getBulkOptions($filtered = TRUE) {
   public function viewsFormSubmit(&$form, FormStateInterface $form_state) {
     if ($form_state->get('step') == 'views_form_views_form') {
       // Filter only selected checkboxes.
-      $selected = array_filter($form_state->getValue($this->options['id']));
+      $user_input = $form_state->getUserInput();
+      $selected = array_filter($user_input[$this->options['id']]);
       $entities = array();
       $action = $this->actions[$form_state->getValue('action')];
       $count = 0;
diff --git a/core/modules/views/src/Tests/Plugin/ViewsBulkTest.php b/core/modules/views/src/Tests/Plugin/ViewsBulkTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..fd988895349f9234cbefc978c5830657f1714001
--- /dev/null
+++ b/core/modules/views/src/Tests/Plugin/ViewsBulkTest.php
@@ -0,0 +1,85 @@
+<?php
+
+namespace Drupal\views\Tests\Plugin;
+
+use Drupal\simpletest\WebTestBase;
+
+/**
+ * Tests views bulk operation selection.
+ *
+ * @group views
+ */
+class ViewsBulkTest extends WebTestBase {
+
+  /**
+   * An admin user
+   *
+   * @var \Drupal\user\UserInterface
+   */
+  protected $admin_user;
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('node', 'views');
+
+  public function setUp() {
+    parent::setUp();
+
+    $this->drupalCreateContentType(['type' => 'page']);
+    $this->admin_user = $this->createUser(['bypass node access', 'administer nodes', 'access content overview']);
+  }
+
+  /**
+   * Tests bulk selection.
+   */
+  public function testBulkSelection() {
+
+    // Create first node, set updated time to the past.
+    $node_1 = $this->drupalCreateNode([
+      'type' => 'page',
+      'title' => 'The first node',
+      'changed' => \Drupal::time()->getRequestTime() - 180
+    ]);
+
+    // Login as administrator and go to admin/content.
+    $this->drupalLogin($this->admin_user);
+    $this->drupalGet('admin/content');
+    $this->assertText($node_1->getTitle());
+
+    // Create second node now that the admin overview has been rendered.
+    $node_2 = $this->drupalCreateNode([
+      'type' => 'page',
+      'title' => 'The second node',
+      'changed' => \Drupal::time()->getRequestTime() - 120
+    ]);
+
+    // Now click 'Apply to selected items' and assert the first node is selected
+    // on the confirm form.
+    $this->drupalPostForm(NULL, ['node_bulk_form[0]' => TRUE], 'Apply to selected items');
+    $this->assertText($node_1->getTitle());
+    $this->assertNoText($node_2->getTitle());
+
+    // Change the pager limit to 2.
+    $this->config('views.view.content')->set('display.default.display_options.pager.options.items_per_page', 2)->save();
+    $this->drupalGet('admin/content');
+
+    // Render the overview page again.
+    $this->drupalGet('admin/content');
+
+    // Create third node now that the admin overview has been rendered.
+    $node_3 = $this->drupalCreateNode([
+        'type' => 'page',
+        'title' => 'The third node']
+    );
+
+    // Now click 'Apply to selected items' and assert the second node is
+    // selected on the confirm form.
+    $this->drupalPostForm(NULL, ['node_bulk_form[1]' => TRUE], 'Apply to selected items');
+    $this->assertText($node_1->getTitle());
+    $this->assertNoText($node_3->getTitle());
+  }
+
+}