MDL-76169 behat: Normalise exception message in should (not) steps

These steps have accepted a NodeElement instance as an argument for some
time, but were trying to cast it to string when formulating exception
messages, making it harder to debug and, in the case of the 'should see'
step, not work at all.

This patch introduces a new function to produce a consistent naming for
them.
This commit is contained in:
Andrew Nicols
2022-11-03 21:39:15 +08:00
parent 232ebac338
commit 426ea50861
2 changed files with 21 additions and 2 deletions
+16
View File
@@ -224,6 +224,22 @@ trait behat_session_trait {
];
}
/**
* Get a description of the selector and locator to use in an exception message.
*
* @param string $selector The type of locator
* @param mixed $locator The locator text
* @return string
*/
protected function get_selector_description(string $selector, $locator): string {
if ($selector === 'NodeElement') {
$description = $locator->getText();
return "'{$description}' {$selector}";
}
return "'{$locator}' {$selector}";
}
/**
* Send key presses straight to the currently active element.
*
+5 -2
View File
@@ -1225,7 +1225,8 @@ EOF;
$containernode = $this->find($containerselectortype, $containerelement);
// Specific exception giving info about where can't we find the element.
$locatorexceptionmsg = "{$element} in the {$containerelement} {$containerselectortype}";
$containerdescription = $this->get_selector_description($containerselectortype, $containerelement);
$locatorexceptionmsg = "{$element} not found in the {$containerdescription}}";
$exception = new ElementNotFoundException($this->getSession(), $selectortype, null, $locatorexceptionmsg);
// Looks for the requested node inside the container node.
@@ -1259,8 +1260,10 @@ EOF;
}
// The element was found and should not have been. Throw an exception.
$elementdescription = $this->get_selector_description($selectortype, $element);
$containerdescription = $this->get_selector_description($containerselectortype, $containerelement);
throw new ExpectationException(
"The '{$element}' '{$selectortype}' exists in the '{$containerelement}' '{$containerselectortype}'",
"The {$elementdescription} exists in the {$containerdescription}",
$this->getSession()
);
}