diff --git a/panels_ipe/tests/src/FunctionalJavascript/PanelsIPETestBase.php b/panels_ipe/tests/src/FunctionalJavascript/PanelsIPETestBase.php
index 9a67f9b..d0ab4c5 100644
--- a/panels_ipe/tests/src/FunctionalJavascript/PanelsIPETestBase.php
+++ b/panels_ipe/tests/src/FunctionalJavascript/PanelsIPETestBase.php
@@ -2,12 +2,12 @@
 
 namespace Drupal\Tests\panels_ipe\FunctionalJavascript;
 
-use Drupal\FunctionalJavascriptTests\JavascriptTestBase;
+use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
 
 /**
  * Base class which runs through standard Panels IPE test routines.
  */
-abstract class PanelsIPETestBase extends JavascriptTestBase {
+abstract class PanelsIPETestBase extends WebDriverTestBase {
 
   use PanelsIPETestTrait;
 
diff --git a/panels_ipe/tests/src/FunctionalJavascript/PanelsIPETestTrait.php b/panels_ipe/tests/src/FunctionalJavascript/PanelsIPETestTrait.php
index ea75076..6f39e7c 100644
--- a/panels_ipe/tests/src/FunctionalJavascript/PanelsIPETestTrait.php
+++ b/panels_ipe/tests/src/FunctionalJavascript/PanelsIPETestTrait.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\panels_ipe\FunctionalJavascript;
 
+use Behat\Mink\Driver\Selenium2Driver;
 use Symfony\Component\CssSelector\CssSelectorConverter;
 
 /**
@@ -62,11 +63,18 @@ trait PanelsIPETestTrait {
    * Breaks the lock of an IPE session.
    */
   protected function breakLock() {
+    $session = $this->getSession();
+
     // Click the "Locked" tab.
     $selector = '[data-tab-id="locked"]:not(.active)';
-    $inactive_tab = $this->getSession()->getPage()->find('css', $selector);
+    $inactive_tab = $session->getPage()->find('css', $selector);
     if ($inactive_tab) {
       $this->click($selector);
+
+      $driver = $session->getDriver();
+      if ($driver instanceof Selenium2Driver) {
+        $driver->getWebDriverSession()->accept_alert();
+      }
     }
   }
 
@@ -97,6 +105,13 @@ trait PanelsIPETestTrait {
     // Wait for the form to load/submit.
     $this->waitUntilNotPresent('.ipe-icon-loading');
 
+    // In Drupal 8.8 and later, the layout may have settings of its own. If this
+    // is the case, submit the layout settings form with no changes.
+    $button = $this->getSession()->getPage()->findButton('Change Layout');
+    if ($button) {
+      $button->press();
+    }
+
     // Wait for the edit tab to become active (happens automatically after
     // form submit).
     $this->waitUntilVisible('[data-tab-id="edit"].active');
diff --git a/tests/src/Unit/panels_ipe/RemoveBlockRequestHandlerTest.php b/panels_ipe/tests/src/Unit/RemoveBlockRequestHandlerTest.php
similarity index 96%
rename from tests/src/Unit/panels_ipe/RemoveBlockRequestHandlerTest.php
rename to panels_ipe/tests/src/Unit/RemoveBlockRequestHandlerTest.php
index 9eda8c7..8d8e966 100644
--- a/tests/src/Unit/panels_ipe/RemoveBlockRequestHandlerTest.php
+++ b/panels_ipe/tests/src/Unit/RemoveBlockRequestHandlerTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\panels\Unit\panels_ipe;
+namespace Drupal\Tests\panels_ipe\Unit;
 
 use Drupal\panels_ipe\Helpers\RemoveBlockRequestHandler;
 use Symfony\Component\HttpFoundation\JsonResponse;
diff --git a/tests/src/Unit/panels_ipe/RequestHandlerTestBase.php b/panels_ipe/tests/src/Unit/RequestHandlerTestBase.php
similarity index 100%
rename from tests/src/Unit/panels_ipe/RequestHandlerTestBase.php
rename to panels_ipe/tests/src/Unit/RequestHandlerTestBase.php
diff --git a/tests/src/Unit/panels_ipe/UpdateLayoutRequestHandlerTest.php b/panels_ipe/tests/src/Unit/UpdateLayoutRequestHandlerTest.php
similarity index 98%
rename from tests/src/Unit/panels_ipe/UpdateLayoutRequestHandlerTest.php
rename to panels_ipe/tests/src/Unit/UpdateLayoutRequestHandlerTest.php
index a068468..499a75d 100644
--- a/tests/src/Unit/panels_ipe/UpdateLayoutRequestHandlerTest.php
+++ b/panels_ipe/tests/src/Unit/UpdateLayoutRequestHandlerTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\panels\Unit\panels_ipe;
+namespace Drupal\Tests\panels_ipe\Unit;
 
 use Drupal\Component\Serialization\Json;
 use Drupal\Core\Block\BlockBase;
diff --git a/src/Tests/PageManagerPanelsStorageIntegrationTest.php b/tests/src/Functional/PageManagerPanelsStorageIntegrationTest.php
similarity index 83%
rename from src/Tests/PageManagerPanelsStorageIntegrationTest.php
rename to tests/src/Functional/PageManagerPanelsStorageIntegrationTest.php
index d4014f3..17257ae 100644
--- a/src/Tests/PageManagerPanelsStorageIntegrationTest.php
+++ b/tests/src/Functional/PageManagerPanelsStorageIntegrationTest.php
@@ -1,16 +1,16 @@
 <?php
 
-namespace Drupal\panels\Tests;
+namespace Drupal\Tests\panels\Functional;
 
 use Drupal\page_manager\Entity\PageVariant;
-use Drupal\simpletest\WebTestBase;
+use Drupal\Tests\BrowserTestBase;
 
 /**
  * Tests integration between Page Manager and Panels Storage.
  *
  * @group panels
  */
-class PageManagerPanelsStorageIntegrationTest extends WebTestBase {
+class PageManagerPanelsStorageIntegrationTest extends BrowserTestBase {
 
   /**
    * {@inheritdoc}
@@ -61,6 +61,13 @@ class PageManagerPanelsStorageIntegrationTest extends WebTestBase {
     ];
     $this->drupalPostForm(NULL, $edit, 'Next');
 
+    // In Drupal 8.8 and later, the layout may have settings of its own. If
+    // that's the case, submit the layout settings form without any changes.
+    $form = $this->getSession()->getPage()->find('css', '#panels-layout-settings-form');
+    if ($form) {
+      $form->pressButton('Next');
+    }
+
     // Finish without adding any blocks.
     $this->drupalPostForm(NULL, [], 'Finish');
 
diff --git a/src/Tests/PanelsConfigSchemaTest.php b/tests/src/Functional/PanelsConfigSchemaTest.php
similarity index 88%
rename from src/Tests/PanelsConfigSchemaTest.php
rename to tests/src/Functional/PanelsConfigSchemaTest.php
index 980e9aa..2baba75 100644
--- a/src/Tests/PanelsConfigSchemaTest.php
+++ b/tests/src/Functional/PanelsConfigSchemaTest.php
@@ -1,16 +1,15 @@
 <?php
 
-namespace Drupal\panels\Tests;
+namespace Drupal\Tests\panels\Functional;
 
-use Drupal\KernelTests\KernelTestBase;
-use Drupal\simpletest\WebTestBase;
+use Drupal\Tests\BrowserTestBase;
 
 /**
  * Tests validating config in the Panels display manager.
  *
  * @group panels
  */
-class PanelsConfigSchemaTest extends WebTestBase {
+class PanelsConfigSchemaTest extends BrowserTestBase {
 
   /**
    * {@inheritdoc}
diff --git a/src/Tests/PanelsTest.php b/tests/src/Functional/PanelsTest.php
similarity index 96%
rename from src/Tests/PanelsTest.php
rename to tests/src/Functional/PanelsTest.php
index 603bd73..9204576 100644
--- a/src/Tests/PanelsTest.php
+++ b/tests/src/Functional/PanelsTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\panels\Tests;
+namespace Drupal\Tests\panels\Functional;
 
-use Drupal\simpletest\WebTestBase;
+use Drupal\Tests\BrowserTestBase;
 use Drupal\user\Entity\User;
 
 /**
@@ -10,7 +10,7 @@ use Drupal\user\Entity\User;
  *
  * @group panels
  */
-class PanelsTest extends WebTestBase {
+class PanelsTest extends BrowserTestBase {
 
   /**
    * {@inheritdoc}
