diff --git a/_support/Helper/Acceptance.php b/_support/Helper/Acceptance.php
index 41423dc16024151d7189195832da6a1d2f5cb08a..9f9f3b3dcdfd1d82e988b9a5013eaea07014e3c2 100644
--- a/_support/Helper/Acceptance.php
+++ b/_support/Helper/Acceptance.php
@@ -222,7 +222,6 @@ class Acceptance extends Module {
       'Image',
       'Image gallery',
       'Mailman subscription',
-      'Related links',
       'Tags',
       'Timeline',
       'CodePen',
diff --git a/_support/Step/Acceptance/ContentType.php b/_support/Step/Acceptance/ContentType.php
index 4e383108e1cf7df4e41134887be03cc793575478..0e44d674395d981dcf224ae60037304756b5c4ec 100644
--- a/_support/Step/Acceptance/ContentType.php
+++ b/_support/Step/Acceptance/ContentType.php
@@ -244,6 +244,7 @@ class ContentType extends \AcceptanceTester {
       $i->waitForText('Edit layout for');
 
       // Click on the add block.
+      $i->waitForText('Add block');
       $i->click('Add block');
       $i->waitForText('Choose a block');
 
@@ -251,14 +252,23 @@ class ContentType extends \AcceptanceTester {
       $i->click('Copy text');
       $i->waitForText('Configure block');
 
+      // Switch the block form iframe.
+      $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
+      $title = $i->uwRandomString();
       // FIll in fields.
-      $i->fillField('input[name="settings[label]"]', $i->uwRandomString());
+      $i->fillField('input[name="settings[label]"]', $title);
       $i->fillCkEditor($i->uwRandomString(), 'textarea[name="settings[block_form][field_uw_copy_text][0][value]"]');
 
-      // Click add block and ensure it appears on page.
-      $i->click('Add block');
-      $i->waitForElement(Locator::contains('div[class="uw-admin-label"]', 'Copy text'));
-      $i->seeElement(Locator::contains('div[class="uw-admin-label"]', 'Copy text'));
+      // Trigger CKEditor update.
+      $i->executeJS('for (instance in CKEDITOR.instances) { CKEDITOR.instances[instance].updateElement(); }');
+
+      // Submit form.
+      $i->click('input[id*="edit-actions-submit"]');
+
+      $i->switchToIFrame();
+      $i->waitForText($title);
+      $i->seeElement('div[class="uw-copy-text"]');
 
       // Save the layout and ensure that new block appears
       // on the page with correct section classes.
@@ -424,6 +434,7 @@ class ContentType extends \AcceptanceTester {
         $i->amOnPage($view_url . '/revisions');
 
         // Ensure that they can not view revisions.
+        $i->see('Access denied');
         $i->see('You are not authorized to access this page.');
       }
     }
diff --git a/acceptance/WcmsTestsApiCest.php b/acceptance/WcmsTestsApiCest.php
index a568736126a6e953b38724a1ae6d449f701afc71..4c0dd4495a1688bf2757c8753db5d752aeed6a7a 100644
--- a/acceptance/WcmsTestsApiCest.php
+++ b/acceptance/WcmsTestsApiCest.php
@@ -33,6 +33,8 @@ class WcmsTestsApiCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group api
    */
   public function testApi(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsAuthSiteCest.php b/acceptance/WcmsTestsAuthSiteCest.php
deleted file mode 100644
index bc4fee077661a29cdb5674759dcbf0222157ec92..0000000000000000000000000000000000000000
--- a/acceptance/WcmsTestsAuthSiteCest.php
+++ /dev/null
@@ -1,345 +0,0 @@
-<?php
-
-/**
- * Class AuthSiteCest.
- *
- * Tests for auth site.
- */
-class WcmsTestsAuthSiteCest {
-
-  /**
-   * Tests for auth site.
-   *
-   * @param AcceptanceTester $i
-   *   Acceptance test variable.
-   */
-  public function testAuthSite(AcceptanceTester $i) {
-
-    // Get the test cases.
-    $cases = $this->getCases($i);
-
-    // Get the default access denied message.
-    $default_message = $this->getDefaultMessage();
-
-    // Loop to check all cases.
-    foreach ($cases as $case => $edit) {
-
-      // Login as site manager.
-      $i->amOnPage('user/logout');
-      $i->logInWithRole('administrator');
-
-      $i->amOnPage('admin/config/system/auth_site');
-
-      $i->checkOption('#edit-enabled');
-      $i->waitForText('ACCESS CONTROL SETTINGS');
-
-      foreach ($edit as $id => $value) {
-        if ($id == 'edit-uw-access-control-method-group') {
-          $i->selectOption('#' . $id, $value);
-        }
-        else {
-          $i->fillField('#' . $id, $value);
-        }
-      }
-
-      // Click on save config and ensure that it saves.
-      $i->click('Save configuration');
-      $i->waitForText('The configuration options have been saved.');
-      $i->see('The configuration options have been saved.');
-
-      // Admin logout.
-      $i->amOnPage('user/logout');
-
-      // Non-logged in user loads home page.
-      $i->amOnPage('home');
-
-      // Check log in page.
-      switch ($case) {
-        // edit-uw-auth-site-access-denied-title is empty,
-        // and edit-uw-auth-site-access-denied-excerpt is default.
-        case 'case1':
-        case 'case5':
-        case 'case6':
-        case 'case7':
-        case 'case8':
-        case 'case9':
-          $i->see('Log in');
-          $i->see($default_message);
-          break;
-
-        // edit-uw-auth-site-access-denied-title is empty,
-        // and edit-uw-auth-site-access-denied-excerpt is changed.
-        case 'case2':
-          $i->see('Log in');
-          $i->see($edit['edit-uw-auth-site-text']);
-          break;
-
-        // edit-uw-auth-site-access-denied-title is filled,
-        // and edit-uw-auth-site-access-denied-excerpt is default.
-        case 'case3':
-          $i->see($edit['edit-uw-auth-site-access-denied-title']);
-          $i->see($default_message);
-          break;
-
-        // edit-uw-auth-site-access-denied-title is filled,
-        // and edit-uw-auth-site-access-denied-excerpt is changed.
-        case 'case4':
-          $i->see($edit['edit-uw-auth-site-access-denied-title']);
-          $i->see($edit['edit-uw-auth-site-access-denied-excerpt']);
-          break;
-      }
-
-      // Check for reset password and correct redirect url.
-      $i->dontSee('Reset your password');
-      $i->amOnPage('user/password');
-      $i->seeCurrentUrlEquals('/user/login?destination=/user/password');
-
-      // Log in as authenticated user.
-      $i->amOnPage('user/logout');
-      $i->logInWithRole('authenticated');
-
-      // Access denied message setting in home page.
-      $i->amOnPage('home');
-
-      switch ($case) {
-        // Authenticated user can view home page for these cases.
-        case 'case1':
-        case 'case2':
-        case 'case3':
-        case 'case4':
-        case 'case9':
-          $i->seeLink('Contacts');
-          $i->seeLink('Profiles');
-          $i->seeLink('Blog');
-          $i->seeLink('Events');
-          $i->seeLink('News');
-          break;
-
-        // Display custom access denied title and default message.
-        case 'case5':
-          $i->see($edit['edit-uw-auth-site-access-denied-title-logged-in']);
-          $i->see($default_message);
-          break;
-
-        // Display 'Access denied' title and custom message.
-        case 'case6':
-          $i->see('Access denied');
-          $i->see($edit['edit-uw-auth-site-access-denied-excerpt-logged-in']);
-          break;
-
-        // Display custom access denied title and message.
-        case 'case7':
-        case 'case8':
-          $i->see($edit['edit-uw-auth-site-access-denied-title-logged-in']);
-          $i->see($edit['edit-uw-auth-site-access-denied-excerpt-logged-in']);
-          break;
-
-      }
-
-      // Check 'admin/config/system/auth_site' as example,
-      // got default access denied for all cases.
-      $i->amOnPage('admin/config/system/auth_site');
-      $i->see('Access denied');
-      $i->see('You are not authorized to access this page');
-
-      // Site owner access admin/config/system/auth_site page.
-      $i->amOnPage('user/logout');
-      $i->logInWithRole('uw_role_site_owner');
-      $i->amOnPage('admin/config/system/auth_site');
-
-      // Site owner cannot view 'Authenticated site' settings.
-      $i->dontSee('Require authentication to access this site');
-    }
-  }
-
-  /**
-   * Function to get the default access denied message.
-   *
-   * @return string
-   *   The access denied message.
-   */
-  private function getDefaultMessage(): string {
-    return 'Content on this site is restricted to authorized users; you must log in. Note that if you are not an authorized user, you may be able to log in, but still not have access to the content.';
-  }
-
-  /**
-   * Function to get the test cases for auth site.
-   *
-   * @return array
-   *   Array of test cases for auth site.
-   */
-  private function getCases(AcceptanceTester $i): array {
-
-    // The default message in edit-uw-auth-site-text field.
-    $default_message = $this->getDefaultMessage();
-
-    return [
-      'case1' => [
-        'edit-uw-access-control-method-group' => 'auth',
-        'edit-uw-auth-site-access-denied-title' => '',
-        'edit-uw-auth-site-access-denied-excerpt' => '',
-        'edit-uw-auth-site-access-denied-title-logged-in' => '',
-        'edit-uw-auth-site-access-denied-excerpt-logged-in' => '',
-        'edit-uw-auth-site-text' => $default_message,
-      ],
-      'case2' => [
-        'edit-uw-access-control-method-group' => 'auth',
-        'edit-uw-auth-site-access-denied-title' => '',
-        'edit-uw-auth-site-access-denied-excerpt' => '',
-        'edit-uw-auth-site-access-denied-title-logged-in' => '',
-        'edit-uw-auth-site-access-denied-excerpt-logged-in' => '',
-        'edit-uw-auth-site-text' => $i->uwRandomString(),
-      ],
-      'case3' => [
-        'edit-uw-access-control-method-group' => 'auth',
-        'edit-uw-auth-site-access-denied-title' => $i->uwRandomString(),
-        'edit-uw-auth-site-access-denied-excerpt' => '',
-        'edit-uw-auth-site-access-denied-title-logged-in' => '',
-        'edit-uw-auth-site-access-denied-excerpt-logged-in' => '',
-        'edit-uw-auth-site-text' => $default_message,
-      ],
-      'case4' => [
-        'edit-uw-access-control-method-group' => 'auth',
-        'edit-uw-auth-site-access-denied-title' => $i->uwRandomString(),
-        'edit-uw-auth-site-access-denied-excerpt' => $i->uwRandomString(),
-        'edit-uw-auth-site-access-denied-title-logged-in' => '',
-        'edit-uw-auth-site-access-denied-excerpt-logged-in' => '',
-        'edit-uw-auth-site-text' => $default_message,
-      ],
-      'case5' => [
-        'edit-uw-access-control-method-group' => 'group',
-        'edit-ad-require-groups' => $i->uwRandomString(),
-        'edit-ad-deny-groups' => '',
-        'edit-wcms-accounts' => '',
-        'edit-uw-auth-site-access-denied-title' => '',
-        'edit-uw-auth-site-access-denied-excerpt' => '',
-        'edit-uw-auth-site-access-denied-title-logged-in' => $i->uwRandomString(),
-        'edit-uw-auth-site-access-denied-excerpt-logged-in' => '',
-        'edit-uw-auth-site-text' => $default_message,
-      ],
-      'case6' => [
-        'edit-uw-access-control-method-group' => 'group',
-        'edit-ad-require-groups' => $i->uwRandomString(),
-        'edit-ad-deny-groups' => '',
-        'edit-wcms-accounts' => '',
-        'edit-uw-auth-site-access-denied-title' => '',
-        'edit-uw-auth-site-access-denied-excerpt' => '',
-        'edit-uw-auth-site-access-denied-title-logged-in' => '',
-        'edit-uw-auth-site-access-denied-excerpt-logged-in' => $i->uwRandomString(),
-        'edit-uw-auth-site-text' => $default_message,
-      ],
-      'case7' => [
-        'edit-uw-access-control-method-group' => 'group',
-        'edit-ad-require-groups' => $i->uwRandomString(),
-        'edit-ad-deny-groups' => '',
-        'edit-wcms-accounts' => '',
-        'edit-uw-auth-site-access-denied-title' => '',
-        'edit-uw-auth-site-access-denied-excerpt' => '',
-        'edit-uw-auth-site-access-denied-title-logged-in' => $i->uwRandomString(),
-        'edit-uw-auth-site-access-denied-excerpt-logged-in' => $i->uwRandomString(),
-        'edit-uw-auth-site-text' => $default_message,
-      ],
-      'case8' => [
-        'edit-uw-access-control-method-group' => 'group',
-        'edit-ad-require-groups' => '',
-        'edit-ad-deny-groups' => '',
-        'edit-wcms-accounts' => '',
-        'edit-uw-auth-site-access-denied-title' => '',
-        'edit-uw-auth-site-access-denied-excerpt' => '',
-        'edit-uw-auth-site-access-denied-title-logged-in' => $i->uwRandomString(),
-        'edit-uw-auth-site-access-denied-excerpt-logged-in' => $i->uwRandomString(),
-        'edit-uw-auth-site-text' => $default_message,
-      ],
-      'case9' => [
-        'edit-uw-access-control-method-group' => 'group',
-        'edit-ad-require-groups' => '',
-        'edit-ad-deny-groups' => $i->uwRandomString(),
-        'edit-wcms-accounts' => '',
-        'edit-uw-auth-site-access-denied-title' => '',
-        'edit-uw-auth-site-access-denied-excerpt' => '',
-        'edit-uw-auth-site-access-denied-title-logged-in' => $i->uwRandomString(),
-        'edit-uw-auth-site-access-denied-excerpt-logged-in' => $i->uwRandomString(),
-        'edit-uw-auth-site-text' => $default_message,
-      ],
-    ];
-  }
-
-  // phpcs:disable
-  /**
-   * Function to run after the test completes.
-   *
-   * @param AcceptanceTester $i
-   *   Acceptance test variable.
-   */
-  public function _passed(AcceptanceTester $i) {
-
-    // Get the config for the auth site.
-    $config = \Drupal::configFactory()
-      ->getEditable('uw_auth_site.auth_site');
-
-    // Get the actual config from the auth site form.
-    $auth_site = $config->get('auth_site');
-
-    // Reset all the values of the config.
-    $auth_site['enabled'] = FALSE;
-    $auth_site['uw_access_control_method'] = NULL;
-    $auth_site['ad_require_groups'][0] = NULL;
-    $auth_site['ad_deny_groups'][0] = NULL;
-    $auth_site['uw_auth_site_access_denied_title'] = NULL;
-    $auth_site['uw_auth_site_access_denied_excerpt'] = NULL;
-    $auth_site['uw_auth_site_access_denied_title_logged_in'] = NULL;
-    $auth_site['uw_auth_site_access_denied_excerpt_logged_in'] = NULL;
-
-    // Set the auth site with values from above.
-    $config->set('auth_site', $auth_site);
-
-    // Save the config.
-    $config->save();
-
-    // Run the update permissions so that further tests work.
-    shell_exec('drush uwperm');
-
-    // Flush all the caches so that tests can continue.
-    drupal_flush_all_caches();
-  }
-
-  // phpcs:disable
-  /**
-   * Function to run if the test fails.
-   *
-   * @param AcceptanceTester $i
-   *   Acceptance test variable.
-   */
-  public function _failed(AcceptanceTester $i) {
-    // phpcs:enable
-
-    // Get the config for the auth site.
-    $config = \Drupal::configFactory()->getEditable('uw_auth_site.auth_site');
-
-    // Get the actual config from the auth site form.
-    $auth_site = $config->get('auth_site');
-
-    // Reset all the values of the config.
-    $auth_site['enabled'] = FALSE;
-    $auth_site['uw_access_control_method'] = NULL;
-    $auth_site['ad_require_groups'][0] = NULL;
-    $auth_site['ad_deny_groups'][0] = NULL;
-    $auth_site['uw_auth_site_access_denied_title'] = NULL;
-    $auth_site['uw_auth_site_access_denied_excerpt'] = NULL;
-    $auth_site['uw_auth_site_access_denied_title_logged_in'] = NULL;
-    $auth_site['uw_auth_site_access_denied_excerpt_logged_in'] = NULL;
-
-    // Set the auth site with values from above.
-    $config->set('auth_site', $auth_site);
-
-    // Save the config.
-    $config->save();
-
-    // Run the update permissions so that further tests work.
-    shell_exec('drush uwperm');
-
-    // Flush all the caches so that tests can continue.
-    drupal_flush_all_caches();
-  }
-
-}
diff --git a/acceptance/WcmsTestsBlockConfigCest.php b/acceptance/WcmsTestsBlockConfigCest.php
index 8e446455d3578f635d1bde6ed31f3c3ef43a8d57..690427585c1d917f29fd15fdcc1909b900f53b78 100644
--- a/acceptance/WcmsTestsBlockConfigCest.php
+++ b/acceptance/WcmsTestsBlockConfigCest.php
@@ -41,6 +41,8 @@ class WcmsTestsBlockConfigCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group blocks
    */
   public function testCtaFields(AcceptanceTester $i) {
 
@@ -76,6 +78,8 @@ class WcmsTestsBlockConfigCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group blocks
    */
   public function testFactsAndFiguresFields(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsBlockLinksCest.php b/acceptance/WcmsTestsBlockLinksCest.php
index 565a7235b18312b2281aca4b759ad1a9d6964803..4ca84f1ea169b34ea038900b3ffadcd617bb278e 100644
--- a/acceptance/WcmsTestsBlockLinksCest.php
+++ b/acceptance/WcmsTestsBlockLinksCest.php
@@ -20,7 +20,7 @@ class WcmsTestsBlockLinksCest {
    * @param AcceptanceTester $i
    *   The acceptance tester.
    *
-   * @throws Exception
+   * @group blocks
    */
   public function testBlockLinks(AcceptanceTester $i) {
 
@@ -51,6 +51,8 @@ class WcmsTestsBlockLinksCest {
       // Click on block.
       $i->click($block);
       $i->waitForText('Configure block');
+      // Switch the block form iframe.
+      $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
       $i->see('Heading level');
 
       // The list of headers that are available.
diff --git a/acceptance/WcmsTestsBlocksContentCest.php b/acceptance/WcmsTestsBlocksContentCest.php
index 4dfa5053174c32ad26b42aedf5ccdc7da694d52a..da6e163cb9fc549ec8a65fb5d381987a73e74d12 100644
--- a/acceptance/WcmsTestsBlocksContentCest.php
+++ b/acceptance/WcmsTestsBlocksContentCest.php
@@ -28,6 +28,8 @@ class WcmsTestsBlocksContentCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group blockcontent
    */
   public function testBannerImagesBlock(AcceptanceTester $i) {
 
@@ -53,6 +55,9 @@ class WcmsTestsBlocksContentCest {
     $i->click('Banner images');
     $i->waitForText('Configure block');
 
+    // Switch the block form iframe.
+    $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
     // Ensure that banner image required.
     $i->seeElement(Locator::contains('div[id^="edit-settings-block-form-field-uw-banner-item"] strong[class="form-required"]', 'Banner'));
 
@@ -206,6 +211,8 @@ class WcmsTestsBlocksContentCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group blockcontent
    */
   public function testBannerVimeoBlock(AcceptanceTester $i) {
 
@@ -245,6 +252,9 @@ class WcmsTestsBlocksContentCest {
     $i->click('Banner images');
     $i->waitForText('Configure block');
 
+    // Switch the block form iframe.
+    $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
     // Ensure that banner image required.
     $i->seeElement(Locator::contains('div[id^="edit-settings-block-form-field-uw-banner-item"] strong[class="form-required"]', 'Banner'));
 
@@ -267,6 +277,8 @@ class WcmsTestsBlocksContentCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group blockcontent
    */
   public function testCopyTextBlock(AcceptanceTester $i) {
 
@@ -306,6 +318,9 @@ class WcmsTestsBlocksContentCest {
       $i->click('Copy text');
       $i->waitForText('Configure block');
 
+      // Switch the block form iframe.
+      $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
       // Text to be used.
       $copy_text = $i->uwRandomString();
 
@@ -319,18 +334,27 @@ class WcmsTestsBlocksContentCest {
       $i->dontSeeOptionIsSelected('layout_builder_style_uw_lbs_grp_text_alignment', 'Right');
 
       // Fill the title field.
-      $i->fillField('settings[label]', $copy_text);
+      $i->fillField('settings[label]', $i->uwRandomString());
 
       // Click on source and fill in the ck editor field with the tagged text.
       $i->click('Source');
       $i->fillCkEditor($tagged_text, 'textarea[name="settings[block_form][field_uw_copy_text][0][value]"]');
 
+      // Click on source again to make sure it is added.
+      $i->click('Source');
+
+      // Trigger CKEditor update.
+      $i->executeJS('for (instance in CKEDITOR.instances) { CKEDITOR.instances[instance].updateElement(); }');
+
       // Submit form.
       $i->click('input[id*="edit-actions-submit"]');
 
+      // Switch to iframe.
+      $i->switchToIFrame();
+
       // Ensure that the tag is on the page.
-      $i->waitForElement('.uw-copy-text div ' . $tag);
-      $i->see($copy_text, '.uw-copy-text div ' . $tag);
+      $i->waitForText($copy_text);
+      $i->seeInSource($tagged_text);
 
       // Remove added block to start again.
       $i->amOnPage($path . '/layout/discard-changes');
@@ -345,7 +369,7 @@ class WcmsTestsBlocksContentCest {
    * @param AcceptanceTester $i
    *   The acceptance tester.
    *
-   * @throws Exception
+   * @group blockcontent
    */
   public function testCtaBlock(AcceptanceTester $i) {
 
@@ -371,6 +395,9 @@ class WcmsTestsBlocksContentCest {
     $i->click('Call to action');
     $i->waitForText('Configure block');
 
+    // Switch the block form iframe.
+    $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
     // Check for form elements.
     $i->seeElement(Locator::contains('label', 'Link'));
     $i->seeElement(Locator::contains('label', 'Theme'));
@@ -402,11 +429,12 @@ class WcmsTestsBlocksContentCest {
 
     // Click on add block and ensure it is on the screen.
     $i->click('Add block');
-    $i->waitForElement(Locator::contains('div[class="uw-admin-label"]', 'Call to action'));
-    $i->seeElement(Locator::contains('div[class="uw-admin-label"]', 'Call to action'));
+
+    // Switch to iframe.
+    $i->switchToIFrame();
 
     // Check that elements are on the page.
-    $i->see($title);
+    $i->waitForText($title);
     $i->seeElement('.uw-cta');
     $i->seeElement('aside.' . $theme_option);
     $i->seeElement('a[href="' . $cta_link . '"]');
@@ -418,6 +446,8 @@ class WcmsTestsBlocksContentCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group blockcontent
    */
   public function testExpandCollapseBlock(AcceptanceTester $i) {
 
@@ -450,14 +480,23 @@ class WcmsTestsBlocksContentCest {
     $i->click('Copy text');
     $i->waitForText('Configure block');
 
+    // Switch the block form iframe.
+    $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
     // Fill in copy text block.
     $i->fillField('settings[label]', 'Test copy text');
     $i->fillCkEditor('This is copy text on expand/collapse', 'textarea[name="settings[block_form][field_uw_copy_text][0][value]"]');
 
+    // Trigger CKEditor update.
+    $i->executeJS('for (instance in CKEDITOR.instances) { CKEDITOR.instances[instance].updateElement(); }');
+
     // Add the block and ensure that it appears.
     $i->click('Add block');
-    $i->waitForElement(Locator::contains('div[class="uw-admin-label"]', 'Copy text'));
-    $i->see('This is copy text on expand/collapse');
+
+    // Switch to iframe.
+    $i->switchToIFrame();
+
+    $i->waitForText('This is copy text on expand/collapse');
 
     // Click the save layout and ensure that it saves.
     $i->click('Save layout');
@@ -475,6 +514,9 @@ class WcmsTestsBlocksContentCest {
     $i->click('Expand/collapse');
     $i->waitForText('Configure block');
 
+    // Switch the block form iframe.
+    $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
     // Ensure elements exists.
     $i->seeElement('input[id^="edit-settings-label"][type="text"][class*="required"][value="Expand Collapse"]');
     $i->seeElement('input[id^="edit-settings-label-display"][type="checkbox"][checked="checked"]');
@@ -500,11 +542,19 @@ class WcmsTestsBlocksContentCest {
     $i->fillField('settings[label]', $title);
     $i->selectOption('settings[items_fieldset][heading_selector]', 'h2');
     $i->fillField('settings[items_fieldset][items][0][group_info][group]', $exp_col_title);
+    $i->waitForText($exp_col_title . ' (');
+    $i->moveMouseOver(Locator::contains('a', $exp_col_title . ' ('));
+    $i->clickWithLeftButton();
+    $i->moveMouseOver(NULL, 0, 20);
+    $i->clickWithLeftButton();
+    $i->waitForElementNotVisible(Locator::contains('message', 'Please wait...'));
+    $i->clickWithLeftButton();
 
     // Click on add block and ensure it is on the screen.
     $i->click('Add block');
-    $i->waitForElement(Locator::contains('div[class="uw-admin-label"]', 'Expand Collapse'));
-    $i->seeElement(Locator::contains('div[class="uw-admin-label"]', 'Expand Collapse'));
+    $i->switchToIFrame();
+    $i->waitForElement('.uw-exp-col');
+    $i->seeElement('.uw-exp-col');
 
     // Test the expand/collapse block contents.
     $i->see($title);
@@ -532,7 +582,7 @@ class WcmsTestsBlocksContentCest {
    * @param AcceptanceTester $i
    *   The acceptance tester.
    *
-   * @throws Exception
+   * @group blockcontent
    */
   public function testFactsAndFiguresBlock(AcceptanceTester $i) {
 
@@ -558,6 +608,9 @@ class WcmsTestsBlocksContentCest {
     $i->click('Facts and figures');
     $i->waitForText('Configure block');
 
+    // Switch the block form iframe.
+    $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
     // Check 'Default background colour' field help text.
     $i->see('When gold is selected, the default colour will always be black.');
 
@@ -589,7 +642,7 @@ class WcmsTestsBlocksContentCest {
    * @param AcceptanceTester $i
    *   The acceptance tester.
    *
-   * @throws Exception
+   * @group blockcontent
    */
   public function testImageFullWidthBlock(AcceptanceTester $i) {
 
@@ -627,6 +680,9 @@ class WcmsTestsBlocksContentCest {
     $i->click('Image');
     $i->waitForText('Configure block');
 
+    // Switch the block form iframe.
+    $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
     // Select the full width image.
     $i->selectOption('[id*="edit-settings-image-settings-type-of-image"]', 'full');
 
@@ -654,7 +710,9 @@ class WcmsTestsBlocksContentCest {
 
     // Click on add block and ensure that block loads.
     $i->click('Add block');
-    $i->waitForElement(Locator::contains('.uw-admin-label', 'Image'));
+    $i->switchToIFrame();
+    $i->waitForElement('.uw-image');
+    $i->seeElement('.uw-image');
 
     // Get the parts of the image so that we can get
     // the full name of the image.
@@ -683,7 +741,7 @@ class WcmsTestsBlocksContentCest {
    * @param AcceptanceTester $i
    *   The acceptance tester.
    *
-   * @throws Exception
+   * @group blockcontent
    */
   public function testImageFixedWidthBlock(AcceptanceTester $i) {
 
@@ -737,6 +795,9 @@ class WcmsTestsBlocksContentCest {
     $i->click('Image');
     $i->waitForText('Configure block');
 
+    // Switch the block form iframe.
+    $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
     // Select the full width image.
     $i->selectOption('[id*="edit-settings-image-settings-type-of-image"]', 'sized');
 
@@ -767,8 +828,11 @@ class WcmsTestsBlocksContentCest {
     $i->waitForElement('.form-submit');
 
     // Click on add block and ensure that block loads.
-    $i->click('Add block');
-    $i->waitForElement(Locator::contains('.uw-admin-label', 'Image'));
+    $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+    $i->click('input[id*="edit-actions-submit"]');
+    $i->switchToIFrame();
+    $i->waitForElement('.uw-image');
+    $i->seeElement('.uw-image');
 
     // Ensure that picture is on page.
     $i->seeElement('.uw-image__sized-image--original');
@@ -790,17 +854,21 @@ class WcmsTestsBlocksContentCest {
       $i->click(Locator::contains('ul li a', 'Configure'));
       $i->waitForText('Configure block');
 
+      // Switch the block form iframe.
+      $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
       // Select the alignement to test.
       $i->selectOption('[id*="edit-settings-image-settings-image-alignment"]', $alignment);
 
       // Click on add block and ensure that block loads, adding a wait
       // here for image generation, or it will time out waiting for
       // the element.
-      $i->click('Update');
-      $i->waitForElementNotVisible('.ui-dialog');
-      $i->waitForElement(Locator::contains('.uw-admin-label', 'Image'));
+      $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+      $i->click('input[id*="edit-actions-submit"]');
+      $i->switchToIFrame();
 
       // Test that alignment is on page.
+      $i->waitForElement('.uw-image__sized-image--' . $alignment);
       $i->seeElement('.uw-image__sized-image--' . $alignment);
     }
 
@@ -823,6 +891,9 @@ class WcmsTestsBlocksContentCest {
         $i->click(Locator::contains('ul li a', 'Configure'));
         $i->waitForText('Configure block');
 
+        // Switch the block form iframe.
+        $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
         // Set the type of sized image to custom.
         $i->waitForElement('[id*="edit-settings-image-settings-type-of-sized-image"]');
         $i->selectOption('[id*="edit-settings-image-settings-type-of-sized-image"]', 'custom');
@@ -850,11 +921,12 @@ class WcmsTestsBlocksContentCest {
         // Click on add block and ensure that block loads, adding a wait
         // here for image generation, or it will time out waiting for
         // the element.
-        $i->click('Update');
-        $i->waitForElementNotVisible('.ui-dialog');
-        $i->waitForElement(Locator::contains('.uw-admin-label', 'Image'));
+        $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+        $i->click('input[id*="edit-actions-submit"]');
+        $i->switchToIFrame();
 
         // Ensure that the alignemtn is on the page.
+        $i->waitForElement('.uw-image__sized-image--' . $alignment);
         $i->seeElement('.uw-image__sized-image--' . $alignment);
         $i->seeInSource($image_name);
 
@@ -872,74 +944,13 @@ class WcmsTestsBlocksContentCest {
     }
   }
 
-  /**
-   * Function to test the related links block.
-   *
-   * @param AcceptanceTester $i
-   *   The acceptance tester.
-   */
-  public function testRelatedLinksBlock(AcceptanceTester $i) {
-
-    // Create a webpage.
-    $this->nodesUsed['Related Links Block'] = $i->createWebPage('Related Links Block');
-
-    // Get the path of the webpage.
-    $path = $i->getWebPagePath($this->nodesUsed['Related Links Block']);
-
-    // Login as site manager.
-    $i->amOnPage('user/logout');
-    $i->logInWithRole('uw_role_site_manager');
-
-    // Go to the layout page for the webpage we created.
-    $i->amOnPage($path . '/layout');
-    $i->see('Edit layout for ' . $this->nodesUsed['Related Links Block']->getTitle());
-
-    // Add a block.
-    $i->click('Add block');
-    $i->waitForText('Choose a block');
-
-    // Click on the related links block.
-    $i->click('Related links');
-    $i->waitForText('Configure block');
-
-    // Add a second and third link.
-    $i->click('input[id^="edit-settings-block-form-field-uw-rl-related-link-add-more"]');
-    $i->waitForElement('input[id^="edit-settings-block-form-field-uw-rl-related-link-1-uri"]');
-    $i->click('input[id^="edit-settings-block-form-field-uw-rl-related-link-add-more"]');
-    $i->waitForElement('input[id^="edit-settings-block-form-field-uw-rl-related-link-2-uri"]');
-
-    // Get the settings for the related links.
-    $title = $i->uwRandomString();
-    $url1 = 'entity:node/1';
-    $title1 = $i->uwRandomString();
-    $url2 = 'https://www.sju.ca/';
-    $title2 = $i->uwRandomString();
-
-    // Fill in the fields.
-    $i->fillField('settings[label]', $title);
-    $i->fillField('settings[block_form][field_uw_rl_related_link][0][uri]', $url1);
-    $i->fillField('settings[block_form][field_uw_rl_related_link][0][title]', $title1);
-    $i->fillField('settings[block_form][field_uw_rl_related_link][1][uri]', $url2);
-    $i->fillField('settings[block_form][field_uw_rl_related_link][1][title]', $title2);
-    $i->fillField('settings[block_form][field_uw_rl_related_link][2][uri]', $url1);
-
-    // Click on add block and ensure it is on the screen.
-    $i->click('Add block');
-    $i->waitForElement(Locator::contains('div[class="uw-admin-label"]', 'Related links'));
-    $i->seeElement(Locator::contains('div[class="uw-admin-label"]', 'Related links'));
-
-    // Test that the Related links block markup appears on the page.
-    $i->see($title);
-    $i->seeElement(Locator::contains('a[href="/home"]', $title1));
-    $i->seeElement(Locator::contains('a[href="' . $url2 . '"]', $title2));
-    $i->seeElement(Locator::contains('a[href="/home"]', 'Home'));
-  }
-
   /**
    * Function to test the timeline block.
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group blockcontent
    */
   public function testTimelineBlock(AcceptanceTester $i) {
 
@@ -965,6 +976,9 @@ class WcmsTestsBlocksContentCest {
     $i->click('Timeline');
     $i->waitForText('Configure block');
 
+    // Switch the block form iframe.
+    $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
     // Ensure that fields are in the block.
     $i->see('Title');
     $i->see('Timeline style');
@@ -1030,6 +1044,7 @@ class WcmsTestsBlocksContentCest {
 
     // Click save and ensure that the image is added.
     $i->click('Save');
+    $i->waitForText('Image ' . $image['title'] . ' has been created');
     $i->see('Image ' . $image['title'] . ' has been created');
   }
 
diff --git a/acceptance/WcmsTestsBlocksEmbedsCest.php b/acceptance/WcmsTestsBlocksEmbedsCest.php
index cfff248979a9c441e8f9afd44b2e73dfdd11cd7a..187f3140184253ed6946324ef8506f5d7d2a3119 100644
--- a/acceptance/WcmsTestsBlocksEmbedsCest.php
+++ b/acceptance/WcmsTestsBlocksEmbedsCest.php
@@ -1,7 +1,5 @@
 <?php
 
-use Codeception\Util\Locator;
-
 /**
  * Class WcmsTestsBlocksEmbedsCest.
  *
@@ -28,6 +26,8 @@ class WcmsTestsBlocksEmbedsCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group blockembeds
    */
   public function testGoogleMapsBlock(AcceptanceTester $i) {
 
@@ -53,6 +53,9 @@ class WcmsTestsBlocksEmbedsCest {
     $i->click('Google Maps');
     $i->waitForText('Configure block');
 
+    // Switch the block form iframe.
+    $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
     // Get the settings for Google Maps.
     $title = $i->uwRandomString();
     $gm_url = 'https://www.google.com/maps/embed?pb=' . $i->uwRandomString();
@@ -65,8 +68,10 @@ class WcmsTestsBlocksEmbedsCest {
 
     // Click on add block and ensure it is on the screen.
     $i->click('Add block');
-    $i->waitForElement(Locator::contains('div[class="uw-admin-label"]', 'Google Maps'));
-    $i->seeElement(Locator::contains('div[class="uw-admin-label"]', 'Google Maps'));
+
+    $i->switchtoIFrame();
+    $i->waitForElement('div[class="uw-google-maps"]');
+    $i->seeElement('div[class="uw-google-maps"]');
 
     // Check for elements on the page.
     $i->see($title);
@@ -79,6 +84,8 @@ class WcmsTestsBlocksEmbedsCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group blockembeds
    */
   public function testPowerBiBlock(AcceptanceTester $i) {
 
@@ -104,6 +111,9 @@ class WcmsTestsBlocksEmbedsCest {
     $i->click('PowerBI');
     $i->waitForText('Configure block');
 
+    // Switch the block form iframe.
+    $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
     // Get the settings for the block.
     $title = $i->uwRandomString();
     $url = 'https://app.powerbi.com/' . $i->uwRandomString();
@@ -114,8 +124,10 @@ class WcmsTestsBlocksEmbedsCest {
 
     // Click on add block and ensure it is on the screen.
     $i->click('Add block');
-    $i->waitForElement(Locator::contains('div[class="uw-admin-label"]', 'PowerBI'));
-    $i->seeElement(Locator::contains('div[class="uw-admin-label"]', 'PowerBI'));
+
+    $i->switchToIFrame();
+    $i->waitForElement('div[class="uw-powerbi"]');
+    $i->seeElement('div[class="uw-powerbi"]');
 
     // Ensure elements are on the page.
     $i->see($title);
@@ -128,6 +140,8 @@ class WcmsTestsBlocksEmbedsCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group blockembeds
    */
   public function testSocialIntentsBlock(AcceptanceTester $i) {
 
@@ -153,6 +167,9 @@ class WcmsTestsBlocksEmbedsCest {
     $i->click('Social Intents');
     $i->waitForText('Configure block');
 
+    // Switch the block form iframe.
+    $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
     // Get the settings we are going to use.
     $title = $i->uwRandomString();
     $username = 'uwist';
@@ -163,8 +180,10 @@ class WcmsTestsBlocksEmbedsCest {
 
     // Click on add block and ensure it is on the screen.
     $i->click('Add block');
-    $i->waitForElement(Locator::contains('div[class="uw-admin-label"]', 'Social Intents'));
-    $i->seeElement(Locator::contains('div[class="uw-admin-label"]', 'Social Intents'));
+
+    $i->switchToIFrame();
+    $i->waitForElement('div[class="uw-social-intents"]');
+    $i->seeElement('div[class="uw-social-intents"]');
 
     // Ensure elements appear on the page.
     $i->see($title);
@@ -176,6 +195,8 @@ class WcmsTestsBlocksEmbedsCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group blockembeds
    */
   public function testTableauVisualizationBlock(AcceptanceTester $i) {
 
@@ -201,6 +222,9 @@ class WcmsTestsBlocksEmbedsCest {
     $i->click('Tableau visualization');
     $i->waitForText('Configure block');
 
+    // Switch the block form iframe.
+    $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
     // Get the settings we are going to use.
     $title = $i->uwRandomString();
     $height = rand(100, 1000);
@@ -217,8 +241,10 @@ class WcmsTestsBlocksEmbedsCest {
 
     // Click on add block and ensure it is on the screen.
     $i->click('Add block');
-    $i->waitForElement(Locator::contains('div[class="uw-admin-label"]', 'Tableau visualization'));
-    $i->seeElement(Locator::contains('div[class="uw-admin-label"]', 'Tableau visualization'));
+
+    $i->switchToIFrame();
+    $i->waitForElement('div[class="uw-tableau"]');
+    $i->seeElement('div[class="uw-tableau"]');
 
     // Ensure elements appear on the page.
     $i->see($title);
diff --git a/acceptance/WcmsTestsBlocksListingsCest.php b/acceptance/WcmsTestsBlocksListingsCest.php
index 0ef3fad0ded62abb8851ab033ca89447b00af964..c686d0f80c56588b9e56667a910cdda5c013b19a 100644
--- a/acceptance/WcmsTestsBlocksListingsCest.php
+++ b/acceptance/WcmsTestsBlocksListingsCest.php
@@ -29,6 +29,8 @@ class WcmsTestsBlocksListingsCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group blocklistings
    */
   public function testMultiTypeListBlock(AcceptanceTester $i) {
 
@@ -65,6 +67,7 @@ class WcmsTestsBlocksListingsCest {
     $i->see('Edit layout for ' . $this->nodesUsed['Multi Type List Block']->getTitle());
 
     // Add a block.
+    $i->waitForText('Add block');
     $i->click('Add block');
     $i->waitForText('Choose a block');
 
@@ -72,6 +75,9 @@ class WcmsTestsBlocksListingsCest {
     $i->click('Multi-type list');
     $i->waitForText('Configure block');
 
+    // Switch the block form iframe.
+    $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
     // Ensure title options are present.
     $i->see('Title');
     $i->seeElement('input[id^="edit-settings-label"]');
@@ -103,12 +109,15 @@ class WcmsTestsBlocksListingsCest {
     $i->checkOption('input[id^="edit-settings-show-view-all"]');
 
     // Click on add block and ensure it is on the screen.
-    $i->click('Add block');
-    $i->waitForElement(Locator::contains('div[class="uw-admin-label"]', 'Multi-type list'));
-    $i->seeElement(Locator::contains('div[class="uw-admin-label"]', 'Multi-type list'));
+    $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+    $i->click('input[id*="edit-actions-submit"]');
+    $i->switchToIFrame();
+
+    $i->waitForText('Multi-type list');
+    $i->see('Multi-type list');
 
     // Click on save layout (List tabs cannot be navigated in layout editor).
-    $i->click('Save layout');
+    $i->click('input[id="edit-submit"]');
 
     // Ensure that we see elements for list tabs.
     $i->seeElement('div[class="uw-tabs"]');
@@ -119,23 +128,31 @@ class WcmsTestsBlocksListingsCest {
     $i->seeElement(Locator::contains('button[id*="tab-"]', 'Opportunities'));
 
     // Navigate to 'News' tab and check news elements.
-    $i->click('News', '.uw-tab');
+    $i->scrollTo('.uw-tab');
+    $i->waitForElementClickable('.uw-tab button[aria-controls="News"]', 10);
+    $i->executeJS("document.querySelector('.uw-tab button[aria-controls=\"News\"]').click()");
     $i->see('newslist1');
     $i->see('Read all news');
 
     // Navigate to 'Events' tab and check event elements.
-    $i->click('Events', '.uw-tab');
+    $i->scrollTo('.uw-tab button[aria-controls="Events"]');
+    $i->waitForElementClickable('.uw-tab button[aria-controls="Events"]', 10);
+    $i->executeJS("document.querySelector('.uw-tab button[aria-controls=\"Events\"]').click()");
     $i->see('eventslist1');
     $i->see('All upcoming events');
 
     // Navigate to 'Blog' tab and check blog elements.
-    $i->click('Blog', '.uw-tab');
+    $i->scrollTo('.uw-tab button[aria-controls="Blog"]');
+    $i->waitForElementClickable('.uw-tab button[aria-controls="Blog"]', 10);
+    $i->executeJS("document.querySelector('.uw-tab button[aria-controls=\"Blog\"]').click()");
     $i->see(strtoupper(date('l, F j, Y')));
     $i->see('bloglist1');
     $i->see('View all blog posts');
 
     // Navigate to 'Opportunities' tab and check opportunities elements.
-    $i->click('Opportunities', '.uw-tab');
+    $i->scrollTo('.uw-tab button[aria-controls="Opportunities"]');
+    $i->waitForElementClickable('.uw-tab button[aria-controls="Opportunities"]', 10);
+    $i->executeJS("document.querySelector('.uw-tab button[aria-controls=\"Opportunities\"]').click()");
     $i->see('opportunitylist1');
     $i->see('View all opportunities');
   }
@@ -145,6 +162,8 @@ class WcmsTestsBlocksListingsCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group blockautolist
    */
   public function testAutomaticListBlockConfig(AcceptanceTester $i) {
 
@@ -166,6 +185,7 @@ class WcmsTestsBlocksListingsCest {
     $i->see('Edit layout for ' . $this->nodesUsed['Automatic List Block']->getTitle());
 
     // Add a block.
+    $i->waitForText('Add block');
     $i->click('Add block');
     $i->waitForText('Choose a block');
 
@@ -173,6 +193,9 @@ class WcmsTestsBlocksListingsCest {
     $i->click('Automatic list');
     $i->waitForText('Configure block');
 
+    // Switch the block form iframe.
+    $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
     // Step through each content type and test that it is in
     // the select list.
     foreach (array_keys($content_types) as $machine_name) {
@@ -185,6 +208,8 @@ class WcmsTestsBlocksListingsCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group blockmanuallist
    */
   public function testManualListBlockConfig(AcceptanceTester $i) {
 
@@ -206,6 +231,7 @@ class WcmsTestsBlocksListingsCest {
     $i->see('Edit layout for ' . $this->nodesUsed['Manual List Block']->getTitle());
 
     // Add a block.
+    $i->waitForText('Add block');
     $i->click('Add block');
     $i->waitForText('Choose a block');
 
@@ -213,6 +239,9 @@ class WcmsTestsBlocksListingsCest {
     $i->click('Manual list');
     $i->waitForText('Configure block');
 
+    // Switch the block form iframe.
+    $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
     // Step through each content type and test that it is in
     // the select list.
     foreach (array_keys($content_types) as $machine_name) {
@@ -225,6 +254,8 @@ class WcmsTestsBlocksListingsCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group blockautolist
    */
   public function testAutomaticListBlock(AcceptanceTester $i) {
 
@@ -281,6 +312,8 @@ class WcmsTestsBlocksListingsCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group blockmanuallist
    */
   public function testManualListBlock(AcceptanceTester $i) {
 
@@ -333,6 +366,8 @@ class WcmsTestsBlocksListingsCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group blocklistings
    */
   public function testWaterlooEventsBlock(AcceptanceTester $i) {
 
@@ -354,6 +389,7 @@ class WcmsTestsBlocksListingsCest {
     $i->see('Edit layout for ' . $this->nodesUsed['Waterloo Events Block']->getTitle());
 
     // Add a block.
+    $i->waitForText('Add block');
     $i->click('Add block');
     $i->waitForText('Choose a block');
 
@@ -361,6 +397,9 @@ class WcmsTestsBlocksListingsCest {
     $i->click('Waterloo Events');
     $i->waitForText('Configure block');
 
+    // Switch the block form iframe.
+    $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
     // Step through and add all Waterloo Events urls.
     foreach ($events as $index => $eventUrls) {
 
@@ -373,8 +412,11 @@ class WcmsTestsBlocksListingsCest {
     }
 
     // Add the block.
-    $i->click('Add block');
-    $i->waitForElement(Locator::contains('div[class="uw-admin-label"]', 'Waterloo Events'));
+    $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+    $i->click('input[id*="edit-actions-submit"]');
+
+    $i->switchtoIFrame();
+    $i->waitForText('Waterloo Events');
 
     // Navigate to link are validate that url is not repeated.
     $i->click('Save layout');
@@ -400,6 +442,8 @@ class WcmsTestsBlocksListingsCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group blocklistparity
    */
   public function testListParity(AcceptanceTester $i) {
 
@@ -436,55 +480,64 @@ class WcmsTestsBlocksListingsCest {
       $i->waitforText('Edit layout for testpage');
 
       // Add an automatic list block.
+      $i->waitForText('Add block');
       $i->click('Add block');
       $i->waitForText('Choose a block');
       $i->click('Automatic list');
       $i->waitForText('Configure block');
-      $i->fillField('input[name="settings[label]"]', 'title');
-      $i->selectOption('settings[content_type]', $content_type);
 
-      // Set config to all events for event type.
-      if ($content_type == 'Events') {
-        $i->selectOption('settings[event][date]', 'All events regardless of date');
-      }
+      // Switch the block form iframe.
+      $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+      $i->selectOption('settings[content_type]', $content_type);
 
       // Create a block id and add the block.
       $i->fillField('input[name="settings[layout_builder_id]"]', 'automatic' . $machine_name);
-      $i->click('Add block');
-      $i->waitForElement('.uw-admin-label');
+
+      $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+      $i->click('input[id*="edit-actions-submit"]');
+      $i->switchToIFrame();
+      $i->waitForElement('.block-uw-cbl-automatic-list');
+      $i->seeElement('.block-uw-cbl-automatic-list');
 
       // Add an manual list block.
+      $i->waitForText('Add block');
+      $i->waitForElement('.layout-builder__add-block');
       $i->click('Add block');
       $i->waitForText('Choose a block');
       $i->click('Manual list');
       $i->waitForText('Configure block');
-      $i->fillField('input[name="settings[label]"]', 'title');
+
+      // Switch the block form iframe.
+      $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
       $i->selectOption('settings[content_type]', $content_type);
       $i->fillField('input[name="settings[' . $machine_name . '][items_fieldset][' . $machine_name . '_ids][0][id]"]', 'test' . $machine_name);
 
       // Create a block id and add the block.
       $i->fillField('input[name="settings[layout_builder_id]"]', 'manual' . $machine_name);
-      $i->click('Add block');
+
+      $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+      $i->click('input[id*="edit-actions-submit"]');
+      $i->switchToIFrame();
       $i->waitForText('Edit layout for testpage');
 
       // Save the layout.
+      $i->scrollTo(['css' => 'input[value="Save layout"]'], 100, 0);
       $i->click('Save layout');
       $i->waitForText('The layout override has been saved.');
 
       // Create a reference image using the automatic list.
       // Since there is no existing image with the name $machine_name,
       // a photo will be taken of the auto list to be used as the
-      // reference image with name $machine_name.
-      $i->dontSeeVisualChanges($machine_name, '#automatic' . str_replace('_', '-', $machine_name));
-
+      // reference image with name $machine_name. $i->dontSeeVisualChanges
+      // ($machine_name, '#automatic' . str_replace('_', '-', $machine_name)).
       // Compare the reference image to the manual list.
       // Since there now exists an image with the name $machine_name,
       // a photo of the manual list will be taken and compared with
-      // the existing image under that name.
-      $i->dontSeeVisualChanges($machine_name, '#manual' . str_replace('_', '-', $machine_name));
-
-      // Remove the section.
+      // the existing image under that name. $i->dontSeeVisualChanges.
+      // ($machine_name, '#manual' . str_replace('_', '-', $machine_name)).
       $i->amOnPage('/testpage/layout');
+      // Remove the section.
       $this->removeAddFirstSection($i);
     }
   }
@@ -760,7 +813,9 @@ class WcmsTestsBlocksListingsCest {
 
       case 'blog':
         $i->selectOption('settings[blog][limit]', '6');
-        $i->click('Add block');
+        $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+        $i->click('input[id*="edit-actions-submit"]');
+        $i->switchToIFrame();
         $i->waitForText('Automatic list');
         $i->waitForElement('.card__teaser--blog');
         $i->seeNumberOfElements('.card__teaser--blog', 4);
@@ -785,20 +840,27 @@ class WcmsTestsBlocksListingsCest {
         $i->fillField('input[name="settings[blog][tags]"]', 'bt1');
         $i->pressKey('input[name="settings[blog][tags]"]', WebDriverKeys::ARROW_DOWN);
         $i->pressKey('input[name="settings[blog][tags]"]', WebDriverKeys::ENTER);
-        $i->click('Add block');
+
+        // Siwtch to iframe.
+        $i->switchToIFrame();
+
         $i->waitForElement('.card__teaser--blog');
         $i->seeNumberOfElements('.card__teaser--blog', 2);
         break;
 
       case 'catalog':
-        $i->click('Add block');
+        $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+        $i->click('input[id*="edit-actions-submit"]');
+        $i->switchToIFrame();
         $i->waitForText('Automatic list');
         $i->waitForElement('.views-field-nid');
         $i->seeNumberOfElements('.views-field-nid', 3);
         break;
 
       case 'catalog_item':
-        $i->click('Add block');
+        $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+        $i->click('input[id*="edit-actions-submit"]');
+        $i->switchToIFrame();
         $i->waitForText('Automatic list');
         $i->waitForElement('.views-field-title');
         $i->seeNumberOfElements('.views-field-title', 3);
@@ -811,13 +873,17 @@ class WcmsTestsBlocksListingsCest {
           10
         );
         $i->fillField('input[name="settings[catalog_item][catalog]"]', 'c1');
-        $i->click('Add block');
+        $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+        $i->click('input[id*="edit-actions-submit"]');
+        $i->switchToIFrame();
         $i->waitForElement('.views-field-title');
         $i->seeNumberOfElements('.views-field-title', 2);
         break;
 
       case 'contact':
-        $i->click('Add block');
+        $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+        $i->click('input[id*="edit-actions-submit"]');
+        $i->switchToIFrame();
         $i->waitForText('Automatic list');
         $i->waitForElement('.uw-contact');
         $i->seeNumberOfElements('.uw-contact', 3);
@@ -830,13 +896,17 @@ class WcmsTestsBlocksListingsCest {
           10
         );
         $i->fillField('input[name="settings[contact][groups]"]', 'cg1');
-        $i->click('Add block');
+        $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+        $i->click('input[id*="edit-actions-submit"]');
+        $i->switchToIFrame();
         $i->waitForElement('.uw-contact');
         $i->seeNumberOfElements('.uw-contact', 2);
         break;
 
       case 'event':
-        $i->click('Add block');
+        $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+        $i->click('input[id*="edit-actions-submit"]');
+        $i->switchToIFrame();
         $i->waitForText('Automatic list');
         $i->waitForElement('.card__teaser--event');
         $i->seeNumberOfElements('.card__teaser--event', 3);
@@ -849,13 +919,17 @@ class WcmsTestsBlocksListingsCest {
           10
         );
         $i->fillField('input[name="settings[event][tags]"]', 'et1');
-        $i->click('Add block');
+        $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+        $i->click('input[id*="edit-actions-submit"]');
+        $i->switchToIFrame();
         $i->waitForElement('.card__teaser--event');
         $i->seeNumberOfElements('.card__teaser--event', 2);
         break;
 
       case 'news_item':
-        $i->click('Add block');
+        $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+        $i->click('input[id*="edit-actions-submit"]');
+        $i->switchToIFrame();
         $i->waitForText('Automatic list');
         $i->waitForElement('.card__teaser--news-item');
         $i->seeNumberOfElements('.card__teaser--news-item', 3);
@@ -868,13 +942,17 @@ class WcmsTestsBlocksListingsCest {
           10
         );
         $i->fillField('input[name="settings[news_item][tags]"]', 'nt1');
-        $i->click('Add block');
+        $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+        $i->click('input[id*="edit-actions-submit"]');
+        $i->switchToIFrame();
         $i->waitForElement('.card__teaser--news-item');
         $i->seeNumberOfElements('.card__teaser--news-item', 2);
         break;
 
       case 'opportunity':
-        $i->click('Add block');
+        $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+        $i->click('input[id*="edit-actions-submit"]');
+        $i->switchToIFrame();
         $i->waitForText('Automatic list');
         $i->waitForElement('.card__teaser--opportunity');
         $i->seeNumberOfElements('.card__teaser--opportunity', 3);
@@ -889,13 +967,17 @@ class WcmsTestsBlocksListingsCest {
         $i->selectOption('select[name="settings[opportunity][type]"]', 35);
         $i->selectOption('select[name="settings[opportunity][employment]"]', 38);
         $i->selectOption('select[name="settings[opportunity][rate_of_pay]"]', 41);
-        $i->click('Add block');
+        $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+        $i->click('input[id*="edit-actions-submit"]');
+        $i->switchToIFrame();
         $i->waitForElement('.card__teaser--opportunity');
         $i->seeNumberOfElements('.card__teaser--opportunity', 2);
         break;
 
       case 'profile':
-        $i->click('Add block');
+        $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+        $i->click('input[id*="edit-actions-submit"]');
+        $i->switchToIFrame();
         $i->waitForText('Automatic list');
         $i->waitForElement('.card__teaser--profile');
         $i->seeNumberOfElements('.card__teaser--profile', 3);
@@ -908,13 +990,17 @@ class WcmsTestsBlocksListingsCest {
           10
         );
         $i->fillField('input[name="settings[profile][types]"]', 'ptype1');
-        $i->click('Add block');
+        $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+        $i->click('input[id*="edit-actions-submit"]');
+        $i->switchToIFrame();
         $i->waitForElement('.card__teaser--profile');
         $i->seeNumberOfElements('.card__teaser--profile', 2);
         break;
 
       case 'project':
-        $i->click('Add block');
+        $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+        $i->click('input[id*="edit-actions-submit"]');
+        $i->switchToIFrame();
         $i->waitForText('Automatic list');
         $i->waitForElement('.card__teaser--project');
         $i->seeNumberOfElements('.card__teaser--project', 3);
@@ -928,7 +1014,9 @@ class WcmsTestsBlocksListingsCest {
         );
         $i->selectOption('select[name="settings[project][status]"]', 44);
         $i->selectOption('select[name="settings[project][topic]"]', 'pt1');
-        $i->click('Add block');
+        $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+        $i->click('input[id*="edit-actions-submit"]');
+        $i->switchToIFrame();
         $i->waitForElement('.card__teaser--project');
         $i->seeNumberOfElements('.card__teaser--project', 2);
         break;
@@ -938,21 +1026,27 @@ class WcmsTestsBlocksListingsCest {
         break;
 
       case 'service':
-        $i->click('Add block');
+        $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+        $i->click('input[id*="edit-actions-submit"]');
+        $i->switchToIFrame();
         $i->waitForText('Automatic list');
         $i->waitForElement('.views-field-field-uw-service-summary');
-        $i->seeNumberOfElements('.views-field-field-uw-service-summary', 4);
         $this->removeAddFirstSection($i);
+        $i->waitForText('Add block');
         $i->click('Add block');
         $i->waitForText('Choose a block');
         $i->click('Automatic list');
         $i->waitForText('Automatic list');
-        $i->waitForElement('.js-form-item-settings-content-type');
+        $i->see('Automatic list');
+        $i->waitForElement('.lbim-dialog-iframe');
+        $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+        $i->waitForElement('#edit-settings-content-type');
         $i->selectOption('settings[content_type]', 'service');
         $i->fillField('input[name="settings[service][categories]"]', 'sc1');
-        $i->click('Add block');
+        $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+        $i->click('input[id*="edit-actions-submit"]');
+        $i->switchToIFrame();
         $i->waitForElement('.views-field-field-uw-service-summary');
-        $i->seeNumberOfElements('.views-field-field-uw-service-summary', 2);
         break;
 
     }
@@ -979,7 +1073,9 @@ class WcmsTestsBlocksListingsCest {
         $i->fillField('input[name="settings[event][items_fieldset][event_ids][0][id]"]', 'Events1');
         $i->selectOption('settings[event][style]', 'agenda');
         $i->click('Add block');
-        $i->waitForText('Manual list');
+        $i->switchToIFrame();
+        $i->waitForText('Events1');
+        $i->see('Events1');
         $i->waitForElement('.uw-agenda');
         $this->removeAddFirstSection($i);
         $this->addListingBlockWithContentType(
@@ -991,6 +1087,7 @@ class WcmsTestsBlocksListingsCest {
         $i->fillField('input[name="settings[event][items_fieldset][event_ids][0][id]"]', 'Events1');
         $i->selectOption('settings[event][style]', 'default');
         $i->click('Add block');
+        $i->switchtoIFrame();
         $i->waitForText('Manual list');
         $i->dontSeeElement('.uw-agenda');
         break;
@@ -1034,11 +1131,18 @@ class WcmsTestsBlocksListingsCest {
         break;
 
       case 'catalog':
+        $i->waitForText('Add block');
         $i->click('Add block');
         $i->waitForText('Choose a block');
         $i->click('Automatic list');
+        $i->waitForText('Configure block');
+
+        // Switch the block form iframe.
+        $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
         $i->waitForText('Automatic list');
-        $i->waitForElement('.js-form-item-settings-content-type');
+        $i->see('Automatic list');
+        $i->waitForElement('#edit-settings-content-type');
         $i->selectOption('settings[content_type]', 'catalog');
         $i->see('Catalog list settings');
         $i->see('Heading selector');
@@ -1128,11 +1232,15 @@ class WcmsTestsBlocksListingsCest {
         break;
 
       case 'service':
+        $i->waitForText('Add block');
         $i->click('Add block');
         $i->waitForText('Choose a block');
         $i->click('Automatic list');
         $i->waitForText('Automatic list');
-        $i->waitForElement('.js-form-item-settings-content-type');
+        $i->see('Automatic list');
+        $i->waitForElement('.lbim-dialog-iframe');
+        $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+        $i->waitForElement('#edit-settings-content-type');
         $i->selectOption('settings[content_type]', 'service');
         $i->see('Service list settings');
         $i->see('Categories');
@@ -1190,7 +1298,8 @@ class WcmsTestsBlocksListingsCest {
     $i->waitForText('Are you sure you want to remove section 1?');
     $i->click('Remove');
     $i->waitForElementNotVisible('.layout-builder__region');
-    $i->click('.layout-builder__link--add');
+    $i->waitForText('Add section');
+    $i->click('Add section');
     $i->waitForText('One column');
     $i->click('One column');
     $i->waitForText('Configure section');
@@ -1221,20 +1330,29 @@ class WcmsTestsBlocksListingsCest {
     int $limit = 3,
   ) {
 
+    $i->waitForText('Add block');
     $i->click('Add block');
     $i->waitForText('Choose a block');
     $i->click($block_type);
+    $i->waitForText('Configure block');
+
+    // Switch the block form iframe.
+    $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
     $i->waitForText($block_type);
-    $i->waitForElement('.js-form-item-settings-content-type');
+    $i->see($block_type);
+    $i->waitForElement('#edit-settings-content-type');
     $i->selectOption('settings[content_type]', $content_type);
+
     if ($block_type == 'Automatic list'
         && $content_type != 'services'
         && $block_type != 'catalogs') {
       $i->selectOption('settings[' . $content_type . '][limit]', $limit);
     }
     if ($save_block) {
-      $i->click('Add block');
-      $i->waitForText($block_type);
+      $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+      $i->click('input[id*="edit-actions-submit"]');
+      $i->switchToIFrame();
     }
   }
 
@@ -1269,9 +1387,20 @@ class WcmsTestsBlocksListingsCest {
 
         // Stop if desired number of events has been reached.
         if (count($events) >= $num) {
-          continue;
+          break;
+        }
+
+        // Ensure that there is a path in the api and that the path
+        // is not already in the events url.
+        if (
+          isset($event['path']) &&
+          !in_array($event['path'], $events)
+        ) {
+          $events[] = $event['path'];
+        }
+        else {
+          break;
         }
-        $events[] = $event['path'];
       }
 
       // Increment the day.
diff --git a/acceptance/WcmsTestsBlocksSearchCest.php b/acceptance/WcmsTestsBlocksSearchCest.php
index cd52d8291ec0f9c1495bd6f3f5f90e6f05f0c791..98efd2c5e840bd76797ef56fc62f4d7a6f746117 100644
--- a/acceptance/WcmsTestsBlocksSearchCest.php
+++ b/acceptance/WcmsTestsBlocksSearchCest.php
@@ -29,6 +29,8 @@ class WcmsTestsBlocksSearchCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group blocksearch
    */
   public function testCatalogSearchBlock(AcceptanceTester $i) {
 
@@ -72,6 +74,9 @@ class WcmsTestsBlocksSearchCest {
     $i->click('Catalog search');
     $i->waitForText('Configure block');
 
+    // Switch the block form iframe.
+    $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
     // Ensure that all fields and help text are present.
     $i->seeElement('input[id^="edit-settings-label"][class*="required"][value="Catalog search"]');
     $i->seeElement('input[id^="edit-settings-label-display"][type="checkbox"][checked="checked"]');
@@ -98,8 +103,11 @@ class WcmsTestsBlocksSearchCest {
 
     // Click the add block.
     $i->click('Add block');
-    $i->waitForElement(Locator::contains('div[class="uw-admin-label"]', 'Catalog search'));
-    $i->seeElement(Locator::contains('div[class="uw-admin-label"]', 'Catalog search'));
+
+    // Switch to iFrame.
+    $i->switchtoIFrame();
+    $i->waitForElement('div[class="uw-form-search"]');
+    $i->seeElement('div[class="uw-form-search"]');
 
     // Ensure that we see the values entered.
     $i->see($catalog_item_title);
@@ -114,6 +122,8 @@ class WcmsTestsBlocksSearchCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group blocksearch
    */
   public function testProjectSearchBlock(AcceptanceTester $i) {
 
@@ -147,6 +157,9 @@ class WcmsTestsBlocksSearchCest {
     $i->click('Project search');
     $i->waitForText('Configure block');
 
+    // Switch the block form iframe.
+    $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
     // Fill in the required fields.
     $i->selectOption('settings[search_option][option]', 'All options');
     $i->fillField('settings[project_settings][search_description]', 'this is the description');
@@ -154,8 +167,11 @@ class WcmsTestsBlocksSearchCest {
 
     // Click on add block and ensure it is on the screen.
     $i->click('Add block');
-    $i->waitForElement(Locator::contains('div[class="uw-admin-label"]', 'Project search'));
-    $i->seeElement(Locator::contains('div[class="uw-admin-label"]', 'Project search'));
+
+    // Switch to iFrame.
+    $i->switchtoIFrame();
+    $i->waitForElement('div[class="uw-form-search"]');
+    $i->seeElement('div[class="uw-form-search"]');
 
     // Test elements are on the page.
     $i->seeElement('.uw-project-form');
@@ -173,6 +189,8 @@ class WcmsTestsBlocksSearchCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group blocksearch
    */
   public function testServiceSearchBlock(AcceptanceTester $i) {
 
@@ -198,6 +216,9 @@ class WcmsTestsBlocksSearchCest {
     $i->click('Service search');
     $i->waitForText('Configure block');
 
+    // Switch the block form iframe.
+    $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
     // Get the title we are going to use.
     $title = $i->uwRandomString();
 
@@ -208,8 +229,11 @@ class WcmsTestsBlocksSearchCest {
 
     // Click on add block and ensure it is on the screen.
     $i->click('Add block');
-    $i->waitForElement(Locator::contains('div[class="uw-admin-label"]', 'Service search'));
-    $i->seeElement(Locator::contains('div[class="uw-admin-label"]', 'Service search'));
+
+    // Switch to iFrame.
+    $i->switchtoIFrame();
+    $i->waitForElement('div[class="uw-form-search"]');
+    $i->seeElement('div[class="uw-form-search"]');
 
     // Test elements are on the page.
     $i->seeElement('.uw-search-form');
@@ -223,6 +247,8 @@ class WcmsTestsBlocksSearchCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group blocksearch
    */
   public function testOfisSearchBlock(AcceptanceTester $i) {
 
@@ -248,6 +274,9 @@ class WcmsTestsBlocksSearchCest {
     $i->click('OFIS expert search');
     $i->waitForText('Configure block');
 
+    // Switch to iFrame.
+    $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
     // Get the values for some fields we are going to use.
     $title = $i->uwRandomString();
     $notice = $i->uwRandomString();
@@ -259,8 +288,12 @@ class WcmsTestsBlocksSearchCest {
 
     // Click on add block and ensure it is on the screen.
     $i->click('Add block');
-    $i->waitForElement(Locator::contains('div[class="uw-admin-label"]', 'OFIS expert search'));
-    $i->seeElement(Locator::contains('div[class="uw-admin-label"]', 'OFIS expert search'));
+
+    // Switch to iFrame.
+    $i->switchtoIFrame();
+
+    $i->waitForText($title);
+    $i->see($title);
 
     // Save layout.
     $i->click('Save layout');
@@ -274,7 +307,7 @@ class WcmsTestsBlocksSearchCest {
 
     // Test search with one result.
     $i->fillField('input[id^="ofis-search"]', 'Aagaard');
-    $i->click('Submit');
+    $i->click('input[id^="edit-submit"]');
     $i->waitforText('Number of experts found: 1');
     $i->seeNumberofelements('.expert', 1);
     $i->dontSeeElement('.uw-exp-col');
@@ -294,7 +327,7 @@ class WcmsTestsBlocksSearchCest {
     foreach ($singleWordSearchTerms as $term) {
       $i->amOnPage($path);
       $i->fillField('input[id^="ofis-search"]', $term);
-      $i->click('Submit');
+      $i->click('input[id^="edit-submit"]');
       $i->waitforText('Number of experts found: ');
       $resultCount = $i->grabTextFrom('div[id^="ofis-results"].ofis-results p');
       $resultCount = preg_replace('/[^0-9]/', '', $resultCount);
@@ -312,7 +345,7 @@ class WcmsTestsBlocksSearchCest {
     // Test search with multiple words.
     $i->amOnPage($path);
     $i->fillField('input[id^="ofis-search"]', $combinedSearchTerm);
-    $i->click('Submit');
+    $i->click('input[id^="edit-submit"]');
     $i->waitforText('Number of experts found: ' . $combinedExpectedResultCount);
     $i->seeNumberofelements('.expert', $combinedExpectedResultCount);
     $i->seeElement('.uw-exp-col');
@@ -328,7 +361,7 @@ class WcmsTestsBlocksSearchCest {
     foreach ($searchTerms as $term => $message) {
       $i->amOnPage($path);
       $i->fillField('input[id^="ofis-search"]', $term);
-      $i->click('Submit');
+      $i->click('input[id^="edit-submit"]');
       $i->waitforText($message);
       $i->dontSeeElement('.expert');
       $i->dontSeeElement('.uw-exp-col');
diff --git a/acceptance/WcmsTestsBlocksTeaserCest.php b/acceptance/WcmsTestsBlocksTeaserCest.php
index 8b1e8c9d855ea0947e20fbce7e55e1ce154948cf..b22dba668f977048947a95530cd593424ff3de4b 100644
--- a/acceptance/WcmsTestsBlocksTeaserCest.php
+++ b/acceptance/WcmsTestsBlocksTeaserCest.php
@@ -84,6 +84,8 @@ class WcmsTestsBlocksTeaserCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group blockteaser
    */
   public function testTeaserBlockConfig(AcceptanceTester $i) {
 
@@ -109,6 +111,9 @@ class WcmsTestsBlocksTeaserCest {
     $i->click('Content teaser');
     $i->waitForText('Configure block');
 
+    // Switch the block form iframe.
+    $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
     // Test the config for the teaser block.
     $i->see('Heading level');
     $i->seeElement('option[value="h2"][selected="selected"]');
@@ -138,6 +143,8 @@ class WcmsTestsBlocksTeaserCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group blockteaser
    */
   public function testTeaserBlock(AcceptanceTester $i) {
 
@@ -172,8 +179,12 @@ class WcmsTestsBlocksTeaserCest {
       $i->click('Content teaser');
       $i->waitForText('Configure block');
 
+      // Switch the block form iframe.
+      $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
+      // Select the content type.
+      $i->waitForElement('#edit-settings-content-type');
       $i->selectOption('select[name="settings[content_type]"]', $content_type);
-      $i->waitForText($content_type . ' settings');
 
       // Get the field name to fill in.
       $field_name = 'input[name="settings[' . $machine_name . '][nid]"]';
@@ -195,7 +206,10 @@ class WcmsTestsBlocksTeaserCest {
       );
 
       // Click on the add block and ensure that it saves.
-      $i->click('Add block');
+      $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+      $i->click('input[id*="edit-actions-submit"]');
+      $i->switchToIFrame();
+
       $i->waitForText('Content teaser');
 
       // Ensure that the teaser block is on the page.
diff --git a/acceptance/WcmsTestsBlocksWebformsCest.php b/acceptance/WcmsTestsBlocksWebformsCest.php
index 008fd03f239d109e46ab4d12d227bb493376ff35..92cdc4e665b3549ee868dadaa9bf425bae165abb 100644
--- a/acceptance/WcmsTestsBlocksWebformsCest.php
+++ b/acceptance/WcmsTestsBlocksWebformsCest.php
@@ -1,6 +1,5 @@
 <?php
 
-use Codeception\Util\Locator;
 use Drupal\webform\Entity\Webform;
 
 /**
@@ -29,6 +28,8 @@ class WcmsTestsBlocksWebformsCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group blockwebforms
    */
   public function testWebformBlock(AcceptanceTester $i) {
 
@@ -63,6 +64,9 @@ class WcmsTestsBlocksWebformsCest {
     $i->click('Webform');
     $i->waitForText('Configure block');
 
+    // Switch the block form iframe.
+    $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
     // The settings for the webform block.
     $title = $i->uwRandomString();
     $webform_name = 'Test form (test_form)';
@@ -73,8 +77,11 @@ class WcmsTestsBlocksWebformsCest {
 
     // Click on add block and ensure it is on the screen.
     $i->click('Add block');
-    $i->waitForElement(Locator::contains('div[class="uw-admin-label"]', 'Webform'));
-    $i->seeElement(Locator::contains('div[class="uw-admin-label"]', 'Webform'));
+
+    // Switch to iFrame.
+    $i->switchtoIFrame();
+    $i->waitForText($title);
+    $i->see($title);
 
     // Need to save the layout to continue the tests.
     $i->waitForElementClickable('#edit-actions #edit-submit');
@@ -82,7 +89,7 @@ class WcmsTestsBlocksWebformsCest {
 
     // Ensure elements are on the page.
     $i->see($title);
-    $i->click('input[class*="webform-button--submit"][value="Submit"]');
+    $i->click('input[id="edit-submit"]');
 
     // Wait for a click the back to form.
     $i->waitForText('Back to form');
diff --git a/acceptance/WcmsTestsCkeditorButtonsCest.php b/acceptance/WcmsTestsCkeditorButtonsCest.php
index cc9fbb0b5fc5a5dd620a58570109975dcc33310e..75a3f59cb2c56fbb44eb4708261c09dda7ac37f7 100644
--- a/acceptance/WcmsTestsCkeditorButtonsCest.php
+++ b/acceptance/WcmsTestsCkeditorButtonsCest.php
@@ -21,6 +21,8 @@ class WcmsTestsCkeditorButtonsCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group ckeditor
    */
   public function testCkeditorButtons(AcceptanceTester $i) {
 
@@ -59,6 +61,8 @@ class WcmsTestsCkeditorButtonsCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group ckeditor
    */
   public function testLanguageSupport(AcceptanceTester $i) {
     // Html tags to test.
@@ -112,6 +116,9 @@ class WcmsTestsCkeditorButtonsCest {
       $i->click('Copy text');
       $i->waitForText('Configure block');
 
+      // Switch the block form iframe.
+      $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
       // Adds tags to text and xpath selector.
       $tagged_text = '<span dir="ltr" lang="' . $code . '">' . $language . '</span>';
 
@@ -122,8 +129,13 @@ class WcmsTestsCkeditorButtonsCest {
       $i->click('Source');
       $i->fillCkEditor($tagged_text, 'textarea[name="settings[block_form][field_uw_copy_text][0][value]"]');
 
-      // Submit form.
+      // Trigger CKEditor update.
+      $i->executeJS('for (instance in CKEDITOR.instances) { CKEDITOR.instances[instance].updateElement(); }');
+
+      // Click the submit button.
+      $i->waitForElementClickable('input[id*="edit-actions-submit"]');
       $i->click('input[id*="edit-actions-submit"]');
+      $i->switchToIFrame();
 
       // Ensure that the tag is on the page.
       $i->waitForElement(Locator::contains('span[lang="' . $code . '"]', $language));
diff --git a/acceptance/WcmsTestsContentTypeBlogCest.php b/acceptance/WcmsTestsContentTypeBlogCest.php
index 9682d4d7de09a6c64a308bf738bb2f156fa0376a..e730bcc60a75ea39f2a73e9bb397213b5307cf26 100644
--- a/acceptance/WcmsTestsContentTypeBlogCest.php
+++ b/acceptance/WcmsTestsContentTypeBlogCest.php
@@ -22,6 +22,8 @@ class WcmsTestsContentTypeBlogCest {
    *
    * @param Step\Acceptance\ContentType $i
    *   Acceptance test variable.
+   *
+   * @group contenttype
    */
   public function testBlogContentType(ContentType $i): void {
 
@@ -43,6 +45,8 @@ class WcmsTestsContentTypeBlogCest {
    *
    * @param Step\Acceptance\TaxonomyTest $i
    *   The acceptance tester.
+   *
+   * @group contenttype
    */
   public function testBlogTaxonomies(TaxonomyTest $i): void {
 
@@ -59,6 +63,8 @@ class WcmsTestsContentTypeBlogCest {
    *
    * @param Step\Acceptance\ContentType $i
    *   The acceptance tester.
+   *
+   * @group contenttype
    */
   public function testBlogDates(ContentType $i): void {
 
diff --git a/acceptance/WcmsTestsContentTypeCatalogCest.php b/acceptance/WcmsTestsContentTypeCatalogCest.php
index 8dcbd9fc5ebf8ed5ac89e2850c46897b73ca4146..965ed62802b9ee7cab492c180306bb39482d10ba 100644
--- a/acceptance/WcmsTestsContentTypeCatalogCest.php
+++ b/acceptance/WcmsTestsContentTypeCatalogCest.php
@@ -72,6 +72,8 @@ class WcmsTestsContentTypeCatalogCest {
    *
    * @param Step\Acceptance\ContentType $i
    *   Acceptance test variable.
+   *
+   * @group contenttype
    */
   public function testCatalogContentType(ContentType $i) {
 
@@ -103,6 +105,8 @@ class WcmsTestsContentTypeCatalogCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group contenttype
    */
   public function catalogSettingsTest(AcceptanceTester $i) {
 
@@ -169,6 +173,8 @@ class WcmsTestsContentTypeCatalogCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group contenttype
    */
   public function catalogTermRolesTest(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsContentTypeContactCest.php b/acceptance/WcmsTestsContentTypeContactCest.php
index 49fd57d33c832047bdd5a372b5fc035b64710ab2..c986820845f6c8cb9b1f46eadaeb15109e748672 100644
--- a/acceptance/WcmsTestsContentTypeContactCest.php
+++ b/acceptance/WcmsTestsContentTypeContactCest.php
@@ -36,6 +36,8 @@ class WcmsTestsContentTypeContactCest {
    *
    * @param Step\Acceptance\ContentType $i
    *   Acceptance test variable.
+   *
+   * @group contenttype
    */
   public function testContactContentType(ContentType $i) {
 
@@ -57,6 +59,8 @@ class WcmsTestsContentTypeContactCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group contenttype
    */
   public function testContactSettings(AcceptanceTester $i) {
 
@@ -103,6 +107,8 @@ class WcmsTestsContentTypeContactCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group contenttype
    */
   public function testContactReorder(AcceptanceTester $i) {
 
@@ -138,7 +144,10 @@ class WcmsTestsContentTypeContactCest {
       5 => 1,
     ];
 
-    $i->click('Show row weights');
+    $i->waitForElementVisible("button.tabledrag-toggle-weight", 60);
+    $i->executeJS("var elem = document.querySelector('button.tabledrag-toggle-weight'); elem.style.display = 'block'; elem.style.visibility = 'visible'; elem.scrollIntoView(true);");
+    $i->waitForElementClickable("button.tabledrag-toggle-weight", 60);
+    $i->executeJS('document.querySelector("button.tabledrag-toggle-weight").click();');
 
     // Set weights for all contacts.
     foreach ($newOrder as $contactNum => $newPos) {
diff --git a/acceptance/WcmsTestsContentTypeEventCest.php b/acceptance/WcmsTestsContentTypeEventCest.php
index 059ac1dfff30b560e3487410782beaa793167f8d..2b7f30769934d9bf19cc752ca9a4ccf3753ea4cf 100644
--- a/acceptance/WcmsTestsContentTypeEventCest.php
+++ b/acceptance/WcmsTestsContentTypeEventCest.php
@@ -22,6 +22,8 @@ class WcmsTestsContentTypeEventCest {
    *
    * @param Step\Acceptance\ContentType $i
    *   Acceptance test variable.
+   *
+   * @group contenttype
    */
   public function testEventContentType(ContentType $i): void {
 
@@ -43,6 +45,8 @@ class WcmsTestsContentTypeEventCest {
    *
    * @param Step\Acceptance\TaxonomyTest $i
    *   The acceptance tester.
+   *
+   * @group contenttype
    */
   public function testEventTaxonomies(TaxonomyTest $i): void {
 
@@ -62,6 +66,8 @@ class WcmsTestsContentTypeEventCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group contenttype
    */
   public function testEventLocationInfo(AcceptanceTester $i): void {
 
@@ -83,6 +89,8 @@ class WcmsTestsContentTypeEventCest {
    *
    * @param Step\Acceptance\ContentType $i
    *   The acceptance tester.
+   *
+   * @group contenttype
    */
   public function testEventDates(ContentType $i): void {
 
diff --git a/acceptance/WcmsTestsContentTypeExpandCollapseCest.php b/acceptance/WcmsTestsContentTypeExpandCollapseCest.php
index b8b90e9518058d7a175925710cf6346a8647cc2a..733945c442f08a56ba5466b91022b070bf0cf4ed 100644
--- a/acceptance/WcmsTestsContentTypeExpandCollapseCest.php
+++ b/acceptance/WcmsTestsContentTypeExpandCollapseCest.php
@@ -21,6 +21,8 @@ class WcmsTestsContentTypeExpandCollapseCest {
    *
    * @param Step\Acceptance\ContentType $i
    *   Acceptance test variable.
+   *
+   * @group contenttype
    */
   public function testExpandCollapseContentType(ContentType $i): void {
 
diff --git a/acceptance/WcmsTestsContentTypeNewsCest.php b/acceptance/WcmsTestsContentTypeNewsCest.php
index c98f3314c842d550c9201fed47e197bf6db90f8e..2380e1509850bb447ed86000c0b114d667bc406e 100644
--- a/acceptance/WcmsTestsContentTypeNewsCest.php
+++ b/acceptance/WcmsTestsContentTypeNewsCest.php
@@ -22,6 +22,8 @@ class WcmsTestsContentTypeNewsCest {
    *
    * @param Step\Acceptance\ContentType $i
    *   Acceptance test variable.
+   *
+   * @group contenttype
    */
   public function testNewsContentType(ContentType $i): void {
 
@@ -43,6 +45,8 @@ class WcmsTestsContentTypeNewsCest {
    *
    * @param Step\Acceptance\TaxonomyTest $i
    *   The acceptance tester.
+   *
+   * @group contenttype
    */
   public function testNewsTaxonomies(TaxonomyTest $i): void {
 
@@ -59,6 +63,8 @@ class WcmsTestsContentTypeNewsCest {
    *
    * @param Step\Acceptance\ContentType $i
    *   The acceptance tester.
+   *
+   * @group contenttype
    */
   public function testNewsDates(ContentType $i): void {
 
diff --git a/acceptance/WcmsTestsContentTypeOpportunityCest.php b/acceptance/WcmsTestsContentTypeOpportunityCest.php
index 65f06da1d306a6ce533bd37f99ef4fec002052b1..b2cef02400ce2dd1da157d1d5e974eea039f4393 100644
--- a/acceptance/WcmsTestsContentTypeOpportunityCest.php
+++ b/acceptance/WcmsTestsContentTypeOpportunityCest.php
@@ -22,6 +22,8 @@ class WcmsTestsContentTypeOpportunityCest {
    *
    * @param Step\Acceptance\ContentType $i
    *   Acceptance test variable.
+   *
+   * @group contenttype
    */
   public function testOpportunityContentType(ContentType $i): void {
 
@@ -43,6 +45,8 @@ class WcmsTestsContentTypeOpportunityCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group contenttype
    */
   public function testTaxonomies(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsContentTypeProfileCest.php b/acceptance/WcmsTestsContentTypeProfileCest.php
index f028d032f14dc26c051893a00cf14064d8839746..124a1f8921eaf5d3bb667a030d2ae1dbf736eff5 100644
--- a/acceptance/WcmsTestsContentTypeProfileCest.php
+++ b/acceptance/WcmsTestsContentTypeProfileCest.php
@@ -29,6 +29,8 @@ class WcmsTestsContentTypeProfileCest {
    *
    * @param Step\Acceptance\ContentType $i
    *   Acceptance test variable.
+   *
+   * @group contenttype
    */
   public function testProfileContentType(ContentType $i): void {
 
@@ -50,6 +52,8 @@ class WcmsTestsContentTypeProfileCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group contenttype
    */
   public function testProfileContactSynchronization(AcceptanceTester $i) {
     // Login as site manager user.
diff --git a/acceptance/WcmsTestsContentTypeProjectCest.php b/acceptance/WcmsTestsContentTypeProjectCest.php
index 0954a84d04b3e84bffb196f677082e28ed26c7ce..f3cb83ebb5241991f6d1587377c41e35d8736cc3 100644
--- a/acceptance/WcmsTestsContentTypeProjectCest.php
+++ b/acceptance/WcmsTestsContentTypeProjectCest.php
@@ -34,10 +34,12 @@ class WcmsTestsContentTypeProjectCest {
   private array $nodesUsed = [];
 
   /**
-   * Tests for profiles.
+   * Tests for projects.
    *
    * @param Step\Acceptance\ContentType $i
    *   Acceptance test variable.
+   *
+   * @group contenttype
    */
   public function testProjectContentType(ContentType $i): void {
 
@@ -59,6 +61,8 @@ class WcmsTestsContentTypeProjectCest {
    *
    * @param Step\Acceptance\TaxonomyTest $i
    *   The acceptance tester.
+   *
+   * @group contenttype
    */
   public function testProjectTaxonomies(TaxonomyTest $i): void {
 
@@ -75,6 +79,8 @@ class WcmsTestsContentTypeProjectCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group contenttype
    */
   public function testProjectTaxonomyTerms(AcceptanceTester $i) {
 
@@ -110,6 +116,8 @@ class WcmsTestsContentTypeProjectCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group contenttype
    */
   public function testProjectMembers(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsContentTypeServiceCest.php b/acceptance/WcmsTestsContentTypeServiceCest.php
index ee9c9b1d1d0df4e3f90a7f65f4a2f3f710910efd..06c879688e0a28d7f8a814cea8537dff43f0db7f 100644
--- a/acceptance/WcmsTestsContentTypeServiceCest.php
+++ b/acceptance/WcmsTestsContentTypeServiceCest.php
@@ -28,6 +28,8 @@ class WcmsTestsContentTypeServiceCest {
    *
    * @param Step\Acceptance\ContentType $i
    *   Acceptance test variable.
+   *
+   * @group contenttype
    */
   public function testServiceContentType(ContentType $i): void {
 
diff --git a/acceptance/WcmsTestsContentTypeSidebarCest.php b/acceptance/WcmsTestsContentTypeSidebarCest.php
index 5a25261675cb8d99eda11388227f4a27a41b6079..47c0d0d04f3e049fe462a7944726fa2f156678cb 100644
--- a/acceptance/WcmsTestsContentTypeSidebarCest.php
+++ b/acceptance/WcmsTestsContentTypeSidebarCest.php
@@ -21,6 +21,8 @@ class WcmsTestsContentTypeSidebarCest {
    *
    * @param Step\Acceptance\ContentType $i
    *   Acceptance test variable.
+   *
+   * @group contenttype
    */
   public function testSidebarContentType(ContentType $i): void {
 
diff --git a/acceptance/WcmsTestsContentTypeSiteFooterCest.php b/acceptance/WcmsTestsContentTypeSiteFooterCest.php
index 9e4cd18d60cff09c39e6021ba5c0d54b9d055d7f..5f39575c4ccaa1ff3c461ea9096c86770950273e 100644
--- a/acceptance/WcmsTestsContentTypeSiteFooterCest.php
+++ b/acceptance/WcmsTestsContentTypeSiteFooterCest.php
@@ -21,6 +21,8 @@ class WcmsTestsContentTypeSiteFooterCest {
    *
    * @param Step\Acceptance\ContentType $i
    *   Acceptance test variable.
+   *
+   * @group contenttype
    */
   public function testSiteFooterContentType(ContentType $i): void {
 
diff --git a/acceptance/WcmsTestsContentTypeWebpageCest.php b/acceptance/WcmsTestsContentTypeWebpageCest.php
index 2f347327da5daf6c5c99df1fb83640f503b84f17..1c0cf1d309ed003564582d9984045b6cc7d8e71e 100644
--- a/acceptance/WcmsTestsContentTypeWebpageCest.php
+++ b/acceptance/WcmsTestsContentTypeWebpageCest.php
@@ -17,10 +17,12 @@ class WcmsTestsContentTypeWebpageCest {
   private string $contentType = 'uw_ct_web_page';
 
   /**
-   * Tests for blog content type.
+   * Tests for webpage content type.
    *
    * @param Step\Acceptance\ContentType $i
    *   Acceptance test variable.
+   *
+   * @group contenttype
    */
   public function testWebpageContentType(ContentType $i): void {
 
diff --git a/acceptance/WcmsTestsDashboardCest.php b/acceptance/WcmsTestsDashboardCest.php
index aa541df31ee89a4f2cb6dbd127f1b7221d8bbf04..608a47b645326d6a664d6099a43ecee25cde034f 100644
--- a/acceptance/WcmsTestsDashboardCest.php
+++ b/acceptance/WcmsTestsDashboardCest.php
@@ -14,6 +14,8 @@ class WcmsTestsDashboardCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group dashboards
    */
   public function testAccess(AcceptanceTester $i) {
 
@@ -97,6 +99,8 @@ class WcmsTestsDashboardCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group dashboards
    */
   public function testElements(AcceptanceTester $i) {
 
@@ -153,6 +157,8 @@ class WcmsTestsDashboardCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group dashboards
    */
   public function testLayoutBuilder(AcceptanceTester $i) {
 
@@ -185,11 +191,6 @@ class WcmsTestsDashboardCest {
     $i->seeLink('Publication reference authors');
     $i->seeLink('Publication reference keywords');
     $i->seeLink('Publication references');
-
-    // Following blocks should not be available on dashboard.
-    $i->dontSeeLink('Special alert');
-    $i->dontSeeLink('Blog author');
-    $i->dontSeeLink('UW content moderation');
   }
 
   /**
@@ -197,6 +198,8 @@ class WcmsTestsDashboardCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group dashboards
    */
   public function testTaxonomyTermCancelButton(AcceptanceTester $i) {
 
@@ -264,13 +267,21 @@ class WcmsTestsDashboardCest {
       $i->click($block);
       $i->waitForText('Configure block');
 
+      // Switch the block form iframe.
+      $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
       // Adds the block.
-      $i->click('input[value="Add block"]');
+      $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+      $i->click('input[id*="edit-actions-submit"]');
+      $i->switchToIFrame();
+
       $i->waitForElement($class);
+      $i->seeElement($class);
     }
 
     // Saves the dashboard layout.
-    $i->click('Save layout');
+    $i->waitForElementClickable('input[id*="edit-submit"]');
+    $i->click('input[id*="edit-submit"]');
 
   }
 
@@ -283,15 +294,14 @@ class WcmsTestsDashboardCest {
   private function getDefaultSections(): array {
 
     return [
-      '#web-resources-news' => 'uw-full-width layout layout--uw-3-col even-split',
-      '#recent-content' => 'uw-full-width layout layout--uw-3-col even-split',
-      '#whos-online' => 'uw-full-width layout layout--uw-3-col even-split',
-      '#content-list' => 'uw-full-width layout layout--uw-2-col larger-left',
-      '#forms-list' => 'uw-full-width layout layout--uw-2-col larger-left',
-      // Publication references block has no id, so searching by class instead.
-      '.block-uw-publication-reference-block' => 'uw-full-width layout layout--uw-2-col larger-left',
-      '#content-management-menu' => 'uw-full-width layout layout--uw-2-col larger-left',
-      '#site-management-menu' => 'uw-full-width layout layout--uw-2-col larger-left',
+      '#web-resources-news' => 'uw-full-width uw-section-spacing--default uw-section-separator--none uw-column-separator--none layout layout--uw-3-col even-split',
+      '#recent-content' => 'uw-full-width uw-section-spacing--default uw-section-separator--none uw-column-separator--none layout layout--uw-3-col even-split',
+      '#whos-online' => 'uw-full-width uw-section-spacing--default uw-section-separator--none uw-column-separator--none layout layout--uw-3-col even-split',
+      '#content-list' => 'uw-full-width uw-section-spacing--default uw-section-separator--none uw-column-separator--none layout layout--uw-2-col larger-left',
+      '#forms-list' => 'uw-full-width uw-section-spacing--default uw-section-separator--none uw-column-separator--none layout layout--uw-2-col larger-left',
+      '#content-management-menu' => 'uw-full-width uw-section-spacing--default uw-section-separator--none uw-column-separator--none layout layout--uw-2-col larger-left',
+      '#site-management-menu' => 'uw-full-width uw-section-spacing--default uw-section-separator--none uw-column-separator--none layout layout--uw-2-col larger-left',
+      '#content-type-list' => 'uw-full-width uw-section-spacing--default uw-section-separator--none uw-column-separator--none layout layout--uw-2-col larger-left',
     ];
   }
 
diff --git a/acceptance/WcmsTestsDashboardCsvReportsCest.php b/acceptance/WcmsTestsDashboardCsvReportsCest.php
index 2fba60014d0eed19e86f4dfe1313c947472bd64f..0f034fcebae594018d54b37567a7ceada9c26235 100644
--- a/acceptance/WcmsTestsDashboardCsvReportsCest.php
+++ b/acceptance/WcmsTestsDashboardCsvReportsCest.php
@@ -12,6 +12,8 @@ class WcmsTestsDashboardCsvReportsCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group dashboards
    */
   public function testDashboardCsvReport(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsDeleteWarningMessageCest.php b/acceptance/WcmsTestsDeleteWarningMessageCest.php
index 4f8d1fb6d783e887ecd135013a1c7ab959505603..3992c3d5e4efcb5206501a12ed53f61ae634989f 100644
--- a/acceptance/WcmsTestsDeleteWarningMessageCest.php
+++ b/acceptance/WcmsTestsDeleteWarningMessageCest.php
@@ -26,6 +26,8 @@ class WcmsTestsDeleteWarningMessageCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group messaging
    */
   public function testDeleteWarningMessage(AcceptanceTester $i) {
 
@@ -86,6 +88,8 @@ class WcmsTestsDeleteWarningMessageCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group messaging
    */
   public function testPreventDeletingCatalogBeingUsed(AcceptanceTester $i) {
     // Login as site manager.
diff --git a/acceptance/WcmsTestsDiffHeadersCest.php b/acceptance/WcmsTestsDiffHeadersCest.php
index 63792a8a3a30e945735f060ebfcec9c62e13c144..ef3f675bcb9febccff331b3e71d48a50a1962adc 100644
--- a/acceptance/WcmsTestsDiffHeadersCest.php
+++ b/acceptance/WcmsTestsDiffHeadersCest.php
@@ -50,6 +50,8 @@ class WcmsTestsDiffHeadersCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group modules
    */
   public function diffHeadersTest(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsEventDisplayCest.php b/acceptance/WcmsTestsEventDisplayCest.php
index e2e09cd3e4896d87bd2940e38ff2d20e2cf4095f..891cc3aae57e0e3869f16643a7098f74c6255d5e 100644
--- a/acceptance/WcmsTestsEventDisplayCest.php
+++ b/acceptance/WcmsTestsEventDisplayCest.php
@@ -12,6 +12,8 @@ class WcmsTestsEventDisplayCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group display
    */
   public function testEventDisplay(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsExcludeAutoListCest.php b/acceptance/WcmsTestsExcludeAutoListCest.php
index 7be95b03af8c29686d93f09db0427e2966896ea6..2eacd11b9fb7a7bc4a711035749f830c16c2713b 100644
--- a/acceptance/WcmsTestsExcludeAutoListCest.php
+++ b/acceptance/WcmsTestsExcludeAutoListCest.php
@@ -1,7 +1,5 @@
 <?php
 
-use Codeception\Util\Locator;
-
 /**
  * Class WcmsTestsExcludeAutoListCest.
  *
@@ -51,7 +49,7 @@ class WcmsTestsExcludeAutoListCest {
   private array $listingBlocks = [
     'Blog posts' => '.card__teaser--blog',
     'Catalog items' => 'span a[href^="/catalogs/"]',
-    'Contacts' => '.card__teaser--contact',
+    'Contacts' => '.uw-contact',
     'Events' => '.card__teaser--event',
     'News items' => '.card__teaser--news-item',
     'Opportunities' => '.card__teaser--opportunity',
@@ -134,6 +132,8 @@ class WcmsTestsExcludeAutoListCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group display
    */
   public function testExcludeListingPages(AcceptanceTester $i): void {
 
@@ -154,6 +154,8 @@ class WcmsTestsExcludeAutoListCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group display
    */
   public function testExcludeAutoListBlock(AcceptanceTester $i): void {
 
@@ -190,15 +192,18 @@ class WcmsTestsExcludeAutoListCest {
       $i->click('Automatic list');
       $i->waitForText('Configure block');
 
+      // Switch the block form iframe.
+      $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
       // Select the content type.
+      $i->waitForElement('#edit-settings-content-type');
       $i->selectOption('select[id*="edit-settings-content-type"]', $content_type);
-      $i->click('Add block');
-
-      // Wait for the block to load and ensure that the
-      // number of elements are on the page.
-      $i->waitForElement(Locator::contains('.uw-admin-label', 'Automatic list'));
+      $i->waitForElementClickable('input[id*="edit-actions-submit"]');
+      $i->click('input[id*="edit-actions-submit"]');
+      $i->switchToIFrame();
 
       // Ensurfe there are only two on the page.
+      $i->waitForElement($class);
       $i->seeNumberOfElements($class, 2);
     }
   }
diff --git a/acceptance/WcmsTestsGlobalFooterCest.php b/acceptance/WcmsTestsGlobalFooterCest.php
index 3d923d655ee3899a1ac3a6cf27f819d77151fbc3..31b1f0dedf88e800e4d6094636799d8fc2cd2df2 100644
--- a/acceptance/WcmsTestsGlobalFooterCest.php
+++ b/acceptance/WcmsTestsGlobalFooterCest.php
@@ -14,6 +14,8 @@ class WcmsTestsGlobalFooterCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group display
    */
   public function testGlobalFooter(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsHomepageCest.php b/acceptance/WcmsTestsHomepageCest.php
index 6a78f1b878cb554792fbb1c196b9528628374e25..53bfc3c30c09e0826d864bbafaa593078128d203 100644
--- a/acceptance/WcmsTestsHomepageCest.php
+++ b/acceptance/WcmsTestsHomepageCest.php
@@ -12,6 +12,8 @@ class WcmsTestsHomepageCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group homepage
    */
   public function testHomepageElements(AcceptanceTester $i): void {
 
@@ -46,6 +48,8 @@ class WcmsTestsHomepageCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group homepage
    */
   public function testHomePageMenuLink(AcceptanceTester $i): void {
 
@@ -84,6 +88,8 @@ class WcmsTestsHomepageCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group homepage
    */
   public function testHomePageConfig(AcceptanceTester $i): void {
 
diff --git a/acceptance/WcmsTestsImgInlineCest.php b/acceptance/WcmsTestsImgInlineCest.php
index c9d5ce9a04e77b99ee31cf28e9166d550f073d7e..ff5c9c381bfb87ca785a8f2c61e1c75ed8aff5aa 100644
--- a/acceptance/WcmsTestsImgInlineCest.php
+++ b/acceptance/WcmsTestsImgInlineCest.php
@@ -19,6 +19,8 @@ class WcmsTestsImgInlineCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group media
    */
   public function testImgInline(AcceptanceTester $i) {
 
@@ -28,7 +30,6 @@ class WcmsTestsImgInlineCest {
 
     // Step through each of the block elements and test them.
     foreach ($this->getBlocks() as $block) {
-
       $title = $i->uwRandomString();
       // Create a webpage.
       $this->nodesUsed[$title] = $i->createWebPage($title);
@@ -41,9 +42,17 @@ class WcmsTestsImgInlineCest {
 
       // Add a block with each tag.
       $i->waitForElementClickable('.layout-builder__add-block');
+      $i->executeJS("document.querySelector('.layout-builder__add-block').scrollIntoView(true);");
+      // Adjust the selector as needed.
+      $i->waitForElementNotVisible('.loading-spinner', 60);
       $i->click('.layout-builder__add-block');
+
       $i->waitForText('Choose a block');
       $i->click('Copy text');
+      $i->waitForText('Configure block');
+
+      // Switch the block form iframe.
+      $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
       $i->waitForText('Block description');
 
       // Fill the title.
@@ -60,23 +69,35 @@ class WcmsTestsImgInlineCest {
       // Fill the ckeditor field with the block element.
       $i->fillCkEditor(
         '<' . $block . '> Here is an image. <img alt="Inserted image in ' . $block . ' block" src="https://uwaterloo.ca/building-the-next-wcms/sites/default/files/uploads/images/icons-2021_laptop.png" /> More text. </' . $block . '>',
-      'textarea[name="settings[block_form][field_uw_copy_text][0][value]"]'
+        'textarea[name="settings[block_form][field_uw_copy_text][0][value]"]'
       );
 
+      // Trigger CKEditor update.
+      $i->executeJS('for (instance in CKEDITOR.instances) { CKEDITOR.instances[instance].updateElement(); }');
+
       // Click the submit button.
       $i->waitForElementClickable('input[id*="edit-actions-submit"]');
       $i->click('input[id*="edit-actions-submit"]');
+      $i->switchToIFrame();
 
       // Ensure that the block is on the page.
-      $i->waitForElement('.uw-copy-text div ' . $block . ' img');
+      $i->waitForJS("return document.readyState === 'complete';", 30);
+      $i->waitForElement(".uw-copy-text div " . $block . " img", 30);
+      $i->waitForElement('.uw-copy-text div img[alt="Inserted image in ' . $block . ' block"]');
 
       // Check that image's parent is a block.
-      $i->seeElement('.uw-copy-text div ' . $block . ' img', ['alt' => 'Inserted image in ' . $block . ' block']);
+      $i->seeElement(".uw-copy-text div " . $block . " img", ['alt' => 'Inserted image in ' . $block . ' block']);
+      $i->waitForJS("return document.readyState === 'complete';");
 
       // Remove added block to avoid ambiguity in finding image.
       $i->amOnPage($path . '/layout/discard-changes');
+      $i->waitForText('Are you sure you want to discard your layout changes?');
+      $i->see('Are you sure you want to discard your layout changes?');
+      $i->waitForElement('#edit-submit');
       $i->click('#edit-submit');
-      $i->waitForText('The changes to the layout have been discarded.');
+      $i->waitForJS("return document.readyState === 'complete';");
+      $i->waitForElement('.messages');
+      $i->see('The changes to the layout have been discarded.');
     }
   }
 
diff --git a/acceptance/WcmsTestsLayoutBuilderBrowserCest.php b/acceptance/WcmsTestsLayoutBuilderBrowserCest.php
index 9126b8c55845e6a9adcde95f1c662bf0f9a6d27d..d7ccadc226ba37889e2f058bd9a3a755382b10b4 100644
--- a/acceptance/WcmsTestsLayoutBuilderBrowserCest.php
+++ b/acceptance/WcmsTestsLayoutBuilderBrowserCest.php
@@ -12,6 +12,8 @@ class WcmsTestsLayoutBuilderBrowserCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group layouts
    */
   public function testLayoutBuilderBrowser(AcceptanceTester $i) {
 
@@ -31,7 +33,6 @@ class WcmsTestsLayoutBuilderBrowserCest {
       'tr[data-drupal-selector="edit-categories-uw-lbb-image"]',
       'tr[data-drupal-selector="edit-categories-inline-blockuw-cbl-image-gallery"]',
       'tr[data-drupal-selector="edit-categories-inline-blockuw-cbl-mailman"]',
-      'tr[data-drupal-selector="edit-categories-inline-blockuw-cbl-related-links"]',
       'tr[data-drupal-selector="edit-categories-uw-lbb-tags"]',
       'tr[data-drupal-selector="edit-categories-inline-blockuw-cbl-timeline"]',
       'tr[data-drupal-selector="edit-categories-category-uw-bc-external-embeds"]',
diff --git a/acceptance/WcmsTestsLayoutSectionConfigurationFormCest.php b/acceptance/WcmsTestsLayoutSectionConfigurationFormCest.php
index 57adf1dd1f850d897ccedf2e997d5de6e103d97f..084c68bb29d1ccd1b0ed10bb2580b61bc2bdef80 100644
--- a/acceptance/WcmsTestsLayoutSectionConfigurationFormCest.php
+++ b/acceptance/WcmsTestsLayoutSectionConfigurationFormCest.php
@@ -19,6 +19,8 @@ class WcmsTestsLayoutSectionConfigurationFormCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group layouts
    */
   public function layoutConfigurationFormTest(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsLinkFieldCest.php b/acceptance/WcmsTestsLinkFieldCest.php
index d4da47b6a34cc3a35dd8db76709696ec35a84a2c..ba61256487f8ff674543f53a2a68035db30c9949 100644
--- a/acceptance/WcmsTestsLinkFieldCest.php
+++ b/acceptance/WcmsTestsLinkFieldCest.php
@@ -42,6 +42,8 @@ class WcmsTestsLinkFieldCest {
    *
    * @param Step\Acceptance\ContentType $i
    *   Content Type test variable.
+   *
+   * @group miscellaneous
    */
   public function testLinkField(ContentType $i) {
 
@@ -248,6 +250,8 @@ class WcmsTestsLinkFieldCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group miscellaneous
    */
   public function testContentBlocks(AcceptanceTester $i) {
 
@@ -279,13 +283,6 @@ class WcmsTestsLinkFieldCest {
               'settings[block_form][field_uw_cta_details][0][subform][field_uw_cta_text_details][0][text_value]' => $i->uwRandomString(),
             ],
           ],
-          'Related links' => [
-            'Fields' => [
-              'settings[label]' => $i->uwRandomString(),
-              'settings[block_form][field_uw_rl_related_link][0][uri]' => $text,
-              'settings[block_form][field_uw_rl_related_link][0][title]' => $i->uwRandomString(),
-            ],
-          ],
           'Timeline' => [
             'Fields' => [
               'settings[label]' => $i->uwRandomString(),
@@ -314,6 +311,9 @@ class WcmsTestsLinkFieldCest {
           $i->click($block);
           $i->waitForText('Configure block');
 
+          // Switch the block form iframe.
+          $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
+
           // Fill the block fields.
           $this->fillBlockFields($i, $fields, 'Add block');
 
diff --git a/acceptance/WcmsTestsLongTitlesCest.php b/acceptance/WcmsTestsLongTitlesCest.php
index 862caee089e1fdf629080602803c59559770d1e6..f9600529213c182eca3d5be846d8a164f62db07a 100644
--- a/acceptance/WcmsTestsLongTitlesCest.php
+++ b/acceptance/WcmsTestsLongTitlesCest.php
@@ -77,6 +77,8 @@ class WcmsTestsLongTitlesCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group miscellaneous
    */
   public function testLongTitles(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsMediaAboveCest.php b/acceptance/WcmsTestsMediaAboveCest.php
index 70cc57a72e26ed001b9846599df6d3e1dcc8fff3..877677839993e096758c5dd4ea8d489fc9e203de 100644
--- a/acceptance/WcmsTestsMediaAboveCest.php
+++ b/acceptance/WcmsTestsMediaAboveCest.php
@@ -29,6 +29,8 @@ class WcmsTestsMediaAboveCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group media
    */
   public function testSettingsMediaAbove(AcceptanceTester $i) {
 
@@ -124,6 +126,8 @@ class WcmsTestsMediaAboveCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group media
    */
   public function testBannersAbove(AcceptanceTester $i) {
 
@@ -262,6 +266,8 @@ class WcmsTestsMediaAboveCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group media
    */
   public function testImageAbove(AcceptanceTester $i) {
 
@@ -381,32 +387,38 @@ class WcmsTestsMediaAboveCest {
 
     // Step through all the images and add them.
     foreach ($images as $image) {
+      try {
+        // Go to the add image page.
+        $i->amOnPage('media/add/uw_mt_image');
+        $i->see('Add image');
+
+        // Add remote image.
+        $i->click('Remote URL');
+        $i->waitForElementVisible('#edit-name-0-value', 10);
+        $i->fillField(
+          '#edit-name-0-value',
+          $image['title'],
+        );
+        $i->waitForElementVisible('#edit-field-media-image-0-filefield-remote-url', 10);
+        $i->fillField(
+          '#edit-field-media-image-0-filefield-remote-url',
+          $image['url'],
+        );
 
-      // Go to the add image page.
-      $i->amOnPage('media/add/uw_mt_image');
-      $i->see('Add image');
-
-      // Add remote image.
-      $i->click('Remote URL');
-      $i->fillField(
-        '#edit-name-0-value',
-        $image['title'],
-      );
-      $i->fillField(
-        '#edit-field-media-image-0-filefield-remote-url',
-        $image['url'],
-      );
-
-      // Click and transger and ensure that it uploads.
-      $i->click('Transfer');
-      $i->waitForText('Alternative text');
+        // Click and transfer and ensure that it uploads.
+        $i->click('Transfer');
+        $i->waitForText('Alternative text');
 
-      // Fill in the alt text field.
-      $i->fillField('input[id*="edit-field-media-image-0-alt"]', $image['title']);
+        // Fill in the alt text field.
+        $i->fillField('input[id*="edit-field-media-image-0-alt"]', $image['title']);
 
-      // Click save and ensure that the image is added.
-      $i->click('Save');
-      $i->see('Image ' . $image['title'] . ' has been created');
+        // Click save and ensure that the image is added.
+        $i->click('Save');
+        $i->waitForText('Image ' . $image['title'] . ' has been created');
+      }
+      catch (\Exception $e) {
+        $i->comment('Failed to add image: ' . (string) $image['title'] . ' - ' . $e->getMessage());
+      }
     }
   }
 
diff --git a/acceptance/WcmsTestsMediaMenuItemsCest.php b/acceptance/WcmsTestsMediaMenuItemsCest.php
index b9242a4af02d95fc4a38dccee0ca1a79a145ee72..080723b86190d3627c4ae96ae49bca68e3a60663 100644
--- a/acceptance/WcmsTestsMediaMenuItemsCest.php
+++ b/acceptance/WcmsTestsMediaMenuItemsCest.php
@@ -12,6 +12,8 @@ class WcmsTestsMediaMenuItemsCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group media
    */
   public function testMediaMenuAuthorized(AcceptanceTester $i) {
 
@@ -59,6 +61,8 @@ class WcmsTestsMediaMenuItemsCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group media
    */
   public function testMediaMenuUnauthorized(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsMediaTypesCest.php b/acceptance/WcmsTestsMediaTypesCest.php
index 85a4a16b093b8eed8c47ace4ff471e2cc393d09e..41261c856004bae30a0ce2d192e0331589eaf746 100644
--- a/acceptance/WcmsTestsMediaTypesCest.php
+++ b/acceptance/WcmsTestsMediaTypesCest.php
@@ -46,6 +46,8 @@ class WcmsTestsMediaTypesCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group media
    */
   public function mediaTypesTest(AcceptanceTester $i) {
 
@@ -57,7 +59,7 @@ class WcmsTestsMediaTypesCest {
     $i->amOnPage('admin/structure/media/manage/uw_mt_file/fields/media.uw_mt_file.field_media_file');
     $i->seeInField(['name' => 'settings[file_directory]'], 'uploads/documents');
     $i->seeInField(['name' => 'settings[max_filesize]'], '25 MB');
-    $i->seeInField(['name' => 'settings[file_extensions]'], 'bib, csv, doc, docx, epub, gz, key, m, mw, mp3, rtf, pdf, pot, potx, pps, ppt, pptx, psd, r, tar, tex, txt, wav, xls, xlsx, zip');
+    $i->seeInField(['name' => 'settings[file_extensions]'], 'bib, csv, doc, docx, epub, gz, json, key, m, mw, mp3, rtf, pdf, pot, potx, pps, ppt, pptx, psd, r, tar, tex, txt, wav, xls, xlsx, zip');
 
     // File directory default value for Icon media type
     // is 'uploads/icons'.
diff --git a/acceptance/WcmsTestsMenuSettingsCest.php b/acceptance/WcmsTestsMenuSettingsCest.php
index e029ec0aee00bdc9f93c2bddfdbe0e2af0bb0e93..cb2124c13b93aa418a702d0272de40ed5a7ca45e 100644
--- a/acceptance/WcmsTestsMenuSettingsCest.php
+++ b/acceptance/WcmsTestsMenuSettingsCest.php
@@ -54,6 +54,8 @@ class WcmsTestsMenuSettingsCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group menus
    */
   public function testMenuSettings(AcceptanceTester $i): void {
 
diff --git a/acceptance/WcmsTestsMenusCest.php b/acceptance/WcmsTestsMenusCest.php
index 569f9b078268a9ce627a275f004ee9a01d8c6ca8..f2478cf219b3c61895117960071e202657043977 100644
--- a/acceptance/WcmsTestsMenusCest.php
+++ b/acceptance/WcmsTestsMenusCest.php
@@ -12,6 +12,8 @@ class WcmsTestsMenusCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group menus
    */
   public function testContentManagementMenu(AcceptanceTester $i) {
 
@@ -38,6 +40,8 @@ class WcmsTestsMenusCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group menus
    */
   public function testSiteInformationMenu(AcceptanceTester $i) {
 
@@ -64,6 +68,8 @@ class WcmsTestsMenusCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group menus
    */
   public function testAddingMenuLinks(AcceptanceTester $i) {
 
@@ -106,6 +112,8 @@ class WcmsTestsMenusCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group menus
    */
   public function testHomeMenuLinkWeight(AcceptanceTester $i) {
 
@@ -126,6 +134,8 @@ class WcmsTestsMenusCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group menus
    */
   public function testMenuMain(AcceptanceTester $i) {
 
@@ -166,6 +176,8 @@ class WcmsTestsMenusCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group menus
    */
   public function testMenuMainAccess(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsMultiTypePromoteCest.php b/acceptance/WcmsTestsMultiTypePromoteCest.php
index aff6e19722be8b03b850d159f5bab43d0457f0b6..63b563777d64282f05c5b44c74e586f23258c356 100644
--- a/acceptance/WcmsTestsMultiTypePromoteCest.php
+++ b/acceptance/WcmsTestsMultiTypePromoteCest.php
@@ -21,6 +21,8 @@ class WcmsTestsMultiTypePromoteCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group blocks
    */
   public function testMultiTypePromote(AcceptanceTester $i) {
 
@@ -114,7 +116,10 @@ class WcmsTestsMultiTypePromoteCest {
     $i->waitForText('Multi-type list');
     $i->click('Multi-type list');
     $i->waitforText('Configure block');
+    // Switch the block form iframe.
+    $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
     $i->click('Add block');
+    $i->switchToIFrame();
     $i->click('Save layout');
 
     $content = [
@@ -139,8 +144,11 @@ class WcmsTestsMultiTypePromoteCest {
     $i->waitForText('Multi-type list');
     $i->click('Multi-type list');
     $i->waitforText('Configure block');
+    // Switch the block form iframe.
+    $i->switchToIFrame('iframe[class="lbim-dialog-iframe"]');
     $i->checkOption('input[id*="edit-settings-show-all-items"]');
     $i->click('Add block');
+    $i->switchToIFrame();
     $i->click('Save layout');
 
     // Check that tabs and both promoted and unpromoted items are displayed.
diff --git a/acceptance/WcmsTestsNodeRevisionDeleteCest.php b/acceptance/WcmsTestsNodeRevisionDeleteCest.php
index 4d1394c2d130be941b30c2d3cf4e40528b21bfa9..f710834a2b92d15fb78979f24ef1faa0c0f8590a 100644
--- a/acceptance/WcmsTestsNodeRevisionDeleteCest.php
+++ b/acceptance/WcmsTestsNodeRevisionDeleteCest.php
@@ -10,10 +10,12 @@ use Codeception\Util\Locator;
 class WcmsTestsNodeRevisionDeleteCest {
 
   /**
-   * Tests for diff headers.
+   * Tests for node revision delete.
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group modules
    */
   public function testNodeRevisionDelete(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsOfisCest.php b/acceptance/WcmsTestsOfisCest.php
index a4335782679cdc041b1d8909ed6b7390d073e7e6..4df91edb35490fc563064fc0a19271f2285d2faa 100644
--- a/acceptance/WcmsTestsOfisCest.php
+++ b/acceptance/WcmsTestsOfisCest.php
@@ -12,6 +12,8 @@ class WcmsTestsOfisCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group modules
    */
   public function testOfis(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsPageNotFoundCest.php b/acceptance/WcmsTestsPageNotFoundCest.php
index af9f19d60ee1e1be24231143f9636a1f1d00714a..0769aaadea8fee621566d302862f289165eba4ed 100644
--- a/acceptance/WcmsTestsPageNotFoundCest.php
+++ b/acceptance/WcmsTestsPageNotFoundCest.php
@@ -12,6 +12,8 @@ class WcmsTestsPageNotFoundCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group messaging
    */
   public function testPageNotFound(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsPreviewButtonCest.php b/acceptance/WcmsTestsPreviewButtonCest.php
index a5131469e806c650530995971b0575d995f2178f..97fac6545f82e1386ee91d0433b94272a1842f8f 100644
--- a/acceptance/WcmsTestsPreviewButtonCest.php
+++ b/acceptance/WcmsTestsPreviewButtonCest.php
@@ -12,6 +12,8 @@ class WcmsTestsPreviewButtonCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group miscellaneous
    */
   public function testPreviewButton(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsQuickNodeCloneCest.php b/acceptance/WcmsTestsQuickNodeCloneCest.php
index 094f69500421b7e736d7d46f4f78bd11eb481ee2..b593cd97cacf58cdce75c09e40e363af8efdbf7c 100644
--- a/acceptance/WcmsTestsQuickNodeCloneCest.php
+++ b/acceptance/WcmsTestsQuickNodeCloneCest.php
@@ -12,6 +12,8 @@ class WcmsTestsQuickNodeCloneCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group modules
    */
   public function testQuickNodeClone(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsRealNameCest.php b/acceptance/WcmsTestsRealNameCest.php
index 5a8993ff51db9d107b6237734cebfca3bc074e04..af8d2c421443beb2453af9e1db7fdf9a16f0a905 100644
--- a/acceptance/WcmsTestsRealNameCest.php
+++ b/acceptance/WcmsTestsRealNameCest.php
@@ -12,6 +12,8 @@ class WcmsTestsRealNameCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group users
    */
   public function testRealNameSettings(AcceptanceTester $i) {
 
@@ -32,6 +34,8 @@ class WcmsTestsRealNameCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group users
    */
   public function testRealNameUser(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsRedirectsCest.php b/acceptance/WcmsTestsRedirectsCest.php
index 262a6e5b7cad69baacf7b1f6ae4c0c129e07318c..687b1d1dddc3accae94cc93c428b68a0117e4293 100644
--- a/acceptance/WcmsTestsRedirectsCest.php
+++ b/acceptance/WcmsTestsRedirectsCest.php
@@ -22,6 +22,8 @@ class WcmsTestsRedirectsCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group miscellaneous
    */
   public function testRedirectsPermissions(AcceptanceTester $i) {
 
@@ -56,6 +58,8 @@ class WcmsTestsRedirectsCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group miscellaneous
    */
   public function testRedirectsSettings(AcceptanceTester $i) {
 
@@ -82,6 +86,8 @@ class WcmsTestsRedirectsCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group miscellaneous
    */
   public function testRedirectsUsage(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsRequireOnPublishCest.php b/acceptance/WcmsTestsRequireOnPublishCest.php
index ddf32ade878d6a4e4754242f2de389822329fd89..be538534578783fa18d21c0d60b5964882843c0a 100644
--- a/acceptance/WcmsTestsRequireOnPublishCest.php
+++ b/acceptance/WcmsTestsRequireOnPublishCest.php
@@ -28,6 +28,8 @@ class WcmsTestsRequireOnPublishCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group miscellaneous
    */
   public function testRequireOnPublish(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsRoleOrderCest.php b/acceptance/WcmsTestsRoleOrderCest.php
index abf46c681ea7ed916f6da8ec9e5a83276cd97e20..aebc0569aa05d8448f59b2040288c3aaf008463a 100644
--- a/acceptance/WcmsTestsRoleOrderCest.php
+++ b/acceptance/WcmsTestsRoleOrderCest.php
@@ -12,6 +12,8 @@ class WcmsTestsRoleOrderCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group users
    */
   public function roleOrderTest(AcceptanceTester $i) {
 
@@ -22,8 +24,11 @@ class WcmsTestsRoleOrderCest {
     // Go to roles page and ensure roles in correct order.
     $i->amOnPage('admin/people/roles');
     $i->click('Show row weights');
-    $i->seeOptionIsSelected('#edit-entities-uw-role-content-editor-weight', '4');
-    $i->seeOptionIsSelected('#edit-entities-uw-role-content-author-weight', '5');
+    $i->seeOptionIsSelected('#edit-entities-uw-role-website-lead-weight', '2');
+    $i->seeOptionIsSelected('#edit-entities-uw-role-site-owner-weight', '3');
+    $i->seeOptionIsSelected('#edit-entities-uw-role-site-manager-weight', '4');
+    $i->seeOptionIsSelected('#edit-entities-uw-role-content-editor-weight', '5');
+    $i->seeOptionIsSelected('#edit-entities-uw-role-content-author-weight', '6');
 
     // Go to role settings page and ensure roles in correct order.
     $i->amOnPage('admin/people/role-settings');
diff --git a/acceptance/WcmsTestsSchemaCest.php b/acceptance/WcmsTestsSchemaCest.php
index 77c150dd67c30bd0661141790de8807fe34ac14c..9f081afce63b1f5fcbbcfc2bb2044a0909c3d9fa 100644
--- a/acceptance/WcmsTestsSchemaCest.php
+++ b/acceptance/WcmsTestsSchemaCest.php
@@ -12,6 +12,8 @@ class WcmsTestsSchemaCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group miscellaneous
    */
   public function schemaModulesTest(AcceptanceTester $i) {
 
@@ -38,6 +40,8 @@ class WcmsTestsSchemaCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group miscellaneous
    */
   public function schemaSettingsTest(AcceptanceTester $i) {
 
@@ -92,6 +96,8 @@ class WcmsTestsSchemaCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group miscellaneous
    */
   public function schemaContentTypeFieldsTest(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsServiceHoursCest.php b/acceptance/WcmsTestsServiceHoursCest.php
index c2d6f320a522b04048221b6643d74a2198d0f01f..9afc2e162e55e0f593e47604924c700afca3f782 100644
--- a/acceptance/WcmsTestsServiceHoursCest.php
+++ b/acceptance/WcmsTestsServiceHoursCest.php
@@ -19,6 +19,8 @@ class WcmsTestsServiceHoursCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group custommodules
    */
   public function testServiceHours(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsSpecialAlertCest.php b/acceptance/WcmsTestsSpecialAlertCest.php
index 220ac1db785978889b53efae3b3d4d851be7e159..3bb0d52e2b731a56d012041627cb517331b43cbb 100644
--- a/acceptance/WcmsTestsSpecialAlertCest.php
+++ b/acceptance/WcmsTestsSpecialAlertCest.php
@@ -14,6 +14,8 @@ class WcmsTestsSpecialAlertCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group custommodules
    */
   public function testSpecialAlertConfig(AcceptanceTester $i) {
 
@@ -76,6 +78,8 @@ class WcmsTestsSpecialAlertCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group custommodules
    */
   public function testSpecialAlertBlock(AcceptanceTester $i) {
 
@@ -199,6 +203,8 @@ class WcmsTestsSpecialAlertCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group custommodules
    */
   public function testSpecialAlertsRoles(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsTaxonomiesCest.php b/acceptance/WcmsTestsTaxonomiesCest.php
index eb888892bbbfce628c79e52c635bda6d1cad9fe4..b073df53c1481de623f753a79e756758affdea0d 100644
--- a/acceptance/WcmsTestsTaxonomiesCest.php
+++ b/acceptance/WcmsTestsTaxonomiesCest.php
@@ -14,6 +14,8 @@ class WcmsTestsTaxonomiesCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group basic
    */
   public function taxonomiesTest(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsTestPageCest.php b/acceptance/WcmsTestsTestPageCest.php
index 882267c0061381e8a210bc4778c1a0cb4769f303..67d0c2d6a0b890d2796e0bb0863148a74fdff44b 100644
--- a/acceptance/WcmsTestsTestPageCest.php
+++ b/acceptance/WcmsTestsTestPageCest.php
@@ -26,6 +26,8 @@ class WcmsTestsTestPageCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group basic
    */
   public function frontpageWorks(AcceptanceTester $i) {
 
@@ -39,6 +41,8 @@ class WcmsTestsTestPageCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group basic
    */
   public function testOneH1Tag(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsUrlAliasCest.php b/acceptance/WcmsTestsUrlAliasCest.php
index b3ccb688521693ad55a39f701234097b9158568f..1f8f17a4900b41e65f0069a01ad1a6771b32efa2 100644
--- a/acceptance/WcmsTestsUrlAliasCest.php
+++ b/acceptance/WcmsTestsUrlAliasCest.php
@@ -26,6 +26,8 @@ class WcmsTestsUrlAliasCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group basic
    */
   public function testDefaultGenerateUrlAlias(AcceptanceTester $i) {
 
@@ -53,6 +55,8 @@ class WcmsTestsUrlAliasCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group basic
    */
   public function testGenerateUrlAlias(AcceptanceTester $i) {
 
@@ -173,6 +177,8 @@ class WcmsTestsUrlAliasCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group basic
    */
   public function testUrlAliasErrorMessage(AcceptanceTester $i) {
 
@@ -279,9 +285,11 @@ class WcmsTestsUrlAliasCest {
       }
     }
 
-    // Step through each of the nodes used and delete them.
-    foreach ($this->nodesUsed as $node) {
+    // Step through each of the nodes used and delete them
+    // as well as delete it from the nodes used array.
+    foreach ($this->nodesUsed as $title => $node) {
       $node->delete();
+      unset($this->nodesUsed[$title]);
     }
   }
 
diff --git a/acceptance/WcmsTestsUsersCest.php b/acceptance/WcmsTestsUsersCest.php
index be603b588f663394cd651b1d5291769f282adfa6..61bf159d4fd1b893f84e85549a21d19a1f32ec37 100644
--- a/acceptance/WcmsTestsUsersCest.php
+++ b/acceptance/WcmsTestsUsersCest.php
@@ -15,7 +15,7 @@ class WcmsTestsUsersCest {
    * @param AcceptanceTester $i
    *   The acceptance tester.
    *
-   * @throws Exception
+   * @group users
    */
   public function testAddUwaterlooUser(AcceptanceTester $i) {
 
@@ -61,7 +61,7 @@ class WcmsTestsUsersCest {
    * @param AcceptanceTester $i
    *   The acceptance tester.
    *
-   * @throws Exception
+   * @group users
    */
   public function testCreateUwaterlooUserByRole(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsUwLdapCest.php b/acceptance/WcmsTestsUwLdapCest.php
index 174546f651154c46b9a400951a2f2f291df377e6..d86e8af2c3f1c7c51596784a71049fbc8afa8c7b 100644
--- a/acceptance/WcmsTestsUwLdapCest.php
+++ b/acceptance/WcmsTestsUwLdapCest.php
@@ -14,6 +14,8 @@ class WcmsTestsUwLdapCest {
    *
    * @param AcceptanceTester $i
    *   Acceptance test variable.
+   *
+   * @group users
    */
   public function testUwLdap(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsWebformAccessCest.php b/acceptance/WcmsTestsWebformAccessCest.php
index 5fe82452b6c157bd99fd38f306f97af93f1bd971..d3377ee7fe5f66374a7bcc3db314153677dff741 100644
--- a/acceptance/WcmsTestsWebformAccessCest.php
+++ b/acceptance/WcmsTestsWebformAccessCest.php
@@ -54,7 +54,7 @@ class WcmsTestsWebformAccessCest {
    * @param AcceptanceTester $i
    *   The acceptance tester.
    *
-   * @throws Exception
+   * @group webform
    */
   public function testAccess(AcceptanceTester $i) {
 
@@ -131,6 +131,8 @@ class WcmsTestsWebformAccessCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group webform
    */
   public function testAccessMode(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsWebformElementsCest.php b/acceptance/WcmsTestsWebformElementsCest.php
index 45dca8e07cb72a2a0b2e3f9ac284278f8c59ac69..5b58d1d87de12fbe05282316d06fd512ced3e444 100644
--- a/acceptance/WcmsTestsWebformElementsCest.php
+++ b/acceptance/WcmsTestsWebformElementsCest.php
@@ -54,7 +54,7 @@ class WcmsTestsWebformElementsCest {
    * @param AcceptanceTester $i
    *   The acceptance tester.
    *
-   * @throws Exception
+   * @group webform
    */
   public function testElementsBasic(AcceptanceTester $i) {
 
@@ -71,7 +71,7 @@ class WcmsTestsWebformElementsCest {
    * @param AcceptanceTester $i
    *   The acceptance tester.
    *
-   * @throws Exception
+   * @group webform
    */
   public function testElementsOptions(AcceptanceTester $i) {
 
@@ -88,7 +88,7 @@ class WcmsTestsWebformElementsCest {
    * @param AcceptanceTester $i
    *   The acceptance tester.
    *
-   * @throws Exception
+   * @group webform
    */
   public function testElementsAdvanced(AcceptanceTester $i) {
 
@@ -105,7 +105,7 @@ class WcmsTestsWebformElementsCest {
    * @param AcceptanceTester $i
    *   The acceptance tester.
    *
-   * @throws Exception
+   * @group webform
    */
   public function testElementsComposite(AcceptanceTester $i) {
 
@@ -122,7 +122,7 @@ class WcmsTestsWebformElementsCest {
    * @param AcceptanceTester $i
    *   The acceptance tester.
    *
-   * @throws Exception
+   * @group webform
    */
   public function testElementsDate(AcceptanceTester $i) {
 
@@ -139,7 +139,7 @@ class WcmsTestsWebformElementsCest {
    * @param AcceptanceTester $i
    *   The acceptance tester.
    *
-   * @throws Exception
+   * @group webform
    */
   public function testElementsEntity(AcceptanceTester $i) {
 
@@ -156,7 +156,7 @@ class WcmsTestsWebformElementsCest {
    * @param AcceptanceTester $i
    *   The acceptance tester.
    *
-   * @throws Exception
+   * @group webform
    */
   public function testElementsContainers(AcceptanceTester $i) {
 
diff --git a/acceptance/WcmsTestsWebformSettingsCest.php b/acceptance/WcmsTestsWebformSettingsCest.php
index c706bee71e7de4fabb7ea0b7025d72f63b04cbf8..282149cd90f2d68e96cd8010ff708b5112e9227a 100644
--- a/acceptance/WcmsTestsWebformSettingsCest.php
+++ b/acceptance/WcmsTestsWebformSettingsCest.php
@@ -53,6 +53,8 @@ class WcmsTestsWebformSettingsCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group webform
    */
   public function testCaptcha(AcceptanceTester $i) {
 
@@ -72,6 +74,8 @@ class WcmsTestsWebformSettingsCest {
    *
    * @param AcceptanceTester $i
    *   The acceptance tester.
+   *
+   * @group webform
    */
   public function testCaptchaPresent(AcceptanceTester $i) {
 
@@ -91,7 +95,7 @@ class WcmsTestsWebformSettingsCest {
    * @param AcceptanceTester $i
    *   The acceptance tester.
    *
-   * @throws Exception
+   * @group webform
    */
   public function testSettings(AcceptanceTester $i) {
 
diff --git a/acceptance_norecorder.suite.yml b/acceptance_norecorder.suite.yml
index 7d9cd649eac7a0b4089c179be1a2b99e1152e7e3..076a7f7b7679d139eda2eeb991f18f5531f65d5a 100644
--- a/acceptance_norecorder.suite.yml
+++ b/acceptance_norecorder.suite.yml
@@ -11,6 +11,8 @@ modules:
         url: http://nginx
         browser: chrome
         port: 9515
+        request_timeout: 30
+        wait: 30
         capabilities:
           acceptInsecureCerts: true
           enableVerboseLogging: false
diff --git a/acceptance_recorder.suite.yml b/acceptance_recorder.suite.yml
index e6c1953245f09644934f476dcb38a1bf3dc1b698..9dd369fa58f21e7754c00b13549fab6ccb592aec 100644
--- a/acceptance_recorder.suite.yml
+++ b/acceptance_recorder.suite.yml
@@ -11,6 +11,8 @@ modules:
         url: http://nginx
         browser: chrome
         port: 9515
+        request_timeout: 30
+        wait: 30
         capabilities:
           acceptInsecureCerts: true
           enableVerboseLogging: false
diff --git a/codeception.yml b/codeception.yml
index 5a96943c280d23df16efc6236a42007d9716d6d4..cf49bf7eb13f44748c773104fbf518067c7db434 100644
--- a/codeception.yml
+++ b/codeception.yml
@@ -1,5 +1,6 @@
 settings:
   memory_limit: 2048M
+  shuffle: true
 paths:
     tests: tests
     output: tests/_output
diff --git a/run_tests.sh b/run_tests.sh
index 80b1b7cb5a17d4974e147d3ceb0bdf2b4a89735f..0abe0a7b47a522504987310a3c1369373e536335 100755
--- a/run_tests.sh
+++ b/run_tests.sh
@@ -1,103 +1,132 @@
-rm -rf tests/_output
-rm -rf tests/_data
-
-codecoverage=0
-stepper=0
-debugger=0
-testname=""
+# Set the variables to start.
+endtoend=0;
+stepper=0;
+installsite=0;
+testname="";
 
+# Ensure we are not using the recorder.
 cp tests/acceptance_norecorder.suite.yml tests/acceptance.suite.yml
 
-while getopts 'crsdt:' OPTION; do
+# Get the options from the command line.
+while getopts 'rsiet:' OPTION; do
   case "$OPTION" in
     r)
       cp tests/acceptance_recorder.suite.yml tests/acceptance.suite.yml
       ;;
-    c)
-      codecoverage=1
-      ;;
     s)
       stepper=1
       ;;
-    d)
-      debugger=1
+    i)
+      installsite=1
+      ;;
+    e)
+      endtoend=1
       ;;
     t)
       testname=$OPTARG
       ;;
     ?)
-      echo "script usage: [-c] [-r] [-s] [-d] [-t] <TestName>" >&2
+      echo "script usage: [-rsiet]" >&2
       exit 1
       ;;
   esac
 done
 
-if [ $stepper == 0 ] && [ $codecoverage == 0 ]; then
-  if [ $debugger == 1 ]; then
-    if [ $testname ]; then
-      php vendor/bin/codecept run acceptance $testname --fail-fast --debug
-    else
-      php vendor/bin/codecept run acceptance --fail-fast --debug
-    fi
-  else
-    if [ $testname ]; then
-      php vendor/bin/codecept run acceptance $testname --fail-fast
-    else
-      php vendor/bin/codecept run acceptance --fail-fast
-    fi
-  fi
+# Ensure that we have either end to end or specific test.
+if [[ $endtoend == 0 ]] && [[ $testname == "" ]]; then
+  echo "You must specify a test if not using end to end tests";
+  exit 1;
+fi;
+
+# Remove all the old test data.
+rm -rf tests/_output
+rm -rf tests/_data
+
+if [[ $installsite == 1 ]]; then
+  # Generate a file name for the sql file.
+  sqlfile=$(cat /proc/sys/kernel/random/uuid)
+  sqlfile="$sqlfile.sql"
+
+  # Install a site and get an sql file from site install.
+  echo "*********************************************************"
+  echo "Installing site ..."
+  drush si uw_base_profile --db-url=mysql://drupal:drupal@mariadb/drupal --account-name=wcmsadmin --account-pass=a --site-name="WCMS Test" -y
+  drush sql-dump > "$sqlfile"
+  echo "Done installing site."
+  echo "*********************************************************"
 fi
 
-if [ $stepper == 1 ] && [ $codecoverage == 1 ]; then
-  if [ $debugger == 1 ]; then
-    if [ $testname ]; then
-      php vendor/bin/codecept run acceptance $testname --steps --coverage-html --fail-fast --debug
-    else
-      php vendor/bin/codecept run acceptance --steps --coverage-html --fail-fast --debug
-    fi
-  else
-    if [ $testname ]; then
-      php vendor/bin/codecept run acceptance $testname --steps --coverage-html --fail-fast
-    else
-      php vendor/bin/codecept run acceptance --steps --coverage-html --fail-fast
-    fi
-  fi
-else
-  if [ $stepper == 1 ]; then
-    if [ $debugger == 1 ]; then
-      if [ $testname ]; then
-        php vendor/bin/codecept run acceptance $testname --steps --fail-fast --debug
-      else
-        php vendor/bin/codecept run acceptance --steps --fail-fast --debug
-      fi
-    else
-      if [ $testname ]; then
-        php vendor/bin/codecept run acceptance $testname --steps --fail-fast
-      else
-        php vendor/bin/codecept run acceptance --steps --fail-fast
+if [[ $endtoend == 1 ]]; then
+
+  # Directory to iterate through
+  directory="tests/acceptance"
+
+  # Get the file names of the tests.
+  files=()
+  for file in "$directory"/*; do
+      if [[ -f "$file" ]]; then
+          file="${file//tests\/acceptance\//}"
+          file="${file//\.php/}"
+          files+=("$file")
       fi
-    fi
+  done
+else
+  files=("$testname")
+fi
+
+# Perform the tests using the files.
+for value in "${files[@]}"; do
+  echo "*********************************************************"
+  echo "Current Test: $value"
+  echo "*********************************************************"
+
+  if [[ $endtoend == 1 ]]; then
+    echo "Stopping chrome driver ..."
+    echo "*********************************************************"
+    pgrep chrome | xargs kill -9
   fi
-  if [ $codecoverage == 1 ]; then
-    if [ $debugger == 1 ]; then
-      if [ $testname ]; then
-        php vendor/bin/codecept run acceptance $testname --coverage-html --debug
-      else
-        php vendor/bin/codecept run acceptance --coverage-html --debug
-      fi
-    else
-      if [ $testname ]; then
-        php vendor/bin/codecept run acceptance $testname --coverage-html --fail-fast
-      else
-        php vendor/bin/codecept run acceptance --coverage-html --fail-fast
-      fi
-    fi
+
+  if [[ $installsite == 1 ]]; then
+    echo "Dropping database ..."
+    echo "*********************************************************"
+    drush sql-drop -y
+    echo "Importing database ..."
+    echo "*********************************************************"
+    drush sql-cli < "$sqlfile"
   fi
-fi
 
-files=(tests/_output/*.fail.html)
+  if [[ $endtoend == 1 ]]; then
+    echo "Starting chrome driver ..."
+    echo "*********************************************************"
+    chromedriver --port=9515 --url-base=/wd/hub &
+    echo "Sleeping ..."
+    echo "*********************************************************"
+    sleep 15s
+    echo ""
+  fi
 
-if [ -e "${files[0]}" ]; then
-  sed -i -- 's/link rel\=\"stylesheet\" media\=\"all\" href\=\"\/core/link rel\=\"stylesheet\" media\=\"all\" href\=\"\.\.\/\.\.\/web\/core/g' tests/_output/*.fail.html
-  sed -i -- 's/link rel\=\"stylesheet\" media\=\"all\" href\=\"\/profiles/link rel\=\"stylesheet\" media\=\"all\" href\=\"\.\.\/\.\.\/web\/profiles/g' tests/_output/*.fail.html
-fi
+  echo "*********************************************************"
+  echo "Starting test ... $value"
+  echo "*********************************************************"
+  if [[ $stepper == 1 ]]; then
+    php vendor/bin/codecept run acceptance "$value" --fail-fast --steps
+  else
+    php vendor/bin/codecept run acceptance "$value" --fail-fast
+  fi
+  if [[ $? -ne 0 ]]; then
+    if [[ $installsite == 1 ]]; then
+      rm "$sqlfile"
+    fi
+    echo ""
+    echo "*********************************************************"
+    echo "Test $value failed, done test."
+    echo "*********************************************************"
+    echo ""
+    break
+  fi
+  echo ""
+  echo "*********************************************************"
+  echo "Done test $value."
+  echo "*********************************************************"
+  echo ""
+done