function WebAssert::buildStatusMessageSelector
Same name in other branches
- 10 core/tests/Drupal/Tests/WebAssert.php \Drupal\Tests\WebAssert::buildStatusMessageSelector()
- 11.x core/tests/Drupal/Tests/WebAssert.php \Drupal\Tests\WebAssert::buildStatusMessageSelector()
Builds a xpath selector for a message with given type and text.
The selector is designed to work with the status-messages.html.twig template in the system module.
See Drupal\Core\Render\Element\StatusMessages for aria label definition.
Parameters
string|null $message: The optional message or partial message to assert.
string|null $type: The optional message type: status, error, or warning.
Return value
string The xpath selector for the message.
Throws
\InvalidArgumentException Thrown when $type is not an allowed type.
5 calls to WebAssert::buildStatusMessageSelector()
- JSWebAssert::buildJavascriptStatusMessageSelector in core/
tests/ Drupal/ FunctionalJavascriptTests/ JSWebAssert.php - Builds a xpath selector for a message with given type and text.
- WebAssert::statusMessageContains in core/
tests/ Drupal/ Tests/ WebAssert.php - Asserts that a status message containing a given string exists.
- WebAssert::statusMessageExists in core/
tests/ Drupal/ Tests/ WebAssert.php - Asserts that a status message exists.
- WebAssert::statusMessageNotContains in core/
tests/ Drupal/ Tests/ WebAssert.php - Asserts that a status message containing a given string does not exist.
- WebAssert::statusMessageNotExists in core/
tests/ Drupal/ Tests/ WebAssert.php - Asserts that a status message does not exist.
File
-
core/
tests/ Drupal/ Tests/ WebAssert.php, line 1215
Class
- WebAssert
- Defines a class with methods for asserting presence of elements during tests.
Namespace
Drupal\TestsCode
protected function buildStatusMessageSelector(string $message = NULL, string $type = NULL) : string {
$allowed_types = [
'status',
'error',
'warning',
NULL,
];
if (!in_array($type, $allowed_types, TRUE)) {
throw new \InvalidArgumentException(sprintf("If a status message type is specified, the allowed values are 'status', 'error', 'warning'. The value provided was '%s'.", $type));
}
$selector = '//div[@data-drupal-messages]';
$aria_label = NULL;
switch ($type) {
case 'status':
$aria_label = 'Status message';
break;
case 'error':
$aria_label = 'Error message';
break;
case 'warning':
$aria_label = 'Warning message';
}
if ($message && $aria_label && $type) {
$selector = $this->buildXPathQuery($selector . '//div[(contains(@aria-label, :aria_label) or contains(@aria-labelledby, :type)) and contains(., :message)]', [
// Value of the 'aria-label' attribute, used in Seven and Bartik
':aria_label' => $aria_label,
// Value of the 'aria-labelledby' attribute, used in Claro and Olivero.
':type' => $type,
':message' => $message,
]);
}
elseif ($message) {
$selector = $this->buildXPathQuery($selector . '//div[contains(., :message)]', [
':message' => $message,
]);
}
elseif ($aria_label) {
$selector = $this->buildXPathQuery($selector . '//div[@aria-label=:aria_label]', [
':aria_label' => $aria_label,
]);
}
return $selector;
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.