diff --git a/core/modules/aggregator/lib/Drupal/aggregator/Tests/AggregatorRenderingTest.php b/core/modules/aggregator/lib/Drupal/aggregator/Tests/AggregatorRenderingTest.php
index cd083b7..1f13232 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/Tests/AggregatorRenderingTest.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/Tests/AggregatorRenderingTest.php
@@ -38,6 +38,10 @@ public function testBlockLinks() {
     $feed = $this->createFeed();
     $this->updateFeedItems($feed, $this->getDefaultFeedItemCount());
 
+    // Clear the block cache to load the new block definitions.
+    $manager = $this->container->get('plugin.manager.block');
+    $manager->clearCachedDefinitions();
+
     // Need admin user to be able to access block admin.
     $admin_user = $this->drupalCreateUser(array(
       'administer blocks',
@@ -47,16 +51,11 @@ public function testBlockLinks() {
     ));
     $this->drupalLogin($admin_user);
 
-    $current_theme = variable_get('theme_default', 'stark');
-    $machine_name = 'test_aggregator_feed_block';
     $block = array(
-      'machine_name' => $machine_name,
-      'region' => 'footer',
       'title' => 'feed-' . $feed->title,
       'block_count' => 2,
     );
-    $this->drupalPost("admin/structure/block/manage/aggregator_feed_block:{$feed->fid}/$current_theme", $block, t('Save block'));
-    $this->assertText(t('The block configuration has been saved.'), 'Block was saved.');
+    $this->drupalPlaceBlock("aggregator_feed_block:{$feed->fid}", $block);
 
     // Confirm that the block is now being displayed on pages.
     $this->drupalGet('node');
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/Tests/ImportOpmlTest.php b/core/modules/aggregator/lib/Drupal/aggregator/Tests/ImportOpmlTest.php
index 5eb110f..7a9f463 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/Tests/ImportOpmlTest.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/Tests/ImportOpmlTest.php
@@ -49,15 +49,7 @@ function openImportForm() {
       ->execute();
 
     // Enable the help block.
-    $block_id = 'system_help_block';
-    $default_theme = variable_get('theme_default', 'stark');
-    $block = array(
-      'title' => $this->randomName(8),
-      'machine_name' => $this->randomName(8),
-      'region' => 'help',
-    );
-    $this->drupalPost('admin/structure/block/manage/' . $block_id . '/' . $default_theme, $block, t('Save block'));
-    $this->assertText(t('The block configuration has been saved.'), '"Help" block enabled');
+    $this->drupalPlaceBlock('system_help_block', array('region' => 'help'));
 
     $this->drupalGet('admin/config/services/aggregator/add/opml');
     $this->assertText('A single OPML document may contain a collection of many feeds.', 'Found OPML help text.');
diff --git a/core/modules/block/lib/Drupal/block/Tests/BlockCacheTest.php b/core/modules/block/lib/Drupal/block/Tests/BlockCacheTest.php
index 2c401e8..f40d4fa 100644
--- a/core/modules/block/lib/Drupal/block/Tests/BlockCacheTest.php
+++ b/core/modules/block/lib/Drupal/block/Tests/BlockCacheTest.php
@@ -49,12 +49,8 @@ function setUp() {
     $this->normal_user_alt->save();
 
     // Enable our test block.
-    $this->theme = variable_get('theme_default', 'stark');
-    $block = array();
-    $block['machine_name'] = $this->randomName(8);
-    $block['region'] = 'sidebar_first';
-    $this->block = $block;
-    $this->drupalPost('admin/structure/block/manage/test_cache/' . $this->theme,  $block, t('Save block'));
+   $block = $this->drupalPlaceBlock('test_cache');
+   $this->block_config_id = $block['config_id'];
   }
 
   /**
@@ -196,13 +192,11 @@ function testCachePerPage() {
    * Private helper method to set the test block's cache mode.
    */
   private function setCacheMode($cache_mode) {
-    $block = $this->block;
-    $block['config_id'] = 'plugin.core.block.' . $this->theme . '.' . $block['machine_name'];
-    $block_config = config($block['config_id']);
+    $block_config = config($this->block_config_id);
     $block_config->set('cache', $cache_mode);
     $block_config->save();
 
-    $instance = block_load($block['config_id']);
+    $instance = block_load($this->block_config_id);
     $config = $instance->getConfig();
     if ($config['cache'] != $cache_mode) {
       $this->fail(t('Unable to set cache mode to %mode. Current mode: %current_mode', array('%mode' => $cache_mode, '%current_mode' => $config['cache'])));
diff --git a/core/modules/block/lib/Drupal/block/Tests/BlockHiddenRegionTest.php b/core/modules/block/lib/Drupal/block/Tests/BlockHiddenRegionTest.php
index f33694e..c16439c 100644
--- a/core/modules/block/lib/Drupal/block/Tests/BlockHiddenRegionTest.php
+++ b/core/modules/block/lib/Drupal/block/Tests/BlockHiddenRegionTest.php
@@ -46,14 +46,7 @@ function setUp() {
     );
 
     $this->drupalLogin($this->adminUser);
-
-    $default_theme = variable_get('theme_default', 'stark');
-
-    $block['machine_name'] = $this->randomName();
-    $block['region'] = 'sidebar_first';
-    $block['title'] = $this->randomName();
-    $this->drupalPost('admin/structure/block/manage/search_form_block/' . $default_theme, $block, t('Save block'));
-    $this->assertText('The block configuration has been saved.', 'Block was saved');
+    $this->drupalPlaceBlock('search_form_block');
   }
 
   /**
@@ -61,8 +54,6 @@ function setUp() {
    */
   public function testBlockNotInHiddenRegion() {
 
-    $this->drupalLogin($this->adminUser);
-
     // Ensure that the search form block is displayed.
     $this->drupalGet('');
     $this->assertText('Search', 'Block was displayed on the front page.');
@@ -81,4 +72,5 @@ public function testBlockNotInHiddenRegion() {
     $this->drupalGet('');
     $this->assertText('Search', 'Block was displayed on the front page.');
   }
+
 }
diff --git a/core/modules/block/lib/Drupal/block/Tests/BlockHtmlIdTest.php b/core/modules/block/lib/Drupal/block/Tests/BlockHtmlIdTest.php
index 1bf3543..e0d37da 100644
--- a/core/modules/block/lib/Drupal/block/Tests/BlockHtmlIdTest.php
+++ b/core/modules/block/lib/Drupal/block/Tests/BlockHtmlIdTest.php
@@ -10,7 +10,7 @@
 use Drupal\simpletest\WebTestBase;
 
 /**
- * Test block HTML id validity.
+ * Tests block HTML ID validity.
  */
 class BlockHtmlIdTest extends WebTestBase {
 
@@ -28,8 +28,8 @@ class BlockHtmlIdTest extends WebTestBase {
 
   public static function getInfo() {
     return array(
-      'name' => 'Block HTML id',
-      'description' => 'Test block HTML id validity.',
+      'name' => 'Block HTML ID',
+      'description' => 'Tests block HTML ID validity.',
       'group' => 'Block',
     );
   }
@@ -46,11 +46,7 @@ function setUp() {
     state()->set('block_test.content', $current_content);
 
     // Enable our test block.
-    $default_theme = variable_get('theme_default', 'stark');
-    $block = array();
-    $block['machine_name'] = 'test_id_block';
-    $block['region'] = 'sidebar_first';
-    $this->drupalPost('admin/structure/block/manage/test_html_id' . '/' . $default_theme, array('machine_name' => $block['machine_name'], 'region' => $block['region']), t('Save block'));
+    $this->drupalPlaceBlock('test_html_id', array('machine_name' => 'test_id_block'));
   }
 
   /**
@@ -60,4 +56,5 @@ function testHtmlId() {
     $this->drupalGet('');
     $this->assertRaw('id="block-test-id-block"', 'HTML ID for test block is valid.');
   }
+
 }
diff --git a/core/modules/block/lib/Drupal/block/Tests/BlockInvalidRegionTest.php b/core/modules/block/lib/Drupal/block/Tests/BlockInvalidRegionTest.php
index da22d5a..ec41b39 100644
--- a/core/modules/block/lib/Drupal/block/Tests/BlockInvalidRegionTest.php
+++ b/core/modules/block/lib/Drupal/block/Tests/BlockInvalidRegionTest.php
@@ -44,18 +44,9 @@ function setUp() {
    * Tests that blocks assigned to invalid regions work correctly.
    */
   function testBlockInInvalidRegion() {
-    // Enable a test block in the default theme and place it in an invalid region.
-    $current_theme = variable_get('default_theme', 'stark');
-    $machine_name = 'test_html_id';
-    $block = array(
-      'machine_name' => $machine_name,
-      'region' => 'footer',
-    );
-    $this->drupalPost("admin/structure/block/manage/test_html_id/$current_theme", $block, t('Save block'));
-    $this->assertText(t('The block configuration has been saved.'), 'Block was saved.');
-
-    $machine_name = 'plugin.core.block.' . $current_theme . '.' . $machine_name;
-    $config = config($machine_name);
+    // Enable a test block and place it in an invalid region.
+    $block = $this->drupalPlaceBlock('test_html_id');
+    $config = config($block['config_id']);
     $config->set('region', 'invalid_region');
     $config->save();
 
@@ -70,7 +61,6 @@ function testBlockInInvalidRegion() {
     $this->assertNoRaw($warning_message, 'Disabled block in the invalid region will not trigger the warning.');
 
     // Place disabled test block in the invalid region of the default theme.
-    $config = config($machine_name);
     $config->set('region', 'invalid_region');
     $config->save();
 
diff --git a/core/modules/block/lib/Drupal/block/Tests/NewDefaultThemeBlocksTest.php b/core/modules/block/lib/Drupal/block/Tests/NewDefaultThemeBlocksTest.php
index 8d04426..d9be6f4 100644
--- a/core/modules/block/lib/Drupal/block/Tests/NewDefaultThemeBlocksTest.php
+++ b/core/modules/block/lib/Drupal/block/Tests/NewDefaultThemeBlocksTest.php
@@ -33,38 +33,18 @@ public static function getInfo() {
    * Check the enabled Bartik blocks are correctly copied over.
    */
   function testNewDefaultThemeBlocks() {
+    $default_theme = variable_get('theme_default', 'stark');
 
     // Add several block instances.
-    // @todo Do this programmatically and with test blocks instead of other
-    //   modules' blocks once block instances are config entities.
     $this->adminUser = $this->drupalCreateUser(array('administer blocks'));
     $this->drupalLogin($this->adminUser);
 
-    // Add one instance of the user login block.
-    $block_id = 'user_login_block';
-    $default_theme = variable_get('theme_default', 'stark');
-    $edit = array(
-      'title' => $this->randomName(8),
-      'machine_name' => $this->randomName(8),
-      'region' => 'sidebar_first',
-    );
-    $this->drupalPost('admin/structure/block/manage/' . $block_id . '/' . $default_theme, $edit, t('Save block'));
-    $this->assertText(t('The block configuration has been saved.'), 'User login block enabled');
-
-    // Add another instance of the same block.
-    $this->drupalPost('admin/structure/block/manage/' . $block_id . '/' . $default_theme, $edit, t('Save block'));
-    $this->assertText(t('The block configuration has been saved.'), 'User login block enabled');
+    // Add two instances of the user login block.
+    $this->drupalPlaceBlock('user_login_block');
+    $this->drupalPlaceBlock('user_login_block');
 
     // Add an instance of a different block.
-    $block_id = 'system_powered_by_block';
-    $edit = array(
-      'title' => $this->randomName(8),
-      'machine_name' => $this->randomName(8),
-      'region' => 'sidebar_first',
-    );
-    $this->drupalPost('admin/structure/block/manage/' . $block_id . '/' . $default_theme, $edit, t('Save block'));
-    $this->assertText(t('The block configuration has been saved.'), 'User login block enabled');
-
+    $this->drupalPlaceBlock('system_powered_by_block');
     $this->drupalLogout($this->adminUser);
 
     // Enable a different theme.
diff --git a/core/modules/book/lib/Drupal/book/Tests/BookTest.php b/core/modules/book/lib/Drupal/book/Tests/BookTest.php
index 4d5e452..16c8ae3 100644
--- a/core/modules/book/lib/Drupal/book/Tests/BookTest.php
+++ b/core/modules/book/lib/Drupal/book/Tests/BookTest.php
@@ -309,16 +309,8 @@ function testBookExport() {
   function testBookNavigationBlock() {
     $this->drupalLogin($this->admin_user);
 
-    $block_id = 'book_navigation';
-    $default_theme = variable_get('theme_default', 'stark');
-    $block = array(
-      'title' => $this->randomName(8),
-      'machine_name' => $this->randomName(8),
-      'region' => 'footer',
-    );
     // Enable the block.
-    $this->drupalPost('admin/structure/block/manage/' . $block_id . '/' . $default_theme, $block, t('Save block'));
-    $this->assertText(t('The block configuration has been saved.'), 'Block enabled');
+    $block = $this->drupalPlaceBlock('book_navigation');
 
     // Give anonymous users the permission 'node test view'.
     $edit = array();
@@ -329,7 +321,7 @@ function testBookNavigationBlock() {
     // Test correct display of the block.
     $nodes = $this->createBook();
     $this->drupalGet('<front>');
-    $this->assertText($block['title'], 'Book navigation block is displayed.');
+    $this->assertText($block['subject'], 'Book navigation block is displayed.');
     $this->assertText($this->book->label(), format_string('Link to book root (@title) is displayed.', array('@title' => $nodes[0]->label())));
     $this->assertNoText($nodes[0]->label(), 'No links to individual book pages are displayed.');
   }
@@ -339,17 +331,7 @@ function testBookNavigationBlock() {
    */
   function testNavigationBlockOnAccessModuleEnabled() {
     $this->drupalLogin($this->admin_user);
-    $block_id = 'book_navigation';
-    $default_theme = variable_get('theme_default', 'stark');
-    $block = array(
-      'title' => $this->randomName(8),
-      'machine_name' => $this->randomName(8),
-      'region' => 'footer',
-      'book_block_mode' => 'book pages',
-    );
-    // Enable the block.
-    $this->drupalPost('admin/structure/block/manage/' . $block_id . '/' . $default_theme, $block, t('Save block'));
-    $this->assertText(t('The block configuration has been saved.'), 'Block enabled');
+    $block = $this->drupalPlaceBlock('book_navigation', array('book_block_mode' => 'book pages'));
 
     // Give anonymous users the permission 'node test view'.
     $edit = array();
@@ -363,12 +345,12 @@ function testNavigationBlockOnAccessModuleEnabled() {
     // Test correct display of the block to registered users.
     $this->drupalLogin($this->web_user);
     $this->drupalGet('node/' . $this->book->nid);
-    $this->assertText($block['title'], 'Book navigation block is displayed to registered users.');
+    $this->assertText($block['subject'], 'Book navigation block is displayed to registered users.');
     $this->drupalLogout();
 
     // Test correct display of the block to anonymous users.
     $this->drupalGet('node/' . $this->book->nid);
-    $this->assertText($block['title'], 'Book navigation block is displayed to anonymous users.');
+    $this->assertText($block['subject'], 'Book navigation block is displayed to anonymous users.');
   }
 
   /**
diff --git a/core/modules/comment/lib/Drupal/comment/Tests/CommentBlockTest.php b/core/modules/comment/lib/Drupal/comment/Tests/CommentBlockTest.php
index b874d7b..d4d3fe6 100644
--- a/core/modules/comment/lib/Drupal/comment/Tests/CommentBlockTest.php
+++ b/core/modules/comment/lib/Drupal/comment/Tests/CommentBlockTest.php
@@ -46,16 +46,7 @@ public static function getInfo() {
    */
   function testRecentCommentBlock() {
     $this->drupalLogin($this->admin_user);
-    $current_theme = variable_get('default_theme', 'stark');
-    $machine_name = 'test_recent_comments';
-    $edit = array(
-      'machine_name' => $machine_name,
-      'region' => 'sidebar_first',
-      'title' => $this->randomName(),
-      'block_count' => 2,
-    );
-    $this->drupalPost('admin/structure/block/manage/recent_comments/' . $current_theme, $edit, t('Save block'));
-    $this->assertText(t('The block configuration has been saved.'), 'Block was saved.');
+    $block = $this->drupalPlaceBlock('recent_comments', array('block_count' => 2));
 
     // Add some test comments, one without a subject.
     $comment1 = $this->postComment($this->node, $this->randomName(), $this->randomName());
@@ -70,14 +61,14 @@ function testRecentCommentBlock() {
     // posting a node from a node form.
     cache_invalidate_tags(array('content' => TRUE));
     $this->drupalGet('');
-    $this->assertNoText($edit['title'], 'Block was not found.');
+    $this->assertNoText($block['subject'], 'Block was not found.');
     user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array('access comments'));
 
     // Test that a user with the 'access comments' permission can see the
     // block.
     $this->drupalLogin($this->web_user);
     $this->drupalGet('');
-    $this->assertText($edit['title'], 'Block was found.');
+    $this->assertText($block['subject'], 'Block was found.');
 
     // Test the only the 2 latest comments are shown and in the proper order.
     $this->assertNoText($comment1->subject, 'Comment not found in block.');
@@ -88,11 +79,12 @@ function testRecentCommentBlock() {
     // Set the number of recent comments to show to 10.
     $this->drupalLogout();
     $this->drupalLogin($this->admin_user);
-    $block = array(
+    $edit = array(
       'block_count' => 10,
     );
+    $current_theme = variable_get('theme_default', 'stark');
 
-    $this->drupalPost("admin/structure/block/manage/plugin.core.block.$current_theme.$machine_name/$current_theme/configure", $block, t('Save block'));
+    $this->drupalPost('admin/structure/block/manage/' . $block['config_id'] . '/' . variable_get('theme_default', 'stark') . '/configure', $edit, t('Save block'));
     $this->assertText(t('The block configuration has been saved.'), 'Block saved.');
 
     // Post an additional comment.
@@ -118,4 +110,5 @@ function testRecentCommentBlock() {
     // rel="canonical" is added to the head of the document.
     $this->assertRaw('<link rel="canonical"', 'Canonical URL was found in the HTML head');
   }
+
 }
diff --git a/core/modules/forum/lib/Drupal/forum/Tests/ForumBlockTest.php b/core/modules/forum/lib/Drupal/forum/Tests/ForumBlockTest.php
index 1efaeae..de28051 100644
--- a/core/modules/forum/lib/Drupal/forum/Tests/ForumBlockTest.php
+++ b/core/modules/forum/lib/Drupal/forum/Tests/ForumBlockTest.php
@@ -57,17 +57,8 @@ public function testNewForumTopicsBlock() {
     // Create 5 forum topics.
     $topics = $this->createForumTopics();
 
-    $block_id = 'forum_new_block';
-    $default_theme = variable_get('theme_default', 'stark');
-
-    $block = array(
-      'title' => $this->randomName(8),
-      'machine_name' => $this->randomName(8),
-      'region' => 'sidebar_second',
-    );
-
     // Enable the new forum topics block.
-    $this->drupalPost('admin/structure/block/manage/' . $block_id . '/' . $default_theme, $block, t('Save block'));
+    $block = $this->drupalPlaceBlock('forum_new_block');
     $this->assertText(t('The block configuration has been saved.'), '"New forum topics" block was enabled');
 
     $this->assertLink(t('More'), 0, 'New forum topics block has a "more"-link.');
@@ -79,7 +70,6 @@ public function testNewForumTopicsBlock() {
     }
 
     // Configure the new forum topics block to only show 2 topics.
-    $block['config_id'] = 'plugin.core.block.' . $default_theme . '.' . $block['machine_name'];
     $config = config($block['config_id']);
     $config->set('block_count', 2);
     $config->save();
@@ -122,19 +112,7 @@ public function testActiveForumTopicsBlock() {
     }
 
     // Enable the block.
-    $block_id = 'forum_active_block';
-    $default_theme = variable_get('theme_default', 'stark');
-
-    $block = array(
-      'title' => $this->randomName(8),
-      'machine_name' => $this->randomName(8),
-      'region' => 'sidebar_second',
-    );
-
-    // Enable the active forum block.
-    $this->drupalPost('admin/structure/block/manage/' . $block_id . '/' . $default_theme, $block, t('Save block'));
-    $this->assertText(t('The block configuration has been saved.'), 'Active forum topics forum block was enabled');
-
+    $block = $this->drupalPlaceBlock('forum_active_block');
     $this->assertLink(t('More'), 0, 'Active forum topics block has a "more"-link.');
     $this->assertLinkByHref('forum', 0, 'Active forum topics block has a "more"-link.');
 
@@ -151,7 +129,6 @@ public function testActiveForumTopicsBlock() {
     }
 
     // Configure the active forum block to only show 2 topics.
-    $block['config_id'] = 'plugin.core.block.' . $default_theme . '.' . $block['machine_name'];
     $config = config($block['config_id']);
     $config->set('block_count', 2);
     $config->save();
diff --git a/core/modules/forum/lib/Drupal/forum/Tests/ForumNodeAccessTest.php b/core/modules/forum/lib/Drupal/forum/Tests/ForumNodeAccessTest.php
index 5d3594a..e619923 100644
--- a/core/modules/forum/lib/Drupal/forum/Tests/ForumNodeAccessTest.php
+++ b/core/modules/forum/lib/Drupal/forum/Tests/ForumNodeAccessTest.php
@@ -75,26 +75,10 @@ function testForumNodeAccess() {
     $public_node = $this->drupalGetNodeByTitle($public_node_title);
     $this->assertTrue(!empty($public_node), 'New public forum node found in database.');
 
-    $default_theme = variable_get('theme_default', 'stark');
-    // Enable the active forum block.
-    $block_id = 'forum_active_block';
-    $block = array(
-      'title' => $this->randomName(8),
-      'machine_name' => $this->randomName(8),
-      'region' => 'sidebar_second',
-    );
-    $this->drupalPost('admin/structure/block/manage/' . $block_id . '/' . $default_theme, $block, t('Save block'));
-    $this->assertText(t('The block configuration has been saved.'), 'Active forum topics block enabled');
-
-    // Enable the new forum block.
-    $block_id = 'forum_new_block';
-    $block = array(
-      'title' => $this->randomName(8),
-      'machine_name' => $this->randomName(8),
-      'region' => 'sidebar_second',
-    );
-    $this->drupalPost('admin/structure/block/manage/' . $block_id . '/' . $default_theme, $block, t('Save block'));
-    $this->assertText(t('The block configuration has been saved.'), 'New forum topics block enabled');
+
+    // Enable the new and active forum blocks.
+    $this->drupalPlaceBlock('forum_active_block');
+    $this->drupalPlaceBlock('forum_new_block');
 
     // Test for $access_user.
     $this->drupalLogin($access_user);
@@ -112,4 +96,5 @@ function testForumNodeAccess() {
     $this->assertNoText($private_node->title, 'Private node not found in block by $no_access_user');
     $this->assertText($public_node->title, 'Public node found in block by $no_access_user');
   }
+
 }
diff --git a/core/modules/language/lib/Drupal/language/Tests/LanguageSwitchingTest.php b/core/modules/language/lib/Drupal/language/Tests/LanguageSwitchingTest.php
index 6ff3024..8effdfe 100644
--- a/core/modules/language/lib/Drupal/language/Tests/LanguageSwitchingTest.php
+++ b/core/modules/language/lib/Drupal/language/Tests/LanguageSwitchingTest.php
@@ -42,16 +42,7 @@ function setUp() {
    */
   function testLanguageBlock() {
     // Enable the language switching block.
-    $language_type = LANGUAGE_TYPE_INTERFACE;
-    $block_id = 'language_block:' . $language_type;
-    $default_theme = variable_get('theme_default', 'stark');
-    $block = array(
-      'title' => $this->randomName(8),
-      'machine_name' => $this->randomName(8),
-      'region' => 'sidebar_first',
-    );
-    $this->drupalPost('admin/structure/block/manage/' . $block_id . '/' . $default_theme, $block, t('Save block'));
-    $this->assertText(t('The block configuration has been saved.'), 'Block enabled');
+    $block = $this->drupalPlaceBlock('language_block:' . LANGUAGE_TYPE_INTERFACE, array('machine_name' => 'test_language_block'));
 
     // Add language.
     $edit = array(
@@ -65,10 +56,10 @@ function testLanguageBlock() {
 
     // Assert that the language switching block is displayed on the frontpage.
     $this->drupalGet('');
-    $this->assertText($block['title'], 'Language switcher block found.');
+    $this->assertText($block['subject'], 'Language switcher block found.');
 
     // Assert that only the current language is marked as active.
-    list($language_switcher) = $this->xpath('//div[@id=:id]/div[@class="content"]', array(':id' => 'block-' . strtolower($block['machine_name'])));
+    list($language_switcher) = $this->xpath('//div[@id=:id]/div[@class="content"]', array(':id' => 'block-test-language-block'));
     $links = array(
       'active' => array(),
       'inactive' => array(),
@@ -97,4 +88,5 @@ function testLanguageBlock() {
     $this->assertIdentical($links, array('active' => array('en'), 'inactive' => array('fr')), 'Only the current language list item is marked as active on the language switcher block.');
     $this->assertIdentical($anchors, array('active' => array('en'), 'inactive' => array('fr')), 'Only the current language anchor is marked as active on the language switcher block.');
   }
+
 }
diff --git a/core/modules/language/lib/Drupal/language/Tests/LanguageUILanguageNegotiationTest.php b/core/modules/language/lib/Drupal/language/Tests/LanguageUILanguageNegotiationTest.php
index 4b8b512..e86ad6c 100644
--- a/core/modules/language/lib/Drupal/language/Tests/LanguageUILanguageNegotiationTest.php
+++ b/core/modules/language/lib/Drupal/language/Tests/LanguageUILanguageNegotiationTest.php
@@ -402,15 +402,7 @@ function testUrlLanguageFallback() {
     $this->drupalGet('admin/config/regional/language/detection');
 
     // Enable the language switcher block.
-    $block_id = 'language_block:' . LANGUAGE_TYPE_INTERFACE;
-    $default_theme = variable_get('theme_default', 'stark');
-    $block = array(
-      'title' => $this->randomName(8),
-      'machine_name' => $this->randomName(8),
-      'region' => 'sidebar_first',
-    );
-    $this->drupalPost('admin/structure/block/manage/' . $block_id . '/' . $default_theme, $block, t('Save block'));
-    $this->assertText(t('The block configuration has been saved.'), 'Block enabled');
+    $this->drupalPlaceBlock('language_block:' . LANGUAGE_TYPE_INTERFACE, array('machine_name' => 'test_language_block'));
 
     // Access the front page without specifying any valid URL language prefix
     // and having as browser language preference a non-default language.
@@ -420,7 +412,7 @@ function testUrlLanguageFallback() {
 
     // Check that the language switcher active link matches the given browser
     // language.
-    $args = array(':id' => 'block-' . strtolower($block['machine_name']), ':url' => base_path() . $GLOBALS['script_path'] . $langcode_browser_fallback);
+    $args = array(':id' => 'block-test-language-block', ':url' => base_path() . $GLOBALS['script_path'] . $langcode_browser_fallback);
     $fields = $this->xpath('//div[@id=:id]//a[@class="language-link active" and starts-with(@href, :url)]', $args);
     $this->assertTrue($fields[0] == $languages[$langcode_browser_fallback]->name, 'The browser language is the URL active language');
 
diff --git a/core/modules/menu/lib/Drupal/menu/Tests/MenuTest.php b/core/modules/menu/lib/Drupal/menu/Tests/MenuTest.php
index ac2e4c3..caf27e6 100644
--- a/core/modules/menu/lib/Drupal/menu/Tests/MenuTest.php
+++ b/core/modules/menu/lib/Drupal/menu/Tests/MenuTest.php
@@ -16,7 +16,7 @@ class MenuTest extends WebTestBase {
    *
    * @var array
    */
-  public static $modules = array('menu');
+  public static $modules = array('menu', 'block');
 
   protected $profile = 'standard';
 
@@ -138,7 +138,6 @@ function addCustomMenuCRUD() {
    * Add custom menu.
    */
   function addCustomMenu() {
-    // Add custom menu.
 
     // Try adding a menu using a menu_name that is too long.
     $this->drupalGet('admin/structure/menu/add');
@@ -176,16 +175,12 @@ function addCustomMenu() {
 
     // Enable the custom menu block.
     $menu_name = 'menu-' . $menu_name; // Drupal prepends the name with 'menu-'.
-    $default_theme = variable_get('theme_default', 'stark');
-    $this->drupalGet("admin/structure/block/list/block_plugin_ui:{$default_theme}/add");
+    // Confirm that the custom menu block is available.
+    $this->drupalGet('admin/structure/block/list/block_plugin_ui:' . variable_get('theme_default', 'stark') . '/add');
     $this->assertText($title);
-    $block = array(
-      'machine_name' => $this->randomName(8),
-      'region' => 'sidebar_first',
-    );
-    $this->drupalPost("admin/structure/block/manage/menu_menu_block:$menu_name/$default_theme", $block, t('Save block'));
-    $this->assertResponse(200);
 
+    // Enable the block.
+    $this->drupalPlaceBlock('menu_menu_block:' . $menu_name);
     return menu_load($menu_name);
   }
 
diff --git a/core/modules/node/lib/Drupal/node/Tests/NodeBlockFunctionalTest.php b/core/modules/node/lib/Drupal/node/Tests/NodeBlockFunctionalTest.php
index 17711aa..b5d5205 100644
--- a/core/modules/node/lib/Drupal/node/Tests/NodeBlockFunctionalTest.php
+++ b/core/modules/node/lib/Drupal/node/Tests/NodeBlockFunctionalTest.php
@@ -60,22 +60,8 @@ public function testRecentNodeBlock() {
       'access content' => FALSE,
     ));
 
-    // Enable the recent content block.
-    $block_id = 'node_recent_block';
-    $default_theme = variable_get('theme_default', 'stark');
-    $block = array(
-      'title' => $this->randomName(8),
-      'machine_name' => $this->randomName(8),
-      'region' => 'sidebar_first',
-    );
-    $this->drupalPost('admin/structure/block/manage/' . $block_id . '/' . $default_theme, $block, t('Save block'));
-    $this->assertText(t('The block configuration has been saved.'), 'Node enabled.');
-
-    // Set the number of recent posts to 2.
-    $block['config_id'] = 'plugin.core.block.' . $default_theme . '.' . $block['machine_name'];
-    $config = config($block['config_id']);
-    $config->set('block_count', 2);
-    $config->save();
+    // Enable the recent content block with two items.
+    $block = $this->drupalPlaceBlock('node_recent_block', array('machine_name' => 'test_block', 'block_count' => 2));
 
     // Test that block is not visible without nodes.
     $this->drupalGet('');
@@ -105,7 +91,7 @@ public function testRecentNodeBlock() {
     // see the block.
     $this->drupalLogout();
     $this->drupalGet('');
-    $this->assertNoText($block['title'], 'Block was not found.');
+    $this->assertNoText($block['subject'], 'Block was not found.');
 
     // Test that only the 2 latest nodes are shown.
     $this->drupalLogin($this->webUser);
@@ -114,7 +100,7 @@ public function testRecentNodeBlock() {
     $this->assertText($node3->label(), 'Node found in block.');
 
     // Check to make sure nodes are in the right order.
-    $this->assertTrue($this->xpath('//div[@id="block-' . strtolower($block['machine_name']) . '"]/div/table/tbody/tr[position() = 1]/td/div/a[text() = "' . $node3->label() . '"]'), 'Nodes were ordered correctly in block.');
+    $this->assertTrue($this->xpath('//div[@id="block-test-block"]/div/table/tbody/tr[position() = 1]/td/div/a[text() = "' . $node3->label() . '"]'), 'Nodes were ordered correctly in block.');
 
     $this->drupalLogout();
     $this->drupalLogin($this->adminUser);
@@ -137,21 +123,10 @@ public function testRecentNodeBlock() {
     $this->assertText($node3->label(), 'Node found in block.');
     $this->assertText($node4->label(), 'Node found in block.');
 
-    // Enable the "Powered by Drupal" block and test the visibility by node
-    // type functionality.
-    $block_name = 'system_powered_by_block';
-    $block = array(
-      'machine_name' => $this->randomName(8),
-      'region' => 'sidebar_first',
-      'title' => $this->randomName(8),
+    // Enable the "Powered by Drupal" block only on article nodes.
+    $block = $this->drupalPlaceBlock('system_powered_by_block', array(
       'visibility[node_type][types][article]' => TRUE,
-    );
-    // Set the block to be shown only on node/xx if node is an article.
-    $this->drupalPost('admin/structure/block/manage/' . $block_name . '/' . $default_theme, $block, t('Save block'));
-    $this->assertText('The block configuration has been saved.', 'Block was saved');
-
-    // Configure the new forum topics block to only show 2 topics.
-    $block['config_id'] = 'plugin.core.block.' . $default_theme . '.' . $block['machine_name'];
+             ));
     $config = config($block['config_id']);
     $node_type_visibility = $config->get('visibility.node_type.types.article');
     $this->assertEqual($node_type_visibility, 'article', 'Visibility settings were saved to configuration');
@@ -161,12 +136,13 @@ public function testRecentNodeBlock() {
 
     // Verify visibility rules.
     $this->drupalGet('');
-    $this->assertNoText($block['title'], 'Block was not displayed on the front page.');
+    $this->assertNoText($block['subject'], 'Block was not displayed on the front page.');
     $this->drupalGet('node/add/article');
-    $this->assertText($block['title'], 'Block was displayed on the node/add/article page.');
+    $this->assertText($block['subject'], 'Block was displayed on the node/add/article page.');
     $this->drupalGet('node/' . $node1->nid);
-    $this->assertText($block['title'], 'Block was displayed on the node/N when node is of type article.');
+    $this->assertText($block['subject'], 'Block was displayed on the node/N when node is of type article.');
     $this->drupalGet('node/' . $node5->nid);
-    $this->assertNoText($block['title'], 'Block was not displayed on nodes of type page.');
+    $this->assertNoText($block['subject'], 'Block was not displayed on nodes of type page.');
   }
+
 }
diff --git a/core/modules/node/lib/Drupal/node/Tests/NodeBlockTest.php b/core/modules/node/lib/Drupal/node/Tests/NodeBlockTest.php
deleted file mode 100644
index b738129..0000000
--- a/core/modules/node/lib/Drupal/node/Tests/NodeBlockTest.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/**
- * @file
- * Definition of Drupal\node\Tests\NodeBlockTest.
- */
-
-namespace Drupal\node\Tests;
-
-/**
- * Tests the availability of the syndicate block.
- */
-class NodeBlockTest extends NodeTestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = array('block');
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Block availability',
-      'description' => 'Check if the syndicate block is available.',
-      'group' => 'Node',
-    );
-  }
-
-  function setUp() {
-    parent::setUp();
-
-    // Create a user and log in.
-    $admin_user = $this->drupalCreateUser(array('administer blocks'));
-    $this->drupalLogin($admin_user);
-  }
-
-  /**
-   * Tests that the "Syndicate" block is shown when enabled.
-   */
-  public function testSyndicateBlock() {
-    $block_id = 'node_syndicate_block';
-    $default_theme = variable_get('theme_default', 'stark');
-
-    $block = array(
-      'title' => $this->randomName(8),
-      'machine_name' => $this->randomName(8),
-      'region' => 'sidebar_second',
-    );
-
-    // Enable the syndicate block.
-    $this->drupalPost('admin/structure/block/manage/' . $block_id . '/' . $default_theme, $block, t('Save block'));
-    $this->assertText(t('The block configuration has been saved.'), 'Node syndicate block enabled.');
-
-    // Confirm that the block's xpath is available.
-    $xpath = $this->buildXPathQuery('//div[@id=:id]/*', array(':id' => 'block-' . strtr(strtolower($block['machine_name']), '-', '_')));
-    $this->assertFieldByXPath($xpath, NULL, 'Syndicate block found.');
-  }
-}
diff --git a/core/modules/node/lib/Drupal/node/Tests/NodeSyndicateBlockTest.php b/core/modules/node/lib/Drupal/node/Tests/NodeSyndicateBlockTest.php
new file mode 100644
index 0000000..4e5a209
--- /dev/null
+++ b/core/modules/node/lib/Drupal/node/Tests/NodeSyndicateBlockTest.php
@@ -0,0 +1,47 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\node\Tests\NodeSyndicateBlockTest.
+ */
+
+namespace Drupal\node\Tests;
+
+/**
+ * Tests the availability of the syndicate block.
+ */
+class NodeSyndicateBlockTest extends NodeTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('block');
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Syndicate block',
+      'description' => 'Check if the syndicate block is available.',
+      'group' => 'Node',
+    );
+  }
+
+  function setUp() {
+    parent::setUp();
+
+    // Create a user and log in.
+    $admin_user = $this->drupalCreateUser(array('administer blocks'));
+    $this->drupalLogin($admin_user);
+  }
+
+  /**
+   * Tests that the "Syndicate" block is shown when enabled.
+   */
+  public function testSyndicateBlock() {
+    // Place the "Syndicate" block and confirm that it is rendered.
+    $this->drupalPlaceBlock('node_syndicate_block', array('machine_name' => 'test_syndicate_block'));
+    $this->assertFieldByXPath('//div[@id="block-test-syndicate-block"]/*', NULL, 'Syndicate block found.');
+  }
+
+}
diff --git a/core/modules/openid/lib/Drupal/openid/Tests/OpenIDTestBase.php b/core/modules/openid/lib/Drupal/openid/Tests/OpenIDTestBase.php
index acdc7cf..3110d88 100644
--- a/core/modules/openid/lib/Drupal/openid/Tests/OpenIDTestBase.php
+++ b/core/modules/openid/lib/Drupal/openid/Tests/OpenIDTestBase.php
@@ -24,16 +24,10 @@
   function setUp() {
     parent::setUp();
 
+    // Enable user login block.
     $this->admin_user = $this->drupalCreateUser(array('administer blocks'));
     $this->drupalLogin($this->admin_user);
-
-    // Enable user login block.
-    $edit = array(
-      'machine_name' => 'user_login',
-      'region' => 'sidebar_first',
-    );
-    $this->drupalPost('admin/structure/block/manage/user_login_block/stark', $edit, t('Save block'));
-
+    $this->drupalPlaceBlock('user_login_block');
     $this->drupalLogout();
 
     // Use a different front page than login page for testing OpenID login from
diff --git a/core/modules/poll/lib/Drupal/poll/Tests/PollBlockTest.php b/core/modules/poll/lib/Drupal/poll/Tests/PollBlockTest.php
index 49fa169..6a86d21 100644
--- a/core/modules/poll/lib/Drupal/poll/Tests/PollBlockTest.php
+++ b/core/modules/poll/lib/Drupal/poll/Tests/PollBlockTest.php
@@ -46,18 +46,8 @@ function setUp() {
    * Tests creating, viewing, voting on recent poll block.
    */
   function testRecentBlock() {
-    $block_id = 'poll_recent_block';
-    $default_theme = variable_get('theme_default', 'stark');
-
-    $block = array(
-      'title' => $this->randomName(8),
-      'machine_name' => $this->randomName(8),
-      'region' => 'footer',
-    );
-
-    // Enable the most recent poll block.
-    $this->drupalPost('admin/structure/block/manage/' . $block_id . '/' . $default_theme, $block, t('Save block'));
-    $this->assertText(t('The block configuration has been saved.'), '"Most recent poll" block enabled');
+    // Enable the recent poll block.
+    $this->drupalPlaceBlock('poll_recent_block');
 
     // Create a poll which should appear in recent polls block.
     $title = $this->randomName();
diff --git a/core/modules/search/lib/Drupal/search/Tests/SearchBlockTest.php b/core/modules/search/lib/Drupal/search/Tests/SearchBlockTest.php
index db977e5..b358ded 100644
--- a/core/modules/search/lib/Drupal/search/Tests/SearchBlockTest.php
+++ b/core/modules/search/lib/Drupal/search/Tests/SearchBlockTest.php
@@ -7,10 +7,11 @@
 
 namespace Drupal\search\Tests;
 
+/**
+ * Tests the rendering of the search block.
+ */
 class SearchBlockTest extends SearchTestBase {
 
-  protected $adminUser;
-
   /**
    * Modules to enable.
    *
@@ -30,27 +31,16 @@ function setUp() {
     parent::setUp();
 
     // Create and login user.
-    $this->adminUser = $this->drupalCreateUser(array('administer blocks', 'search content'));
-    $this->drupalLogin($this->adminUser);
+    $admin_user = $this->drupalCreateUser(array('administer blocks', 'search content'));
+    $this->drupalLogin($admin_user);
   }
 
   /**
    * Test that the search form block can be placed and works.
    */
   protected function testSearchFormBlock() {
-    $block_id = 'search_form_block';
-    $default_theme = variable_get('theme_default', 'stark');
-
-    $block = array(
-      'title' => $this->randomName(8),
-      'machine_name' => $this->randomName(8),
-      'region' => 'content',
-    );
-
-    // Enable the search block.
-    $this->drupalPost('admin/structure/block/manage/' . $block_id . '/' . $default_theme, $block, t('Save block'));
-    $this->assertText(t('The block configuration has been saved.'), '"Search form" block enabled');
-    $this->assertText($block['title'], 'Block title was found.');
+    $block = $this->drupalPlaceBlock('search_form_block');
+    $this->assertText($block['subject'], 'Block title was found.');
 
     // Test a normal search via the block form, from the front page.
     $terms = array('search_block_form' => 'test');
@@ -64,7 +54,6 @@ protected function testSearchFormBlock() {
     $this->assertResponse(200);
     $this->assertText('Your search yielded no results');
 
-    $block['config_id'] = 'plugin.core.block.' . $default_theme . '.' . $block['machine_name'];
     $config = config($block['config_id']);
     $config->set('visibility.path.pages', 'search');
     $config->save();
@@ -92,4 +81,5 @@ protected function testSearchFormBlock() {
       'Redirected to correct url.'
     );
   }
+
 }
diff --git a/core/modules/search/lib/Drupal/search/Tests/SearchConfigSettingsFormTest.php b/core/modules/search/lib/Drupal/search/Tests/SearchConfigSettingsFormTest.php
index e66ad90..4a7186f 100644
--- a/core/modules/search/lib/Drupal/search/Tests/SearchConfigSettingsFormTest.php
+++ b/core/modules/search/lib/Drupal/search/Tests/SearchConfigSettingsFormTest.php
@@ -51,11 +51,7 @@ function setUp() {
     search_update_totals();
 
     // Enable the search block.
-    $edit = array(
-      'machine_name' => 'search',
-      'region' => 'content',
-    );
-    $this->drupalPost('admin/structure/block/manage/search_form_block/stark', $edit, t('Save block'));
+    $this->drupalPlaceBlock('search');
   }
 
   /**
diff --git a/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php b/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php
index 4e3b101..d80a76e 100644
--- a/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php
+++ b/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php
@@ -340,6 +340,79 @@ protected function drupalCreateContentType($settings = array()) {
   }
 
   /**
+   * Creates a block instance based on default settings.
+   *
+   * Note: Until this can be done programmatically, the active user account
+   * must have permission to administer blocks.
+   *
+   * @param string $plugin_id
+   *   The plugin ID of the block type for this block instance.
+   * @param array $settings
+   *   (optional) An associative array of settings for the block instance.
+   *   Override the defaults by specifying the key and value  in the array, for
+   *   example:
+   *   @code
+   *     $this->drupalPlaceBlock('system_powered_by_block', array(
+   *       'title' => t('Hello, world!'),
+   *     ));
+   *   @endcode
+   *   The following defaults are provided:
+   *   - title: Random string.
+   *   - machine_name: Random string.
+   *   - region: 'sidebar_first'.
+   * @param string $theme
+   *   (optional) The theme for which to add a block instance. Defaults to the
+   *   default theme.
+   *
+   * @return array|false
+   *   The block instance configuration from BlockBase::getConfig(), or FALSE
+   *   on failure.
+   *
+   * @todo
+   *   Create the block programmatically once block instances are configuration
+   *   entities.
+   * @todo
+   *   Add support for creating custom block instances.
+   */
+  protected function drupalPlaceBlock($plugin_id, array $settings = array(), $theme = NULL) {
+    // Confirm that the active user has permission to add the block instance.
+    // @todo Remove this check once it is possible to do this programmatically.
+    if (!user_access('administer blocks', $this->loggedInUser)) {
+      $this->fail('The logged in user does not have permission to administer blocks.');
+      return FALSE;
+    }
+
+    // If no theme was specified, use the default theme.
+    $theme = $theme ?: variable_get('theme_default', 'stark');
+
+    // Populate some default block settings.
+    $settings += array(
+      'title' => $this->randomName(8),
+      'machine_name' => strtolower($this->randomName(8)),
+      'region' => 'sidebar_first',
+    );
+
+    // Submit the block instance configuration.
+    $this->drupalPost('admin/structure/block/manage/' . $plugin_id . '/' . $theme, $settings, t('Save block'));
+    $this->assertText(
+      t('The block configuration has been saved.'),
+      format_string(
+        '%plugin block instance added for %theme',
+        array(
+          '%plugin' => $plugin_id,
+          '%theme' => $theme,
+        )
+      )
+    );
+
+    // Return the created block instance.
+    $instance_id = "plugin.core.block.$theme." . $settings['machine_name'];
+    $manager = $this->container->get('plugin.manager.block');
+    $block = $manager->getInstance(array('config' => $instance_id));
+    return $block->getConfig();
+  }
+
+  /**
    * Get a list files that can be used in tests.
    *
    * @param $type
diff --git a/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsReportsTest.php b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsReportsTest.php
index 3454e35..1efb7fb 100644
--- a/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsReportsTest.php
+++ b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsReportsTest.php
@@ -11,6 +11,7 @@
  * Tests that report pages render properly, and that access logging works.
  */
 class StatisticsReportsTest extends StatisticsTestBase {
+
   public static function getInfo() {
     return array(
       'name' => 'Statistics reports tests',
@@ -86,16 +87,11 @@ function testPopularContentBlock() {
     drupal_http_request($stats_path, array('method' => 'POST', 'data' => $post, 'headers' => $headers, 'timeout' => 10000));
 
     // Configure and save the block.
-    $block_id = 'statistics_popular_block';
-    $default_theme = variable_get('theme_default', 'stark');
-    $block = array(
-      'machine_name' => $this->randomName(8),
-      'region' => 'sidebar_first',
+    $this->drupalPlaceBlock('statistics_popular_block', array(
       'statistics_block_top_day_num' => 3,
       'statistics_block_top_all_num' => 3,
       'statistics_block_top_last_num' => 3,
-    );
-    $this->drupalPost('admin/structure/block/manage/' . $block_id . '/' . $default_theme, $block, t('Save block'));
+    ));
 
     // Get some page and check if the block is displayed.
     $this->drupalGet('user');
@@ -106,4 +102,5 @@ function testPopularContentBlock() {
 
     $this->assertRaw(l($node->label(), 'node/' . $node->nid), 'Found link to visited node.');
   }
+
 }
diff --git a/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php b/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php
index 92bfd68..9c51a89 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php
@@ -17,8 +17,11 @@ class BreadcrumbTest extends MenuTestBase {
    *
    * @var array
    */
-  public static $modules = array('menu_test');
+  public static $modules = array('menu_test', 'block');
 
+  /**
+   * Test paths in the Standard profile.
+   */
   protected $profile = 'standard';
 
   public static function getInfo() {
@@ -39,14 +42,12 @@ function setUp() {
     // This test puts menu links in the Tools menu and then tests for their
     // presence on the page, so we need to ensure that the Tools block will be
     // displayed in the default theme and admin theme.
-    $default_theme = variable_get('theme_default', 'stark');
-    $admin_theme = variable_get('admin_theme', 'seven');
-    $edit = array(
+    $settings = array(
       'machine_name' => 'system_menu_tools',
       'region' => 'content',
     );
-    $this->drupalPost("admin/structure/block/manage/system_menu_block:menu-tools/{$default_theme}", $edit, t('Save block'));
-    $this->drupalPost("admin/structure/block/manage/system_menu_block:menu-tools/{$admin_theme}", $edit, t('Save block'));
+    $this->drupalPlaceBlock('system_menu_block:menu-tools', $settings);
+    $this->drupalPlaceBlock('system_menu_block:menu-tools', $settings, config('system.theme')->get('admin'));
   }
 
   /**
diff --git a/core/modules/system/lib/Drupal/system/Tests/Menu/TrailTest.php b/core/modules/system/lib/Drupal/system/Tests/Menu/TrailTest.php
index d02e534..3dfd5c7 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Menu/TrailTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Menu/TrailTest.php
@@ -33,24 +33,10 @@ function setUp() {
     $this->admin_user = $this->drupalCreateUser(array('administer site configuration', 'access administration pages', 'administer blocks'));
     $this->drupalLogin($this->admin_user);
 
-    // This test puts menu links in the Tools menu and then tests for their
-    // presence on the page, so we need to ensure that the Tools block will be
-    // displayed in the default theme.
-    $default_theme = variable_get('theme_default', 'stark');
-    $block = array(
-      'machine_name' => $this->randomName(8),
-      'region' => 'sidebar_first',
-    );
-    $this->drupalPost("admin/structure/block/manage/system_menu_block:menu-tools/{$default_theme}", $block, t('Save block'));
-
-    // This test puts menu links in the Administration menu and then tests for
-    // their presence on the page, so we need to ensure that the Administration
-    // block will be displayed in the default theme.
-    $block = array(
-      'machine_name' => $this->randomName(8),
-      'region' => 'sidebar_first',
-    );
-    $this->drupalPost("admin/structure/block/manage/system_menu_block:menu-admin/{$default_theme}", $block, t('Save block'));
+    // This test puts menu links in the Tools and Administration menus and then
+    // tests for their presence on the page.
+    $this->drupalPlaceBlock('system_menu_block:menu-tools');
+    $this->drupalPlaceBlock('system_menu_block:menu-admin');
   }
 
   /**
diff --git a/core/modules/system/lib/Drupal/system/Tests/System/AccessDeniedTest.php b/core/modules/system/lib/Drupal/system/Tests/System/AccessDeniedTest.php
index af4f0a6..dc555cb 100644
--- a/core/modules/system/lib/Drupal/system/Tests/System/AccessDeniedTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/System/AccessDeniedTest.php
@@ -54,13 +54,9 @@ function testAccessDenied() {
     $this->drupalPost('admin/config/system/site-information', $edit, t('Save configuration'));
 
     // Enable the user login block.
-    $edit = array(
-      'machine_name' => 'login',
-      'region' => 'sidebar_first',
-    );
-    $this->drupalPost('admin/structure/block/manage/user_login_block/stark', $edit, t('Save block'));
+    $this->drupalPlaceBlock('user_login_block', array('machine_name' => 'login'));
 
-    // Logout and check that the user login block is shown on custom 403 pages.
+    // Log out and check that the user login block is shown on custom 403 pages.
     $this->drupalLogout();
     $this->drupalGet('admin');
     $this->assertText($this->admin_user->name, 'Found the custom 403 page');
diff --git a/core/modules/system/lib/Drupal/system/Tests/Upgrade/BlockUpgradePathTest.php b/core/modules/system/lib/Drupal/system/Tests/Upgrade/BlockUpgradePathTest.php
index 5bc27d2..1ca6e9a 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Upgrade/BlockUpgradePathTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Upgrade/BlockUpgradePathTest.php
@@ -35,26 +35,20 @@ public function setUp() {
   public function testBlockUpgradeTitleLength() {
     $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
 
-    $block_id = 'system_powered_by_block';
-    $default_theme = variable_get('theme_default', 'stark');
-    $block = array(
-      'machine_name' => $this->randomName(8),
-      'region' => 'sidebar_first',
-    );
-
-    // Add a new custom block with a title of 255 characters.
-    $block['title'] = $this->randomName(255);
-    $this->drupalPost('admin/structure/block/manage/' . $block_id . '/' . $default_theme, $block, t('Save block'));
+    // Add a block instance with a 255-character title.
+    $title = $this->randomName(255);
+    $this->drupalPlaceBlock('system_powered_by_block', array('title' => $title));
     // Confirm that the custom block has been created, and title matches input.
     $this->drupalGet('');
-    $this->assertText($block['title'], 'Block with title longer than 64 characters successfully created.');
+    $this->assertText($title, 'Block with title longer than 64 characters successfully created.');
 
     // Add a new custom block with a title over 255 characters.
-    $block['title'] = $this->randomName(256);
-    $this->drupalPost('admin/structure/block/manage/' . $block_id . '/' . $default_theme, $block, t('Save block'));
+    $longer_title = $this->randomName(256);
+    $this->drupalPlaceBlock('system_powered_by_block', array('title' => $longer_title));
+
     // Confirm that the custom block cannot be created with title longer than
     // the maximum number of characters.
-    $this->assertText('Block title cannot be longer than 255 characters', 'Block with title longer than 255 characters created unsuccessfully.');
+    $this->assertText('Block title cannot be longer than 255 characters');
   }
 
 }
diff --git a/core/modules/translation/lib/Drupal/translation/Tests/TranslationTest.php b/core/modules/translation/lib/Drupal/translation/Tests/TranslationTest.php
index c8dbdc8..fce2482 100644
--- a/core/modules/translation/lib/Drupal/translation/Tests/TranslationTest.php
+++ b/core/modules/translation/lib/Drupal/translation/Tests/TranslationTest.php
@@ -56,8 +56,7 @@ function setUp() {
     $this->assertRaw(t('The content type %type has been updated.', array('%type' => 'Basic page')), 'Basic page content type has been updated.');
 
     // Enable the language switcher block.
-    $edit = array('machine_name' => 'language_switcher', 'region' => 'sidebar_first');
-    $this->drupalPost('admin/structure/block/manage/language_block:language_interface/bartik', $edit, t('Save block'));
+    $this->drupalPlaceBlock('language_block:language_interface');
 
     // Reset static caches in our local language environment.
     $this->resetCaches();
diff --git a/core/modules/user/lib/Drupal/user/Tests/UserBlocksTests.php b/core/modules/user/lib/Drupal/user/Tests/UserBlocksTests.php
index a4458d4..a2f027f 100644
--- a/core/modules/user/lib/Drupal/user/Tests/UserBlocksTests.php
+++ b/core/modules/user/lib/Drupal/user/Tests/UserBlocksTests.php
@@ -41,20 +41,7 @@ function setUp() {
 
     $this->adminUser = $this->drupalCreateUser(array('administer blocks'));
     $this->drupalLogin($this->adminUser);
-
-    $block_id = 'user_login_block';
-    $default_theme = variable_get('theme_default', 'stark');
-
-    $block = array(
-      'title' => $this->randomName(8),
-      'machine_name' => $this->randomName(8),
-      'region' => 'sidebar_first',
-    );
-
-    // Enable the user login block.
-    $this->drupalPost('admin/structure/block/manage/' . $block_id . '/' . $default_theme, $block, t('Save block'));
-    $this->assertText(t('The block configuration has been saved.'), 'User login block enabled');
-    $this->plugin_id = 'plugin.core.block.' . $default_theme . '.' . $block['machine_name'];
+    $this->drupalPlaceBlock('user_login_block');
     $this->drupalLogout($this->adminUser);
   }
 
diff --git a/core/modules/views/lib/Drupal/views/Tests/UI/OverrideDisplaysTest.php b/core/modules/views/lib/Drupal/views/Tests/UI/OverrideDisplaysTest.php
index 7d0d0cc..be4868e 100644
--- a/core/modules/views/lib/Drupal/views/Tests/UI/OverrideDisplaysTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/UI/OverrideDisplaysTest.php
@@ -53,15 +53,12 @@ function testOverrideDisplays() {
     $this->assertResponse(200);
     $this->assertText($original_title);
 
-    // Put the block into the first sidebar region.
-    $default_theme = variable_get('theme_default', 'stark');
-    $this->drupalGet("admin/structure/block/list/block_plugin_ui:{$default_theme}/add");
+    // Confirm that the view block is available in the block administration UI.
+    $this->drupalGet('admin/structure/block/list/block_plugin_ui:' . variable_get('theme_default', 'stark') . '/add');
     $this->assertText('View: ' . $view['human_name']);
-    $block = array(
-      'machine_name' => $this->randomName(8),
-      'region' => 'sidebar_first',
-    );
-    $this->drupalPost("admin/structure/block/manage/views_block:{$view['name']}-block_1/{$default_theme}", $block, t('Save block'));
+
+    // Place the block.
+    $this->drupalPlaceBlock("views_block:{$view['name']}-block_1");
 
     // Make sure the title appears in the block.
     $this->drupalGet('');
@@ -115,15 +112,12 @@ function testWizardMixedDefaultOverriddenDisplays() {
     $this->assertText($view['page[title]']);
     $this->assertNoText($view['block[title]']);
 
-    // Put the block into the first sidebar region.
-    $default_theme = variable_get('theme_default', 'stark');
-    $this->drupalGet("admin/structure/block/list/block_plugin_ui:{$default_theme}/add");
+    // Confirm that the block is available in the block administration UI.
+    $this->drupalGet('admin/structure/block/list/block_plugin_ui:' . variable_get('theme_default', 'stark') . '/add');
     $this->assertText('View: ' . $view['human_name']);
-    $block = array(
-      'machine_name' => $this->randomName(8),
-      'region' => 'sidebar_first',
-    );
-    $this->drupalPost("admin/structure/block/manage/views_block:{$view['name']}-block_1/{$default_theme}", $block, t('Save block'));
+
+    // Place the block.
+    $this->drupalPlaceBlock("views_block:{$view['name']}-block_1");
     $this->drupalGet('');
     $this->assertText($view['block[title]']);
     $this->assertNoText($view['page[title]']);
diff --git a/core/modules/views/lib/Drupal/views/Tests/Wizard/BasicTest.php b/core/modules/views/lib/Drupal/views/Tests/Wizard/BasicTest.php
index 757cde2..aff9227 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Wizard/BasicTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Wizard/BasicTest.php
@@ -122,15 +122,12 @@ function testViewsWizardAndListing() {
     $this->assertText($view3['description']);
     $this->assertLinkByHref(url($view3['page[path]']));
 
-    // Put the block into the first sidebar region.
-    $default_theme = variable_get('theme_default', 'stark');
-    $this->drupalGet("admin/structure/block/list/block_plugin_ui:{$default_theme}/add");
+    // Confirm that the block is available in the block administration UI.
+    $this->drupalGet('admin/structure/block/list/block_plugin_ui:' . variable_get('theme_default', 'stark') . '/add');
     $this->assertText('View: ' . $view3['human_name']);
-    $block = array(
-      'machine_name' => $this->randomName(8),
-      'region' => 'sidebar_first',
-    );
-    $this->drupalPost("admin/structure/block/manage/views_block:{$view3['name']}-block_1/{$default_theme}", $block, t('Save block'));
+
+    // Place the block.
+    $this->drupalPlaceBlock("views_block:{$view3['name']}-block_1");
 
     // Visit a random page (not the one that displays the view itself) and look
     // for the expected node title in the block.
diff --git a/core/modules/views/lib/Drupal/views/Tests/Wizard/ItemsPerPageTest.php b/core/modules/views/lib/Drupal/views/Tests/Wizard/ItemsPerPageTest.php
index c5be21b..95f4709 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Wizard/ItemsPerPageTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Wizard/ItemsPerPageTest.php
@@ -74,17 +74,12 @@ function testItemsPerPage() {
     $pos2 = strpos($content, $node2->label());
     $this->assertTrue($pos5 < $pos4 && $pos4 < $pos3 && $pos3 < $pos2, t('The nodes appear in the expected order in the page display.'));
 
-    $default_theme = variable_get('theme_default', 'stark');
-    $this->drupalGet("admin/structure/block/list/block_plugin_ui:{$default_theme}/add");
+    // Confirm that the block is listed in the block administration UI.
+    $this->drupalGet('admin/structure/block/list/block_plugin_ui:' . variable_get('theme_default', 'stark') . '/add');
     $this->assertText('View: ' . $view['human_name']);
-    // Put the block into the first sidebar region, visit a page that displays
-    // the block, and check that the nodes we expect appear in the correct
-    // order.
-    $block = array(
-      'machine_name' => $this->randomName(8),
-      'region' => 'sidebar_first',
-    );
-    $this->drupalPost("admin/structure/block/manage/views_block:{$view['name']}-block_1/{$default_theme}", $block, t('Save block'));
+    // Place the block, visit a page that displays the block, and check that the
+    // nodes we expect appear in the correct order.
+    $this->drupalPlaceBlock("views_block:{$view['name']}-block_1");
 
     $this->drupalGet('user');
     $content = $this->drupalGetContent();
