diff --git a/tests/src/FunctionalJavascript/GeneralLmsTest.php b/tests/src/FunctionalJavascript/GeneralLmsTest.php
index 11521897e1cf8c1d490db79954a5244508df893b..0179d5d2ac29261455e88d3f97b7f63e266d3de9 100644
--- a/tests/src/FunctionalJavascript/GeneralLmsTest.php
+++ b/tests/src/FunctionalJavascript/GeneralLmsTest.php
@@ -138,10 +138,10 @@ final class GeneralLmsTest extends WebDriverTestBase {
     foreach ($definitions as $definition) {
       $page->clickLink('Add activity type');
       $this->setFormElementValue('input', 'name', $definition['name']);
-      $page->pressButton('Edit');
+      $this->pressButton('Edit');
       $this->setFormElementValue('input', 'id', $definition['id']);
       $this->setFormElementValue('select', 'pluginId', $definition['id']);
-      $page->pressButton('edit-submit');
+      $this->pressButton('edit-submit');
     }
     foreach ($definitions as $definition) {
       $assert_session->pageTextContains($definition['name']);
@@ -157,7 +157,7 @@ final class GeneralLmsTest extends WebDriverTestBase {
       foreach ($item['values'] as $field => $value) {
         $this->setEntityFormField($field, $value);
       }
-      $page->pressButton('edit-submit');
+      $this->pressButton('edit-submit');
     }
 
     $this->drupalGet(Url::fromRoute('entity.lms_activity.collection'));
@@ -189,7 +189,7 @@ final class GeneralLmsTest extends WebDriverTestBase {
       foreach ($item['values'] as $field => $value) {
         $this->setEntityFormField($field, $value);
       }
-      $page->pressButton('edit-submit');
+      $this->pressButton('edit-submit');
     }
 
     $this->drupalGet(Url::fromRoute('entity.lms_activity.collection'));
@@ -222,7 +222,7 @@ final class GeneralLmsTest extends WebDriverTestBase {
         $this->setEntityFormField($field, $value);
       }
       $this->setLmsReferenceField('activities', $item['activities']);
-      $page->pressButton('edit-submit');
+      $this->pressButton('edit-submit');
     }
     $this->drupalGet(Url::fromRoute('entity.lms_lesson.collection'));
 
@@ -241,7 +241,7 @@ final class GeneralLmsTest extends WebDriverTestBase {
         $this->setEntityFormField($field, $value);
       }
       $this->setLmsReferenceField('lessons', $item['lessons']);
-      $page->pressButton('edit-submit');
+      $this->pressButton('edit-submit');
     }
 
     $this->drupalGet(Url::fromRoute('entity.group.collection'));
@@ -260,7 +260,6 @@ final class GeneralLmsTest extends WebDriverTestBase {
    * Test entity constraints.
    */
   private function testLmsEntityConstraints(): void {
-    $page = $this->getSession()->getPage();
     $assert_session = $this->assertSession();
 
     $this->drupalLogin($this->users['teacher']);
@@ -270,7 +269,7 @@ final class GeneralLmsTest extends WebDriverTestBase {
       'lms_lesson' => $tested_lesson_id,
     ]));
     $this->setEntityFormField('status', FALSE);
-    $page->pressButton('edit-submit');
+    $this->pressButton('edit-submit');
     $course_labels = [];
     foreach ($this->courseData as $course_item) {
       foreach ($course_item['lessons'] as $lesson_item) {
@@ -295,7 +294,7 @@ final class GeneralLmsTest extends WebDriverTestBase {
     ]));
     $this->setEntityFormField('name', $unpublished_activity_name);
     $this->setEntityFormField('status', FALSE);
-    $page->pressButton('edit-submit');
+    $this->pressButton('edit-submit');
     $activity = $this->getEntityByProperties('lms_activity', ['name' => $unpublished_activity_name]);
     $key = \count($this->activityData) + 1;
     $this->activityData[$key] = [
@@ -306,7 +305,7 @@ final class GeneralLmsTest extends WebDriverTestBase {
       'lms_lesson' => $tested_lesson_id,
     ]));
     $this->setLmsReferenceField('activities', [['target_uuid' => $activity->uuid()]]);
-    $page->pressButton('edit-submit');
+    $this->pressButton('edit-submit');
     $assert_session->pageTextContains(\sprintf('The "%s" activity cannot be referenced. Either publish it first or unpublish the parent (this) lesson.', $unpublished_activity_name));
 
     // Cleanup changes.
@@ -329,7 +328,7 @@ final class GeneralLmsTest extends WebDriverTestBase {
       'group' => $course_id,
     ]));
     $page->clickLink('Enroll');
-    $page->pressButton('edit-submit');
+    $this->pressButton('edit-submit');
     $page->clickLink('Start');
 
     foreach ($this->courseData[1]['lessons'] as $lesson_delta => $course_lesson_item) {
@@ -478,7 +477,7 @@ final class GeneralLmsTest extends WebDriverTestBase {
       'group' => $course_id,
     ]));
     $page->clickLink('Enroll');
-    $page->pressButton('edit-submit');
+    $this->pressButton('edit-submit');
     $page->clickLink('Start');
 
     // Try to go to an arbitrary activity.
@@ -517,9 +516,9 @@ final class GeneralLmsTest extends WebDriverTestBase {
         // test method - go back if allowed and resubmit.
         $back_button = $page->findButton('edit-back');
         if ($back_button !== NULL) {
-          $back_button->press();
+          $this->pressButton('edit-back');
           $back_nav_count++;
-          $page->pressButton('edit-submit');
+          $this->pressButton('edit-submit');
         }
 
         $this->answerActivity($activity_item, (int) $lesson_activity_item['max_score'], $this->users['student']->id(), $course_id);
@@ -541,7 +540,7 @@ final class GeneralLmsTest extends WebDriverTestBase {
 
     // Travel all the way back to the first activity.
     for ($i = $activity_count; $i > 1; $i--) {
-      $page->pressButton('edit-back');
+      $this->pressButton('edit-back');
     }
     $assert_session->pageTextContains($first_title);
 
@@ -566,7 +565,7 @@ final class GeneralLmsTest extends WebDriverTestBase {
       'group' => $course_id,
     ]));
     $page->clickLink('Enroll');
-    $page->pressButton('edit-submit');
+    $this->pressButton('edit-submit');
     $start_time = \time();
     $page->clickLink('Start');
 
@@ -628,7 +627,7 @@ final class GeneralLmsTest extends WebDriverTestBase {
     \assert($assert_session instanceof JSWebAssert);
 
     // Add an existing lesson.
-    $page->pressButton('Reference lessons');
+    $this->pressButton('Reference lessons');
     $modal_selector = '[role="dialog"].modal-view-lessons-selection';
     $modal = $assert_session->waitForElementVisible('css', $modal_selector);
     $lesson = $this->getEntityByProperties('lms_lesson', [
@@ -645,7 +644,7 @@ final class GeneralLmsTest extends WebDriverTestBase {
     $assert_session->waitForElementRemoved('css', $modal_selector);
 
     // Create a new lesson.
-    $page->pressButton('Create lesson');
+    $this->pressButton('Create lesson');
     $lesson_modal_selector = '[role="dialog"].modal-entity-lms-lesson';
     $lesson_modal = $assert_session->waitForElementVisible('css', $lesson_modal_selector);
     // Create 2 activities in a nested modal.
@@ -695,7 +694,7 @@ final class GeneralLmsTest extends WebDriverTestBase {
     $assert_session->waitForElementRemoved('css', $parameters_modal_selector);
 
     // Save course, verify data.
-    $page->find('css', '[data-drupal-selector="group-lms-course-add-form"] #edit-submit')->click();
+    $this->pressButton('[data-drupal-selector="group-lms-course-add-form"] #edit-submit', 'css');
     $assert_session->pageTextContains(\sprintf('Course %s has been created', $course_name));
     $course = $this->getEntityByProperties('group', [
       'label' => $course_name,
@@ -785,7 +784,7 @@ final class GeneralLmsTest extends WebDriverTestBase {
     $activity_remove_selector = '[name="remove-lms_activity-' . $activity->id() . '"]';
     $page->find('css', $activity_remove_selector)->click();
     $assert_session->waitForElementRemoved('css', $activity_remove_selector);
-    $page->find('css', '[data-drupal-selector="edit-submit"]')->click();
+    $this->pressButton('[data-drupal-selector="edit-submit"]', 'css');
     $assert_session->pageTextContains(\sprintf('Lesson %s has been updated', $lesson_names[$last_lesson_key]));
     $this->drupalGet(Url::fromRoute('entity.lms_lesson.edit_form', [
       'lms_lesson' => $lesson_id,
@@ -846,7 +845,7 @@ final class GeneralLmsTest extends WebDriverTestBase {
       'group' => $course_id,
     ]));
     $page->clickLink('Enroll');
-    $page->pressButton('edit-submit');
+    $this->pressButton('edit-submit');
     $page->clickLink('Start');
     $this->drupalGet(Url::fromRoute('entity.group.edit_form', [
       'group' => $course_id,
diff --git a/tests/src/LmsTestHelperTrait.php b/tests/src/LmsTestHelperTrait.php
index af42bea24b56f17aa6045c99a34a9861153ab0e7..91bc4f5ae9663527a3ff8c6b73c2efbe97c75859 100644
--- a/tests/src/LmsTestHelperTrait.php
+++ b/tests/src/LmsTestHelperTrait.php
@@ -4,6 +4,7 @@ declare(strict_types=1);
 
 namespace Drupal\Tests\lms;
 
+use Behat\Mink\Element\DocumentElement;
 use Behat\Mink\Element\NodeElement;
 use Drupal\Component\Render\FormattableMarkup;
 use Drupal\Component\Serialization\Yaml;
@@ -80,7 +81,7 @@ trait LmsTestHelperTrait {
     \assert($assert_session instanceof JSWebAssert);
 
     foreach ($values as $item) {
-      $this->getSession()->getPage()->pressButton(\sprintf('Reference %s', $field_name));
+      $this->pressButton(\sprintf('Reference %s', $field_name));
       $modal = $assert_session->waitForElementVisible('css', $modal_view_selector);
       $entity = $this->getEntityByProperties($entity_type, [
         'name' => $this->getItemByUuid($item['target_uuid'], $bag, 'name'),
@@ -216,9 +217,10 @@ trait LmsTestHelperTrait {
         }
         $current++;
         if ($current < $count) {
-          $this->getSession()->getPage()->pressButton('Add another item');
+          $this->pressButton('Add another item');
           $assert_session = $this->assertSession();
           \assert($assert_session instanceof JSWebAssert);
+          $assert_session->assertExpectedAjaxRequest($current);
           $assert_session->waitForElementVisible('css', '[name="' . $field . '_' . $current . '_remove_button"]');
         }
       }
@@ -284,7 +286,6 @@ trait LmsTestHelperTrait {
    * Answer an activity.
    */
   private function answerActivity(array $activity_item, int $max_score, string $student_id, string $course_id): void {
-    $page = $this->getSession()->getPage();
     $uuid = $activity_item['uuid'];
 
     // Long answer.
@@ -390,7 +391,7 @@ trait LmsTestHelperTrait {
       ];
     }
 
-    $page->pressButton('edit-submit');
+    $this->pressButton('edit-submit');
   }
 
   /**
@@ -492,7 +493,7 @@ trait LmsTestHelperTrait {
     $answer_data['score'] = (string) \mt_rand(0, $max_score);
     $page->fillField('score', $answer_data['score']);
     $page->fillField('comment[comment_body][0][value]', \sprintf('Teacher comment to %s', $activity_item['uuid']));
-    $page->pressButton('Evaluate');
+    $this->pressButton('Evaluate');
   }
 
   /**
@@ -665,4 +666,22 @@ trait LmsTestHelperTrait {
     self::assertEmpty($messages, \implode(\PHP_EOL, $messages));
   }
 
+  /**
+   * Checking.
+   */
+  private function pressButton(string $selector, string $type = 'default'): void {
+    $page = $this->getSession()->getPage();
+    $page->pressButton($selector, $type);
+    $assert_session = $this->assertSession();
+    // Wait for a very short time to allow page state to update after clicking.
+    usleep(5000);
+    $this->waitForHelper(10000, fn () =>
+      $this->getSession()->evaluateScript('document.readyState === "complete"')
+    );
+  }
+
+  private function waitForHelper($timeout, $callback) {
+    return $this->getSession()->getPage()->waitFor($timeout / 1000, $callback);
+  }
+
 }