diff --git a/core/modules/block/src/Tests/BlockTestBase.php b/core/modules/block/src/Tests/BlockTestBase.php
index 71f0ae6cff..7397a47053 100644
--- a/core/modules/block/src/Tests/BlockTestBase.php
+++ b/core/modules/block/src/Tests/BlockTestBase.php
@@ -2,11 +2,18 @@
 
 namespace Drupal\block\Tests;
 
+@trigger_error(__NAMESPACE__ . '\BlockTestBase is deprecated in Drupal 8.5.0 and will be removed before Drupal 9.0.0. Instead, use \Drupal\Tests\block\Functional\BlockTestBase, see https://www.drupal.org/node/2901823.', E_USER_DEPRECATED);
+
 use Drupal\simpletest\WebTestBase;
 use Drupal\filter\Entity\FilterFormat;
 
 /**
  * Provides setup and helper methods for block module tests.
+ *
+ * @deprecated in Drupal 8.5.0 and will be removed before Drupal 9.0.0.
+ *   Use \Drupal\Tests\block\Functional\BlockTestBase.
+ *
+ * @see https://www.drupal.org/node/2901823
  */
 abstract class BlockTestBase extends WebTestBase {
 
diff --git a/core/modules/block/tests/src/Functional/AssertBlockAppearsTrait.php b/core/modules/block/tests/src/Functional/AssertBlockAppearsTrait.php
new file mode 100644
index 0000000000..0f5f11a48c
--- /dev/null
+++ b/core/modules/block/tests/src/Functional/AssertBlockAppearsTrait.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace Drupal\Tests\block\Functional;
+
+use Drupal\block\Entity\Block;
+
+/**
+ * Provides test assertions for testing block appearance.
+ *
+ * Can be used by test classes that extend \Drupal\Tests\BrowserTestBase.
+ */
+trait AssertBlockAppearsTrait {
+
+  /**
+   * Checks to see whether a block appears on the page.
+   *
+   * @param \Drupal\block\Entity\Block $block
+   *   The block entity to find on the page.
+   */
+  protected function assertBlockAppears(Block $block) {
+    $result = $this->findBlockInstance($block);
+    $this->assertTrue(!empty($result), format_string('Ensure the block @id appears on the page', ['@id' => $block->id()]));
+  }
+
+  /**
+   * Checks to see whether a block does not appears on the page.
+   *
+   * @param \Drupal\block\Entity\Block $block
+   *   The block entity to find on the page.
+   */
+  protected function assertNoBlockAppears(Block $block) {
+    $result = $this->findBlockInstance($block);
+    $this->assertFalse(!empty($result), format_string('Ensure the block @id does not appear on the page', ['@id' => $block->id()]));
+  }
+
+  /**
+   * Find a block instance on the page.
+   *
+   * @param \Drupal\block\Entity\Block $block
+   *   The block entity to find on the page.
+   *
+   * @return array
+   *   The result from the xpath query.
+   */
+  protected function findBlockInstance(Block $block) {
+    return $this->xpath('//div[@id = :id]', [':id' => 'block-' . $block->id()]);
+  }
+
+}
\ No newline at end of file
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 8773f03620..88f35e4b09 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/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 ebe43c8cef..3b46aee0e4 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 55f4b8a921..c6fd1eb190 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 269536d9ce..b9c7c909ee 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 a7e26ded4e..2fd1ab8925 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 96%
rename from core/modules/block/src/Tests/BlockSystemBrandingTest.php
rename to core/modules/block/tests/src/Functional/BlockSystemBrandingTest.php
index b5025e8017..89ce0c4b45 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.
@@ -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')
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 4b9deb4c2c..58ccfdcc0c 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 90%
copy from core/modules/block/src/Tests/BlockTestBase.php
copy to core/modules/block/tests/src/Functional/BlockTestBase.php
index 71f0ae6cff..e1ccd1a365 100644
--- a/core/modules/block/src/Tests/BlockTestBase.php
+++ b/core/modules/block/tests/src/Functional/BlockTestBase.php
@@ -1,14 +1,14 @@
 <?php
 
-namespace Drupal\block\Tests;
+namespace Drupal\Tests\block\Functional;
 
-use Drupal\simpletest\WebTestBase;
 use Drupal\filter\Entity\FilterFormat;
+use Drupal\Tests\BrowserTestBase;
 
 /**
  * Provides setup and helper methods for block module tests.
  */
-abstract class BlockTestBase extends WebTestBase {
+abstract class BlockTestBase extends BrowserTestBase {
 
   /**
    * Modules to install.
@@ -31,6 +31,9 @@
    */
   protected $adminUser;
 
+  /**
+   * {@inheritdoc}
+   */
   protected function setUp() {
     parent::setUp();
 
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 d4ebda4d9b..e97c10605f 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 b37f4cd223..3e661d775d 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 fc2f33c0da..7b7927de20 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/block/src/Tests/Views/DisplayBlockTest.php b/core/modules/block/tests/src/Functional/Views/DisplayBlockTest.php
similarity index 94%
rename from core/modules/block/src/Tests/Views/DisplayBlockTest.php
rename to core/modules/block/tests/src/Functional/Views/DisplayBlockTest.php
index 3d3584579a..d12209944a 100644
--- a/core/modules/block/src/Tests/Views/DisplayBlockTest.php
+++ b/core/modules/block/tests/src/Functional/Views/DisplayBlockTest.php
@@ -1,13 +1,14 @@
 <?php
 
-namespace Drupal\block\Tests\Views;
+namespace Drupal\Tests\block\Functional\Views;
 
 use Drupal\Component\Serialization\Json;
 use Drupal\Core\Url;
-use Drupal\system\Tests\Cache\AssertPageCacheContextsAndTagsTrait;
+use Drupal\Tests\block\Functional\AssertBlockAppearsTrait;
+use Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait;
+use Drupal\Tests\views\Functional\ViewTestBase;
 use Drupal\views\Entity\View;
 use Drupal\views\Views;
-use Drupal\views\Tests\ViewTestBase;
 use Drupal\views\Tests\ViewTestData;
 use Drupal\Core\Template\Attribute;
 
@@ -15,11 +16,12 @@
  * Tests the block display plugin.
  *
  * @group block
- * @see \Drupal\block\Plugin\views\display\Block
+ * @see \Drupal\views\Plugin\views\display\Block
  */
 class DisplayBlockTest extends ViewTestBase {
 
   use AssertPageCacheContextsAndTagsTrait;
+  use AssertBlockAppearsTrait;
 
   /**
    * Modules to install.
@@ -35,8 +37,11 @@ class DisplayBlockTest extends ViewTestBase {
    */
   public static $testViews = ['test_view_block', 'test_view_block2'];
 
-  protected function setUp() {
-    parent::setUp();
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp($import_test_views = TRUE) {
+    parent::setUp($import_test_views);
 
     ViewTestData::createTestViews(get_class($this), ['block_test_views']);
     $this->enableViewsTestModule();
@@ -67,10 +72,10 @@ public function testBlockCategory() {
         'plugin_id' => 'views_block:' . $edit['id'] . '-block_1',
         'theme' => 'classy',
       ]),
-      ':category' => t('Lists (Views)'),
+      ':category' => 'Lists (Views)',
     ];
     $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 base table.');
 
@@ -95,7 +100,7 @@ public function testBlockCategory() {
     // Test that the blocks are listed under the correct categories.
     $arguments[':category'] = $category;
     $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 custom category.');
 
@@ -104,7 +109,7 @@ public function testBlockCategory() {
         'plugin_id' => 'views_block:' . $edit['id'] . '-block_2',
         'theme' => 'classy',
       ]),
-      ':category' => t('Lists (Views)'),
+      ':category' => 'Lists (Views)',
     ];
     $elements = $this->xpath($pattern, $arguments);
     $this->assertTrue(!empty($elements), 'The first duplicated test block remains in the original category.');
@@ -243,7 +248,7 @@ public function testBlockRendering() {
     $this->drupalGet('');
 
     $result = $this->xpath('//div[contains(@class, "region-sidebar-first")]/div[contains(@class, "block-views")]/h2');
-    $this->assertEqual((string) $result[0], 'Custom title');
+    $this->assertEqual($result[0]->getText(), 'Custom title');
 
     // Don't override the title anymore.
     $plugin = $block->getPlugin();
@@ -252,7 +257,7 @@ public function testBlockRendering() {
 
     $this->drupalGet('');
     $result = $this->xpath('//div[contains(@class, "region-sidebar-first")]/div[contains(@class, "block-views")]/h2');
-    $this->assertEqual((string) $result[0], 'test_view_block');
+    $this->assertEqual($result[0]->getText(), 'test_view_block');
 
     // Hide the title.
     $block->getPlugin()->setConfigurationValue('label_display', FALSE);
@@ -363,9 +368,10 @@ public function testBlockContextualLinks() {
     // Get server-rendered contextual links.
     // @see \Drupal\contextual\Tests\ContextualDynamicContextTest:renderContextualLinks()
     $post = ['ids[0]' => $id, 'ids[1]' => $cached_id];
-    $response = $this->drupalPostWithFormat('contextual/render', 'json', $post, ['query' => ['destination' => 'test-page']]);
+    $url = 'contextual/render?_format=json,destination=test-page';
+    $this->getSession()->getDriver()->getClient()->request('POST', $url, $post);
     $this->assertResponse(200);
-    $json = Json::decode($response);
+    $json = Json::decode($this->getSession()->getPage()->getContent());
     $this->assertIdentical($json[$id], '<ul class="contextual-links"><li class="block-configure"><a href="' . base_path() . 'admin/structure/block/manage/' . $block->id() . '">Configure block</a></li><li class="entityviewedit-form"><a href="' . base_path() . 'admin/structure/views/view/test_view_block/edit/block_1">Edit view</a></li></ul>');
     $this->assertIdentical($json[$cached_id], '<ul class="contextual-links"><li class="block-configure"><a href="' . base_path() . 'admin/structure/block/manage/' . $cached_block->id() . '">Configure block</a></li><li class="entityviewedit-form"><a href="' . base_path() . 'admin/structure/views/view/test_view_block/edit/block_1">Edit view</a></li></ul>');
   }
diff --git a/core/modules/simpletest/src/TestDiscovery.php b/core/modules/simpletest/src/TestDiscovery.php
index 5374520e56..a31c6e398b 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',
    *       ),
