diff --git a/core/modules/outside_in/tests/src/FunctionalJavascript/OffCanvasTest.php b/core/modules/outside_in/tests/src/FunctionalJavascript/OffCanvasTest.php
index 21004c10a5..f590996c70 100644
--- a/core/modules/outside_in/tests/src/FunctionalJavascript/OffCanvasTest.php
+++ b/core/modules/outside_in/tests/src/FunctionalJavascript/OffCanvasTest.php
@@ -12,15 +12,20 @@ class OffCanvasTest extends OutsideInJavascriptTestBase {
   /**
    * {@inheritdoc}
    */
-  public static $modules = ['block', 'system', 'toolbar', 'outside_in', 'off_canvas_test'];
+  public static $modules = [
+    'block',
+    'system',
+    'toolbar',
+    'outside_in',
+    'off_canvas_test',
+  ];
 
   /**
    * Tests that regular non-contextual links will work with the off-canvas dialog.
    */
   public function testOffCanvasLinks() {
-    $themes = ['bartik', 'stark'];
     // Test the same functionality on multiple themes.
-    foreach ($themes as $theme) {
+    foreach ($this->getTestThemes() as $theme) {
       $this->enableTheme($theme);
       $this->drupalGet('/off-canvas-test-links');
 
@@ -73,7 +78,6 @@ public function testOffCanvasLinks() {
    * Tests the body displacement behaves differently at a narrow width.
    */
   public function testNarrowWidth() {
-    $themes = ['stark', 'bartik'];
     $narrow_width_breakpoint = 768;
     $offset = 20;
     $height = 800;
@@ -81,7 +85,7 @@ public function testNarrowWidth() {
     $web_assert = $this->assertSession();
 
     // Test the same functionality on multiple themes.
-    foreach ($themes as $theme) {
+    foreach ($this->getTestThemes() as $theme) {
       $this->enableTheme($theme);
       // Testing at the wider width.
       $this->getSession()->resizeWindow($narrow_width_breakpoint + $offset, $height);
@@ -103,4 +107,11 @@ public function testNarrowWidth() {
     }
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  protected function getTestThemes() {
+    return array_merge(parent::getTestThemes(), ['seven']);
+  }
+
 }
diff --git a/core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInBlockFormTest.php b/core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInBlockFormTest.php
index 01e44b7194..8efc43bbb3 100644
--- a/core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInBlockFormTest.php
+++ b/core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInBlockFormTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\outside_in\FunctionalJavascript;
 
+use Drupal\block\Entity\Block;
 use Drupal\block_content\Entity\BlockContent;
 use Drupal\block_content\Entity\BlockContentType;
 use Drupal\user\Entity\Role;
@@ -42,10 +43,6 @@ protected function setUp() {
 
     $this->createBlockContentType('basic', TRUE);
     $block_content = $this->createBlockContent('Custom Block', 'basic', TRUE);
-
-    // @todo Ensure that this test class works against bartik and stark:
-    //   https://www.drupal.org/node/2784881.
-    $this->enableTheme('bartik');
     $user = $this->createUser([
       'administer blocks',
       'access contextual links',
@@ -55,11 +52,9 @@ protected function setUp() {
       'search content',
     ]);
     $this->drupalLogin($user);
-
     $this->placeBlock('block_content:' . $block_content->uuid(), ['id' => 'custom']);
-    $this->placeBlock('system_powered_by_block', ['id' => 'powered']);
-    $this->placeBlock('system_branding_block', ['id' => 'branding']);
-    $this->placeBlock('search_form_block', ['id' => 'search']);
+
+
   }
 
   /**
@@ -67,81 +62,83 @@ protected function setUp() {
    *
    * @dataProvider providerTestBlocks
    */
-  public function testBlocks($block_id, $new_page_text, $element_selector, $label_selector, $button_text, $toolbar_item) {
+  public function testBlocks($block_plugin, $new_page_text, $element_selector, $label_selector, $button_text, $toolbar_item) {
     $web_assert = $this->assertSession();
     $page = $this->getSession()->getPage();
-    $block_selector = '#block-' . $block_id;
-    $this->drupalGet('user');
+    foreach ($this->getTestThemes() as $theme) {
+      $this->enableTheme($theme);
+      $block = $this->placeBlock($block_plugin);
+      $block_selector = str_replace('_', '-', $this->getBlockSelector($block));
+      $block_id = $block->id();
+      $this->drupalGet('user');
 
-    $link = $page->find('css', "$block_selector .contextual-links li a");
-    $this->assertEquals('Quick edit', $link->getText(), "'Quick edit' is the first contextual link for the block.");
-    $this->assertContains("/admin/structure/block/manage/$block_id/off-canvas?destination=user/2", $link->getAttribute('href'));
-
-    if (isset($toolbar_item)) {
-      // Check that you can open a toolbar tray and it will be closed after
-      // entering edit mode.
-      if ($element = $page->find('css', "#toolbar-administration a.is-active")) {
-        // If a tray was open from page load close it.
-        $element->click();
-        $this->waitForNoElement("#toolbar-administration a.is-active");
+      $link = $page->find('css', "$block_selector .contextual-links li a");
+      $this->assertEquals('Quick edit', $link->getText(), "'Quick edit' is the first contextual link for the block.");
+      $this->assertContains("/admin/structure/block/manage/$block_id/off-canvas?destination=user/2", $link->getAttribute('href'));
+
+      if (isset($toolbar_item)) {
+        // Check that you can open a toolbar tray and it will be closed after
+        // entering edit mode.
+        if ($element = $page->find('css', "#toolbar-administration a.is-active")) {
+          // If a tray was open from page load close it.
+          $element->click();
+          $this->waitForNoElement("#toolbar-administration a.is-active");
+        }
+        $page->find('css', $toolbar_item)->click();
+        $web_assert->waitForElementVisible('css', "{$toolbar_item}.is-active");
       }
-      $page->find('css', $toolbar_item)->click();
-      $web_assert->waitForElementVisible('css', "{$toolbar_item}.is-active");
-    }
-    $this->enableEditMode();
-    if (isset($toolbar_item)) {
-      $this->waitForNoElement("{$toolbar_item}.is-active");
-    }
-
-    $this->openBlockForm($block_selector);
-
-    switch ($block_id) {
-      case 'powered':
-        // Fill out form, save the form.
-        $page->fillField('settings[label]', $new_page_text);
-        $page->checkField('settings[label_display]');
-        break;
-
-      case 'branding':
-        // Fill out form, save the form.
-        $page->fillField('settings[site_information][site_name]', $new_page_text);
-        break;
-    }
+      $this->enableEditMode();
+      if (isset($toolbar_item)) {
+        $this->waitForNoElement("{$toolbar_item}.is-active");
+      }
+      $this->openBlockForm($block_selector);
+      switch ($block_plugin) {
+        case 'system_powered_by_block':
+          // Fill out form, save the form.
+          $page->fillField('settings[label]', $new_page_text);
+          $page->checkField('settings[label_display]');
+          break;
 
-    if (isset($new_page_text)) {
-      $page->pressButton($button_text);
-      // Make sure the changes are present.
-      // @todo Use a wait method that will take into account the form submitting
-      //   and all JavaScript activity. https://www.drupal.org/node/2837676
-      //   The use \Behat\Mink\WebAssert::pageTextContains to check text.
-      $this->assertJsCondition('jQuery("' . $block_selector . ' ' . $label_selector . '").html() == "' . $new_page_text . '"');
-    }
+        case 'system_branding_block':
+          // Fill out form, save the form.
+          $page->fillField('settings[site_information][site_name]', $new_page_text);
+          break;
+      }
 
-    $this->openBlockForm($block_selector);
+      if (isset($new_page_text)) {
+        $page->pressButton($button_text);
+        // Make sure the changes are present.
+        // @todo Use a wait method that will take into account the form submitting
+        //   and all JavaScript activity. https://www.drupal.org/node/2837676
+        //   The use \Behat\Mink\WebAssert::pageTextContains to check text.
+        $this->assertJsCondition('jQuery("' . $block_selector . ' ' . $label_selector . '").html() == "' . $new_page_text . '"');
+      }
 
-    $this->disableEditMode();
-    // Canvas should close when editing module is closed.
-    $this->waitForOffCanvasToClose();
+      $this->openBlockForm($block_selector);
 
-    $this->enableEditMode();
+      $this->disableEditMode();
+      // Canvas should close when editing module is closed.
+      $this->waitForOffCanvasToClose();
 
-    $element_selector = "$block_selector {$element_selector}";
-    // Open block form by clicking a element inside the block.
-    // This confirms that default action for links and form elements is
-    // suppressed.
-    $this->openBlockForm($element_selector);
+      $this->enableEditMode();
 
-    // Exit edit mode using ESC.
-    $web_assert->elementTextContains('css', '.contextual-toolbar-tab button', 'Editing');
-    $web_assert->elementAttributeContains('css', '.dialog-off-canvas__main-canvas', 'class', 'js-outside-in-edit-mode');
-    // Simulate press the Escape key.
-    $this->getSession()->executeScript('jQuery("body").trigger(jQuery.Event("keyup", { keyCode: 27 }));');
-    $this->waitForOffCanvasToClose();
-    $this->getSession()->wait(100);
-    $this->assertEditModeDisabled();
-    $web_assert->elementTextContains('css', '#drupal-live-announce', 'Exited edit mode.');
-    $web_assert->elementTextNotContains('css', '.contextual-toolbar-tab button', 'Editing');
-    $web_assert->elementAttributeNotContains('css', '.dialog-off-canvas__main-canvas', 'class', 'js-outside-in-edit-mode');
+      // Open block form by clicking a element inside the block.
+      // This confirms that default action for links and form elements is
+      // suppressed.
+      $this->openBlockForm("$block_selector {$element_selector}");
+      $web_assert->elementTextContains('css', '.contextual-toolbar-tab button', 'Editing');
+      $web_assert->elementAttributeContains('css', '.dialog-off-canvas__main-canvas', 'class', 'js-outside-in-edit-mode');
+      // Simulate press the Escape key.
+      $this->getSession()->executeScript('jQuery("body").trigger(jQuery.Event("keyup", { keyCode: 27 }));');
+      $this->waitForOffCanvasToClose();
+      $this->getSession()->wait(100);
+      $this->assertEditModeDisabled();
+      $web_assert->elementTextContains('css', '#drupal-live-announce', 'Exited edit mode.');
+      $web_assert->elementTextNotContains('css', '.contextual-toolbar-tab button', 'Editing');
+      $web_assert->elementAttributeNotContains('css', '.dialog-off-canvas__main-canvas', 'class', 'js-outside-in-edit-mode');
+      // Delete the block that was placed for the current theme.
+      $block->delete();
+    }
   }
 
   /**
@@ -150,23 +147,23 @@ public function testBlocks($block_id, $new_page_text, $element_selector, $label_
   public function providerTestBlocks() {
     $blocks = [
       'block-powered' => [
-        'id' => 'powered',
+        'block_plugin' => 'system_powered_by_block',
         'new_page_text' => 'Can you imagine anyone showing the label on this block?',
-        'element_selector' => '.content a',
+        'element_selector' => 'span a',
         'label_selector' => 'h2',
         'button_text' => 'Save Powered by Drupal',
         'toolbar_item' => '#toolbar-item-user',
       ],
       'block-branding' => [
-        'id' => 'branding',
+        'block_plugin' => 'system_branding_block',
         'new_page_text' => 'The site that will live a very short life.',
-        'element_selector' => 'a[rel="home"]:nth-child(2)',
-        'label_selector' => '.site-branding__name a',
+        'element_selector' => "a[rel='home']:last-child",
+        'label_selector' => "a[rel='home']:last-child",
         'button_text' => 'Save Site branding',
         'toolbar_item' => '#toolbar-item-administration',
       ],
       'block-search' => [
-        'id' => 'search',
+        'block_plugin' => 'search_form_block',
         'new_page_text' => NULL,
         'element_selector' => '#edit-submit',
         'label_selector' => 'h2',
@@ -226,8 +223,8 @@ protected function openBlockForm($block_selector) {
    */
   public function testQuickEditLinks() {
     $quick_edit_selector = '#quickedit-entity-toolbar';
-    $body_selector = '.field--name-body p';
-    $block_selector = '#block-powered';
+    $node_selector = '[data-quickedit-entity-id="node/1"]';
+    $body_selector = '[data-quickedit-field-id="node/1/body/en/full"]';
     $web_assert = $this->assertSession();
     // Create a Content type and two test nodes.
     $this->createContentType(['type' => 'page']);
@@ -249,85 +246,100 @@ public function testQuickEditLinks() {
       ]
     );
     $page = $this->getSession()->getPage();
-    // Load the same page twice.
-    foreach ([1, 2] as $page_load_times) {
-      $this->drupalGet('node/' . $node->id());
-
-      $this->waitForToolbarToLoad();
-
-      // The 2nd page load we should already be in edit mode.
-      if ($page_load_times == 1) {
+    $block_plugin = 'system_powered_by_block';
+
+    foreach ($this->getTestThemes() as $theme) {
+
+      $this->enableTheme($theme);
+
+      $block = $this->placeBlock($block_plugin);
+      $block_selector = str_replace('_', '-', $this->getBlockSelector($block));
+      // Load the same page twice.
+      foreach ([1, 2] as $page_load_times) {
+        $this->drupalGet('node/' . $node->id());
+        // Waiting for Toolbar module.
+        // @todo Remove the hack after https://www.drupal.org/node/2542050.
+        $web_assert->waitForElementVisible('css', '.toolbar-fixed');
+        // Waiting for Toolbar animation.
+        $web_assert->assertWaitOnAjaxRequest();
+        // The 2nd page load we should already be in edit mode.
+        if ($page_load_times == 1) {
+          $this->enableEditMode();
+        }
+        // In Edit mode clicking field should open QuickEdit toolbar.
+        $page->find('css', $body_selector)->click();
+        $web_assert->waitForElementVisible('css', $quick_edit_selector);
+
+        $this->disableEditMode();
+        // Exiting Edit mode should close QuickEdit toolbar.
+        $web_assert->elementNotExists('css', $quick_edit_selector);
+        // When not in Edit mode QuickEdit toolbar should not open.
+        $page->find('css', $body_selector)->click();
+        $web_assert->elementNotExists('css', $quick_edit_selector);
         $this->enableEditMode();
+        $this->openBlockForm($block_selector);
+        $page->find('css', $body_selector)->click();
+        $web_assert->waitForElementVisible('css', $quick_edit_selector);
+        // Off-canvas dialog should be closed when opening QuickEdit toolbar.
+        $this->waitForOffCanvasToClose();
+
+        $this->openBlockForm($block_selector);
+        // QuickEdit toolbar should be closed when opening Off-canvas dialog.
+        $web_assert->elementNotExists('css', $quick_edit_selector);
       }
-      // In Edit mode clicking field should open QuickEdit toolbar.
-      $page->find('css', $body_selector)->click();
-      $web_assert->waitForElementVisible('css', $quick_edit_selector);
-
+      // Check using contextual links to invoke QuickEdit and open the tray.
+      $this->drupalGet('node/' . $node->id());
+      $web_assert->assertWaitOnAjaxRequest();
       $this->disableEditMode();
-      // Exiting Edit mode should close QuickEdit toolbar.
-      $web_assert->elementNotExists('css', $quick_edit_selector);
-      // When not in Edit mode QuickEdit toolbar should not open.
-      $page->find('css', $body_selector)->click();
-      $web_assert->elementNotExists('css', $quick_edit_selector);
-
-      $this->enableEditMode();
-      $this->openBlockForm($block_selector);
-      $page->find('css', $body_selector)->click();
+      // Open QuickEdit toolbar before going into Edit mode.
+      $this->clickContextualLink($node_selector, "Quick edit");
       $web_assert->waitForElementVisible('css', $quick_edit_selector);
-      // OffCanvas should be closed when opening QuickEdit toolbar.
-      $this->waitForOffCanvasToClose();
-
-      $this->openBlockForm($block_selector);
+      // Open off-canvas and enter Edit mode via contextual link.
+      $this->clickContextualLink($block_selector, "Quick edit");
+      $this->waitForOffCanvasToOpen();
       // QuickEdit toolbar should be closed when opening off-canvas dialog.
       $web_assert->elementNotExists('css', $quick_edit_selector);
+      // Open QuickEdit toolbar via contextual link while in Edit mode.
+      $this->clickContextualLink($node_selector, "Quick edit", FALSE);
+      $this->waitForOffCanvasToClose();
+      $web_assert->waitForElementVisible('css', $quick_edit_selector);
+      $this->disableEditMode();
     }
 
-    // Check using contextual links to invoke QuickEdit and open the tray.
-    $this->drupalGet('node/' . $node->id());
-    $web_assert->assertWaitOnAjaxRequest();
-    $this->disableEditMode();
-    // Open QuickEdit toolbar before going into Edit mode.
-    $this->clickContextualLink('.node', "Quick edit");
-    $web_assert->waitForElementVisible('css', $quick_edit_selector);
-    // Open off-canvas and enter Edit mode via contextual link.
-    $this->clickContextualLink($block_selector, "Quick edit");
-    $this->waitForOffCanvasToOpen();
-    // QuickEdit toolbar should be closed when opening off-canvas dialog.
-    $web_assert->elementNotExists('css', $quick_edit_selector);
-    // Open QuickEdit toolbar via contextual link while in Edit mode.
-    $this->clickContextualLink('.node', "Quick edit", FALSE);
-    $this->waitForOffCanvasToClose();
-    $web_assert->waitForElementVisible('css', $quick_edit_selector);
   }
 
   /**
    * Tests enabling and disabling Edit Mode.
    */
   public function testEditModeEnableDisable() {
-    foreach (['contextual_link', 'toolbar_link'] as $enable_option) {
-      $this->drupalGet('user');
-      $this->assertEditModeDisabled();
-      switch ($enable_option) {
-        // Enable Edit mode.
-        case 'contextual_link':
-          $this->clickContextualLink('#block-powered', "Quick edit");
-          $this->waitForOffCanvasToOpen();
-          $this->assertEditModeEnabled();
-          break;
-
-        case 'toolbar_link':
-          $this->enableEditMode();
-          break;
+    foreach ($this->getTestThemes() as $theme) {
+      $this->enableTheme($theme);
+      $block = $this->placeBlock('system_powered_by_block');
+      foreach (['contextual_link', 'toolbar_link'] as $enable_option) {
+        $this->drupalGet('user');
+        $this->assertEditModeDisabled();
+        switch ($enable_option) {
+          // Enable Edit mode.
+          case 'contextual_link':
+            $this->clickContextualLink($this->getBlockSelector($block), "Quick edit");
+            $this->waitForOffCanvasToOpen();
+            $this->assertEditModeEnabled();
+            break;
+
+          case 'toolbar_link':
+            $this->enableEditMode();
+            break;
+        }
+        $this->disableEditMode();
+
+        // Make another page request to ensure Edit mode is still disabled.
+        $this->drupalGet('user');
+        $this->assertEditModeDisabled();
+        // Make sure on this page request it also re-enables and disables
+        // correctly.
+        $this->enableEditMode();
+        $this->disableEditMode();
       }
-      $this->disableEditMode();
-
-      // Make another page request to ensure Edit mode is still disabled.
-      $this->drupalGet('user');
-      $this->assertEditModeDisabled();
-      // Make sure on this page request it also re-enables and disables
-      // correctly.
-      $this->enableEditMode();
-      $this->disableEditMode();
     }
   }
 
@@ -365,11 +377,9 @@ protected function assertEditModeDisabled() {
    */
   protected function pressToolbarEditButton() {
     $this->assertSession()->waitForElement('css', '[data-contextual-id] .contextual-links a');
-
     $edit_button = $this->getSession()
       ->getPage()
       ->find('css', static::TOOLBAR_EDIT_LINK_SELECTOR);
-
     $edit_button->press();
   }
 
@@ -449,4 +459,12 @@ public function testCustomBlockLinks() {
     $this->assertTrue(strstr($href, '/admin/structure/block/manage/custom/off-canvas?destination=user/2') !== FALSE);
   }
 
+  /**
+   * @param \Drupal\block\Entity\Block $block
+   * @return string
+   */
+  public function getBlockSelector(Block $block) {
+    return '#block-' . $block->id();
+  }
+
 }
diff --git a/core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInJavascriptTestBase.php b/core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInJavascriptTestBase.php
index 2fd5f54f0b..2dcc40fb44 100644
--- a/core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInJavascriptTestBase.php
+++ b/core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInJavascriptTestBase.php
@@ -130,4 +130,14 @@ protected function waitForToolbarToLoad() {
     $web_assert->assertWaitOnAjaxRequest();
   }
 
+  /**
+   * Get themes to test.
+   *
+   * @return string[]
+   *   Theme names to test.
+   */
+  protected function getTestThemes() {
+    return ['bartik', 'stark', 'classy', 'stable'];
+  }
+
 }
