diff --git a/core/modules/block/tests/modules/block_test/src/Plugin/Block/TestAccessBlock.php b/core/modules/block/tests/modules/block_test/src/Plugin/Block/TestAccessBlock.php
index e558bcb..c416d17 100644
--- a/core/modules/block/tests/modules/block_test/src/Plugin/Block/TestAccessBlock.php
+++ b/core/modules/block/tests/modules/block_test/src/Plugin/Block/TestAccessBlock.php
@@ -20,6 +20,8 @@
  */
 class TestAccessBlock extends BlockBase implements ContainerFactoryPluginInterface {
 
+  protected $state;
+
   /**
    * Tests the test access block.
    *
diff --git a/core/modules/block/src/Tests/BlockAdminThemeTest.php b/core/modules/block/tests/src/Functional/BlockAdminThemeTest.php
similarity index 94%
rename from core/modules/block/src/Tests/BlockAdminThemeTest.php
rename to core/modules/block/tests/src/Functional/BlockAdminThemeTest.php
index 8773f03..88f35e4 100644
--- a/core/modules/block/src/Tests/BlockAdminThemeTest.php
+++ b/core/modules/block/tests/src/Functional/BlockAdminThemeTest.php
@@ -1,15 +1,15 @@
 <?php
 
-namespace Drupal\block\Tests;
+namespace Drupal\Tests\block\Functional;
 
-use Drupal\simpletest\WebTestBase;
+use Drupal\Tests\BrowserTestBase;
 
 /**
  * Tests the block system with admin themes.
  *
  * @group block
  */
-class BlockAdminThemeTest extends WebTestBase {
+class BlockAdminThemeTest extends BrowserTestBase {
 
   /**
    * Modules to install.
diff --git a/core/modules/block/tests/src/Functional/BlockCacheTest.php b/core/modules/block/tests/src/Functional/BlockCacheTest.php
index e5bb360..c747ae4 100644
--- a/core/modules/block/tests/src/Functional/BlockCacheTest.php
+++ b/core/modules/block/tests/src/Functional/BlockCacheTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\Tests\block\Functional;
 
 use Drupal\Core\Cache\Cache;
+use Drupal\FunctionalJavascriptTests\JavascriptTestBase;
 use Drupal\Tests\BrowserTestBase;
 
 /**
@@ -10,7 +11,7 @@
  *
  * @group block
  */
-class BlockCacheTest extends BrowserTestBase {
+class BlockCacheTest extends JavascriptTestBase {
 
   /**
    * Modules to install.
diff --git a/core/modules/block/src/Tests/BlockFormInBlockTest.php b/core/modules/block/tests/src/Functional/BlockFormInBlockTest.php
similarity index 93%
rename from core/modules/block/src/Tests/BlockFormInBlockTest.php
rename to core/modules/block/tests/src/Functional/BlockFormInBlockTest.php
index ebe43c8..3b46aee 100644
--- a/core/modules/block/src/Tests/BlockFormInBlockTest.php
+++ b/core/modules/block/tests/src/Functional/BlockFormInBlockTest.php
@@ -1,9 +1,9 @@
 <?php
 
-namespace Drupal\block\Tests;
+namespace Drupal\Tests\block\Functional;
 
 use Drupal\Component\Utility\Crypt;
-use Drupal\simpletest\WebTestBase;
+use Drupal\Tests\BrowserTestBase;
 
 
 /**
@@ -11,7 +11,7 @@
  *
  * @group block
  */
-class BlockFormInBlockTest extends WebTestBase {
+class BlockFormInBlockTest extends BrowserTestBase {
 
   /**
    * Modules to install.
diff --git a/core/modules/block/src/Tests/BlockInstallTest.php b/core/modules/block/tests/src/Functional/BlockInstallTest.php
similarity index 87%
rename from core/modules/block/src/Tests/BlockInstallTest.php
rename to core/modules/block/tests/src/Functional/BlockInstallTest.php
index 55f4b8a..c6fd1eb 100644
--- a/core/modules/block/src/Tests/BlockInstallTest.php
+++ b/core/modules/block/tests/src/Functional/BlockInstallTest.php
@@ -1,15 +1,15 @@
 <?php
 
-namespace Drupal\block\Tests;
+namespace Drupal\Tests\block\Functional;
 
-use Drupal\simpletest\WebTestBase;
+use Drupal\Tests\BrowserTestBase;
 
 /**
  * Tests block module's installation.
  *
  * @group block
  */
-class BlockInstallTest extends WebTestBase {
+class BlockInstallTest extends BrowserTestBase {
 
   public function testCacheTagInvalidationUponInstallation() {
     // Warm the page cache.
diff --git a/core/modules/block/src/Tests/BlockLanguageCacheTest.php b/core/modules/block/tests/src/Functional/BlockLanguageCacheTest.php
similarity index 89%
rename from core/modules/block/src/Tests/BlockLanguageCacheTest.php
rename to core/modules/block/tests/src/Functional/BlockLanguageCacheTest.php
index 269536d..b9c7c90 100644
--- a/core/modules/block/src/Tests/BlockLanguageCacheTest.php
+++ b/core/modules/block/tests/src/Functional/BlockLanguageCacheTest.php
@@ -1,17 +1,17 @@
 <?php
 
-namespace Drupal\block\Tests;
+namespace Drupal\Tests\block\Functional;
 
 use Drupal\Component\Utility\Unicode;
 use Drupal\language\Entity\ConfigurableLanguage;
-use Drupal\simpletest\WebTestBase;
+use Drupal\Tests\BrowserTestBase;
 
 /**
  * Tests display of menu blocks with multiple languages.
  *
  * @group block
  */
-class BlockLanguageCacheTest extends WebTestBase {
+class BlockLanguageCacheTest extends BrowserTestBase {
 
   /**
    * Modules to install.
@@ -57,7 +57,7 @@ public function testBlockLinks() {
     // Create the block cache for all languages.
     foreach ($this->langcodes as $langcode) {
       $this->drupalGet('admin/structure/block', ['language' => $langcode]);
-      $this->clickLinkPartialName('Place block');
+      $this->clickLink('Place block');
     }
 
     // Create a menu in the default language.
@@ -69,7 +69,7 @@ public function testBlockLinks() {
     // Check that the block is listed for all languages.
     foreach ($this->langcodes as $langcode) {
       $this->drupalGet('admin/structure/block', ['language' => $langcode]);
-      $this->clickLinkPartialName('Place block');
+      $this->clickLink('Place block');
       $this->assertText($edit['label']);
     }
   }
diff --git a/core/modules/block/src/Tests/BlockRenderOrderTest.php b/core/modules/block/tests/src/Functional/BlockRenderOrderTest.php
similarity index 94%
rename from core/modules/block/src/Tests/BlockRenderOrderTest.php
rename to core/modules/block/tests/src/Functional/BlockRenderOrderTest.php
index a7e26de..2fd1ab8 100644
--- a/core/modules/block/src/Tests/BlockRenderOrderTest.php
+++ b/core/modules/block/tests/src/Functional/BlockRenderOrderTest.php
@@ -1,16 +1,16 @@
 <?php
 
-namespace Drupal\block\Tests;
+namespace Drupal\Tests\block\Functional;
 
 use Drupal\Component\Utility\Html;
-use Drupal\simpletest\WebTestBase;
+use Drupal\Tests\BrowserTestBase;
 
 /**
  * Tests blocks are being rendered in order by weight.
  *
  * @group block
  */
-class BlockRenderOrderTest extends WebTestBase {
+class BlockRenderOrderTest extends BrowserTestBase {
 
   /**
    * Modules to install.
diff --git a/core/modules/block/src/Tests/BlockSystemBrandingTest.php b/core/modules/block/tests/src/Functional/BlockSystemBrandingTest.php
similarity index 68%
rename from core/modules/block/src/Tests/BlockSystemBrandingTest.php
rename to core/modules/block/tests/src/Functional/BlockSystemBrandingTest.php
index b5025e8..3f19214 100644
--- a/core/modules/block/src/Tests/BlockSystemBrandingTest.php
+++ b/core/modules/block/tests/src/Functional/BlockSystemBrandingTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\block\Tests;
+namespace Drupal\Tests\block\Functional;
 
 /**
  * Tests branding block display.
@@ -43,9 +43,9 @@ public function testSystemBrandingSettings() {
     $site_name_element = $this->xpath($site_name_xpath);
     $site_slogan_element = $this->xpath($site_slogan_xpath);
     // Test that all branding elements are displayed.
-    $this->assertTrue(!empty($site_logo_element), 'The branding block logo was found.');
-    $this->assertTrue(!empty($site_name_element), 'The branding block site name was found.');
-    $this->assertTrue(!empty($site_slogan_element), 'The branding block slogan was found.');
+    $this->assertNotEmpty($site_logo_element, 'The branding block logo was found.');
+    $this->assertNotEmpty($site_name_element, 'The branding block site name was found.');
+    $this->assertNotEmpty($site_slogan_element, 'The branding block slogan was found.');
     $this->assertCacheTag('config:system.site');
 
     // Be sure the slogan is XSS-filtered.
@@ -54,7 +54,7 @@ public function testSystemBrandingSettings() {
       ->save();
     $this->drupalGet('');
     $site_slogan_element = $this->xpath($site_slogan_xpath);
-    $this->assertEqual($site_slogan_element[0], 'alert("Community carpentry");', 'The site slogan was XSS-filtered.');
+    $this->assertEqual($site_slogan_element[0]->getText(), 'alert("Community carpentry");', 'The site slogan was XSS-filtered.');
 
     // Turn just the logo off.
     $this->config('block.block.site-branding')
@@ -65,9 +65,9 @@ public function testSystemBrandingSettings() {
     $site_name_element = $this->xpath($site_name_xpath);
     $site_slogan_element = $this->xpath($site_slogan_xpath);
     // Re-test all branding elements.
-    $this->assertTrue(empty($site_logo_element), 'The branding block logo was disabled.');
-    $this->assertTrue(!empty($site_name_element), 'The branding block site name was found.');
-    $this->assertTrue(!empty($site_slogan_element), 'The branding block slogan was found.');
+    $this->assertEmpty($site_logo_element, 'The branding block logo was disabled.');
+    $this->assertNotEmpty($site_name_element, 'The branding block site name was found.');
+    $this->assertNotEmpty($site_slogan_element, 'The branding block slogan was found.');
     $this->assertCacheTag('config:system.site');
 
     // Turn just the site name off.
@@ -80,9 +80,9 @@ public function testSystemBrandingSettings() {
     $site_name_element = $this->xpath($site_name_xpath);
     $site_slogan_element = $this->xpath($site_slogan_xpath);
     // Re-test all branding elements.
-    $this->assertTrue(!empty($site_logo_element), 'The branding block logo was found.');
-    $this->assertTrue(empty($site_name_element), 'The branding block site name was disabled.');
-    $this->assertTrue(!empty($site_slogan_element), 'The branding block slogan was found.');
+    $this->assertNotEmpty($site_logo_element, 'The branding block logo was found.');
+    $this->assertEmpty($site_name_element, 'The branding block site name was disabled.');
+    $this->assertNotEmpty($site_slogan_element, 'The branding block slogan was found.');
     $this->assertCacheTag('config:system.site');
 
     // Turn just the site slogan off.
@@ -95,9 +95,9 @@ public function testSystemBrandingSettings() {
     $site_name_element = $this->xpath($site_name_xpath);
     $site_slogan_element = $this->xpath($site_slogan_xpath);
     // Re-test all branding elements.
-    $this->assertTrue(!empty($site_logo_element), 'The branding block logo was found.');
-    $this->assertTrue(!empty($site_name_element), 'The branding block site name was found.');
-    $this->assertTrue(empty($site_slogan_element), 'The branding block slogan was disabled.');
+    $this->assertNotEmpty($site_logo_element, 'The branding block logo was found.');
+    $this->assertNotEmpty($site_name_element, 'The branding block site name was found.');
+    $this->assertEmpty($site_slogan_element, 'The branding block slogan was disabled.');
     $this->assertCacheTag('config:system.site');
 
     // Turn the site name and the site slogan off.
@@ -110,9 +110,9 @@ public function testSystemBrandingSettings() {
     $site_name_element = $this->xpath($site_name_xpath);
     $site_slogan_element = $this->xpath($site_slogan_xpath);
     // Re-test all branding elements.
-    $this->assertTrue(!empty($site_logo_element), 'The branding block logo was found.');
-    $this->assertTrue(empty($site_name_element), 'The branding block site name was disabled.');
-    $this->assertTrue(empty($site_slogan_element), 'The branding block slogan was disabled.');
+    $this->assertNotEmpty($site_logo_element, 'The branding block logo was found.');
+    $this->assertEmpty($site_name_element, 'The branding block site name was disabled.');
+    $this->assertEmpty($site_slogan_element, 'The branding block slogan was disabled.');
     $this->assertCacheTag('config:system.site');
   }
 
diff --git a/core/modules/block/src/Tests/BlockTest.php b/core/modules/block/tests/src/Functional/BlockTest.php
similarity index 98%
rename from core/modules/block/src/Tests/BlockTest.php
rename to core/modules/block/tests/src/Functional/BlockTest.php
index 5910d47..505c7fa 100644
--- a/core/modules/block/src/Tests/BlockTest.php
+++ b/core/modules/block/tests/src/Functional/BlockTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\block\Tests;
+namespace Drupal\Tests\block\Functional;
 
 use Drupal\Component\Utility\Html;
 use Drupal\block\Entity\Block;
@@ -150,9 +150,9 @@ public function testAddBlockFromLibraryWithWeight() {
       ]);
       $links = $this->xpath('//a[contains(@href, :href)]', [':href' => $add_url->toString()]);
       $this->assertEqual(1, count($links), 'Found one matching link.');
-      $this->assertEqual(t('Place block'), (string) $links[0], 'Found the expected link text.');
+      $this->assertEqual(t('Place block'), $links[0]->getText(), 'Found the expected link text.');
 
-      list($path, $query_string) = explode('?', $links[0]['href'], 2);
+      list($path, $query_string) = explode('?', $links[0]->getAttribute('href'), 2);
       parse_str($query_string, $query_parts);
       $this->assertEqual($weight, $query_parts['weight'], 'Found the expected weight query string.');
 
@@ -164,7 +164,7 @@ public function testAddBlockFromLibraryWithWeight() {
         'settings[label]' => $title,
       ];
       // Create the block using the link parsed from the library page.
-      $this->drupalPostForm($this->getAbsoluteUrl($links[0]['href']), $edit, t('Save block'));
+      $this->drupalPostForm($this->getAbsoluteUrl($links[0]->getAttribute('href')), $edit, t('Save block'));
 
       // Ensure that the block was created with the expected weight.
       /** @var \Drupal\block\BlockInterface $block */
@@ -261,7 +261,7 @@ public function testBlockThemeSelector() {
       $theme_settings->set('default', $theme)->save();
       $this->drupalGet('');
       $elements = $this->xpath('//div[@id = :id]', [':id' => Html::getUniqueId('block-' . $block['id'])]);
-      $this->assertTrue(!empty($elements), 'The block was found.');
+      $this->assertNotEmpty($elements, 'The block was found.');
     }
   }
 
diff --git a/core/modules/block/src/Tests/BlockTestBase.php b/core/modules/block/tests/src/Functional/BlockTestBase.php
similarity index 89%
rename from core/modules/block/src/Tests/BlockTestBase.php
rename to core/modules/block/tests/src/Functional/BlockTestBase.php
index 71f0ae6..f8cdf62 100644
--- a/core/modules/block/src/Tests/BlockTestBase.php
+++ b/core/modules/block/tests/src/Functional/BlockTestBase.php
@@ -1,14 +1,15 @@
 <?php
 
-namespace Drupal\block\Tests;
+namespace Drupal\Tests\block\Functional;
 
-use Drupal\simpletest\WebTestBase;
 use Drupal\filter\Entity\FilterFormat;
+use Drupal\FunctionalJavascriptTests\JavascriptTestBase;
+use Drupal\Tests\BrowserTestBase;
 
 /**
  * Provides setup and helper methods for block module tests.
  */
-abstract class BlockTestBase extends WebTestBase {
+abstract class BlockTestBase extends JavascriptTestBase {
 
   /**
    * Modules to install.
diff --git a/core/modules/block/src/Tests/BlockUiTest.php b/core/modules/block/tests/src/Functional/BlockUiTest.php
similarity index 91%
rename from core/modules/block/src/Tests/BlockUiTest.php
rename to core/modules/block/tests/src/Functional/BlockUiTest.php
index d4ebda4..e97c106 100644
--- a/core/modules/block/src/Tests/BlockUiTest.php
+++ b/core/modules/block/tests/src/Functional/BlockUiTest.php
@@ -1,16 +1,16 @@
 <?php
 
-namespace Drupal\block\Tests;
+namespace Drupal\Tests\block\Functional;
 
 use Drupal\Component\Utility\Html;
-use Drupal\simpletest\WebTestBase;
+use Drupal\Tests\BrowserTestBase;
 
 /**
  * Tests that the block configuration UI exists and stores data correctly.
  *
  * @group block
  */
-class BlockUiTest extends WebTestBase {
+class BlockUiTest extends BrowserTestBase {
 
   /**
    * Modules to install.
@@ -99,13 +99,13 @@ public function testBlockAdminUiPage() {
     $this->drupalGet('admin/structure/block');
     // Look for the blocks table.
     $blocks_table = $this->xpath("//table[@id='blocks']");
-    $this->assertTrue(!empty($blocks_table), 'The blocks table is being rendered.');
+    $this->assertNotEmpty($blocks_table, 'The blocks table is being rendered.');
     // Look for test blocks in the table.
     foreach ($this->blockValues as $delta => $values) {
       $block = $this->blocks[$delta];
       $label = $block->label();
       $element = $this->xpath('//*[@id="blocks"]/tbody/tr[' . $values['tr'] . ']/td[1]/text()');
-      $this->assertTrue((string) $element[0] == $label, 'The "' . $label . '" block title is set inside the ' . $values['settings']['region'] . ' region.');
+      $this->assertEquals($element[0]->getText(), $label, 'The "' . $label . '" block title is set inside the ' . $values['settings']['region'] . ' region.');
       // Look for a test block region select form element.
       $this->assertField('blocks[' . $values['settings']['id'] . '][region]', 'The block "' . $values['label'] . '" has a region assignment field.');
       // Move the test block to the header region.
@@ -134,7 +134,7 @@ public function testBlockAdminUiPage() {
     $this->drupalPlaceBlock('system_powered_by_block', ['region' => 'header', 'id' => 'header']);
     $this->drupalGet('admin/structure/block');
     $element = $this->xpath('//tr[contains(@class, :class)]', [':class' => 'region-title-header']);
-    $this->assertTrue(!empty($element));
+    $this->assertNotEmpty($element);
 
     // Ensure hidden themes do not appear in the UI. Enable another non base
     // theme and place the local tasks block.
@@ -171,19 +171,19 @@ public function testCandidateBlockList() {
     $pattern = '//tr[.//td/div[text()=:title] and .//td[text()=:category] and .//td//a[contains(@href, :href)]]';
 
     $this->drupalGet('admin/structure/block');
-    $this->clickLinkPartialName('Place block');
+    $this->clickLink('Place block');
     $elements = $this->xpath($pattern, $arguments);
-    $this->assertTrue(!empty($elements), 'The test block appears in the category for its module.');
+    $this->assertNotEmpty($elements, 'The test block appears in the category for its module.');
 
     // Trigger the custom category addition in block_test_block_alter().
     $this->container->get('state')->set('block_test_info_alter', TRUE);
     $this->container->get('plugin.manager.block')->clearCachedDefinitions();
 
     $this->drupalGet('admin/structure/block');
-    $this->clickLinkPartialName('Place block');
+    $this->clickLink('Place block');
     $arguments[':category'] = 'Custom category';
     $elements = $this->xpath($pattern, $arguments);
-    $this->assertTrue(!empty($elements), 'The test block appears in a custom category controlled by block_test_block_alter().');
+    $this->assertNotEmpty($elements, 'The test block appears in a custom category controlled by block_test_block_alter().');
   }
 
   /**
@@ -197,12 +197,12 @@ public function testContextAwareUnsatisfiedBlocks() {
     ];
 
     $this->drupalGet('admin/structure/block');
-    $this->clickLinkPartialName('Place block');
+    $this->clickLink('Place block');
     $elements = $this->xpath('//tr[.//td/div[text()=:text] and .//td[text()=:category] and .//td//a[contains(@href, :href)]]', $arguments);
-    $this->assertTrue(empty($elements), 'The context-aware test block does not appear.');
+    $this->assertEmpty($elements, 'The context-aware test block does not appear.');
 
     $definition = \Drupal::service('plugin.manager.block')->getDefinition('test_context_aware_unsatisfied');
-    $this->assertTrue(!empty($definition), 'The context-aware test block does not exist.');
+    $this->assertNotEmpty($definition, 'The context-aware test block does not exist.');
   }
 
   /**
@@ -223,11 +223,11 @@ public function testContextAwareBlocks() {
     $pattern = '//tr[.//td/div[text()=:title] and .//td[text()=:category] and .//td//a[contains(@href, :href)]]';
 
     $this->drupalGet('admin/structure/block');
-    $this->clickLinkPartialName('Place block');
+    $this->clickLink('Place block');
     $elements = $this->xpath($pattern, $arguments);
-    $this->assertTrue(!empty($elements), 'The context-aware test block appears.');
+    $this->assertNotEmpty($elements, 'The context-aware test block appears.');
     $definition = \Drupal::service('plugin.manager.block')->getDefinition('test_context_aware');
-    $this->assertTrue(!empty($definition), 'The context-aware test block exists.');
+    $this->assertNotEmpty($definition, 'The context-aware test block exists.');
     $edit = [
       'region' => 'content',
       'settings[context_mapping][user]' => '@block_test.multiple_static_context:userB',
diff --git a/core/modules/block/src/Tests/BlockXssTest.php b/core/modules/block/tests/src/Functional/BlockXssTest.php
similarity index 93%
rename from core/modules/block/src/Tests/BlockXssTest.php
rename to core/modules/block/tests/src/Functional/BlockXssTest.php
index b37f4cd..3e661d7 100644
--- a/core/modules/block/src/Tests/BlockXssTest.php
+++ b/core/modules/block/tests/src/Functional/BlockXssTest.php
@@ -1,12 +1,12 @@
 <?php
 
-namespace Drupal\block\Tests;
+namespace Drupal\Tests\block\Functional;
 
 use Drupal\block_content\Entity\BlockContent;
 use Drupal\block_content\Entity\BlockContentType;
 use Drupal\Core\Url;
-use Drupal\simpletest\WebTestBase;
 use Drupal\system\Entity\Menu;
+use Drupal\Tests\BrowserTestBase;
 use Drupal\views\Entity\View;
 
 /**
@@ -14,7 +14,7 @@
  *
  * @group block
  */
-class BlockXssTest extends WebTestBase {
+class BlockXssTest extends BrowserTestBase {
 
   /**
    * Modules to install.
@@ -29,7 +29,7 @@ class BlockXssTest extends WebTestBase {
   public function testNoUnexpectedEscaping() {
     $this->drupalLogin($this->drupalCreateUser(['administer blocks', 'access administration pages']));
     $this->drupalGet(Url::fromRoute('block.admin_display'));
-    $this->clickLinkPartialName('Place block');
+    $this->clickLink('Place block');
     $this->assertNoEscaped('<');
   }
 
@@ -58,7 +58,7 @@ public function testXssInCategory() {
     $this->drupalPlaceBlock('test_xss_title');
     $this->drupalLogin($this->drupalCreateUser(['administer blocks', 'access administration pages']));
     $this->drupalGet(Url::fromRoute('block.admin_display'));
-    $this->clickLinkPartialName('Place block');
+    $this->clickLink('Place block');
     $this->assertNoRaw("<script>alert('XSS category');</script>");
   }
 
@@ -73,7 +73,7 @@ public function testBlockXss() {
     $this->doBlockContentTest();
 
     $this->drupalGet(Url::fromRoute('block.admin_display'));
-    $this->clickLinkPartialName('Place block');
+    $this->clickLink('Place block');
     $this->assertNoRaw('&amp;lt;', 'The page does not have double escaped HTML tags.');
   }
 
@@ -101,7 +101,7 @@ protected function doViewTest() {
     $view->save();
 
     $this->drupalGet(Url::fromRoute('block.admin_display'));
-    $this->clickLinkPartialName('Place block');
+    $this->clickLink('Place block');
 
     // \Drupal\views\Plugin\Derivative\ViewsBlock::getDerivativeDefinitions()
     // has a different code path for an admin label based only on the View
@@ -137,7 +137,7 @@ protected function doMenuTest() {
     ])->save();
 
     $this->drupalGet(Url::fromRoute('block.admin_display'));
-    $this->clickLinkPartialName('Place block');
+    $this->clickLink('Place block');
 
     $this->assertEscaped('<script>alert("menu");</script>');
     $this->assertNoRaw('<script>alert("menu");</script>');
@@ -158,7 +158,7 @@ protected function doBlockContentTest() {
     ])->save();
 
     $this->drupalGet(Url::fromRoute('block.admin_display'));
-    $this->clickLinkPartialName('Place block');
+    $this->clickLink('Place block');
 
     $this->assertEscaped('<script>alert("block_content");</script>');
     $this->assertNoRaw('<script>alert("block_content");</script>');
diff --git a/core/modules/block/src/Tests/NonDefaultBlockAdminTest.php b/core/modules/block/tests/src/Functional/NonDefaultBlockAdminTest.php
similarity index 86%
rename from core/modules/block/src/Tests/NonDefaultBlockAdminTest.php
rename to core/modules/block/tests/src/Functional/NonDefaultBlockAdminTest.php
index fc2f33c..7b7927d 100644
--- a/core/modules/block/src/Tests/NonDefaultBlockAdminTest.php
+++ b/core/modules/block/tests/src/Functional/NonDefaultBlockAdminTest.php
@@ -1,15 +1,15 @@
 <?php
 
-namespace Drupal\block\Tests;
+namespace Drupal\Tests\block\Functional;
 
-use Drupal\simpletest\WebTestBase;
+use Drupal\Tests\BrowserTestBase;
 
 /**
  * Tests the block administration page for a non-default theme.
  *
  * @group block
  */
-class NonDefaultBlockAdminTest extends WebTestBase {
+class NonDefaultBlockAdminTest extends BrowserTestBase {
 
   /**
    * Modules to install.
diff --git a/core/modules/simpletest/src/TestDiscovery.php b/core/modules/simpletest/src/TestDiscovery.php
index 5374520..a31c6e3 100644
--- a/core/modules/simpletest/src/TestDiscovery.php
+++ b/core/modules/simpletest/src/TestDiscovery.php
@@ -144,8 +144,8 @@ public function registerTestNamespaces() {
    *   An array of tests keyed by the the group name.
    * @code
    *     $groups['block'] => array(
-   *       'Drupal\block\Tests\BlockTest' => array(
-   *         'name' => 'Drupal\block\Tests\BlockTest',
+   *       'Drupal\Tests\block\Functional\BlockTest' => array(
+   *         'name' => 'Drupal\Tests\block\Functional\BlockTest',
    *         'description' => 'Tests block UI CRUD functionality.',
    *         'group' => 'block',
    *       ),
diff --git a/core/tests/Drupal/FunctionalTests/AssertLegacyTrait.php b/core/tests/Drupal/FunctionalTests/AssertLegacyTrait.php
index c88949d..d684ae7 100644
--- a/core/tests/Drupal/FunctionalTests/AssertLegacyTrait.php
+++ b/core/tests/Drupal/FunctionalTests/AssertLegacyTrait.php
@@ -720,6 +720,19 @@ protected function assertCacheTag($expected_cache_tag) {
   }
 
   /**
+   * Asserts whether an expected cache tag was absent in the last response.
+   *
+   * @param string $cache_tag
+   *   The expected cache tag.
+   *
+   * @deprecated Scheduled for removal in Drupal 9.0.0.
+   *   Use $this->assertSession()->responseHeaderNotContains() instead.
+   */
+  protected function assertNoCacheTag($cache_tag) {
+    $this->assertSession()->responseHeaderNotContains('X-Drupal-Cache-Tags', $cache_tag);
+  }
+
+  /**
    * Checks that current response header equals value.
    *
    * @param string $name
