<?php namespace Drupal\FunctionalJavascriptTests; use Drupal\Tests\WebAssert; /** * Defines a class with methods for asserting presence of elements during tests. */ class JSWebAssert extends WebAssert { /** * Waits for AJAX request to be completed. * * @param int $timeout * (Optional) Timeout in milliseconds, defaults to 10000. * @param string $message * (optional) A message for exception. * * @throws \RuntimeException * When the request is not completed. If left blank, a default message will * be displayed. */ public function assertWaitOnAjaxRequest($timeout = 10000, $message = 'Unable to complete AJAX request.') { $result = $this->session->wait($timeout, '(typeof(jQuery)=="undefined" || (0 === jQuery.active && 0 === jQuery(\':animated\').length))'); if (!$result) { throw new \RuntimeException($message); } } /** * Waits for the jQuery autocomplete delay duration. * * @see https://api.jqueryui.com/autocomplete/#option-delay */ public function waitOnAutocomplete() { // Drupal is using the default delay value of 300 milliseconds. $this->session->wait(300); $this->assertWaitOnAjaxRequest(); } }