MDL-63977 Behat: Make standard login step work for app as well
parent
29bcee1db5
commit
ebe805c843
|
@ -321,20 +321,18 @@ class behat_app extends behat_base {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Logs in as the given user in the app's login screen.
|
* Carries out the login steps for the app, assuming the user is on the app login page. Called
|
||||||
|
* from behat_auth.php.
|
||||||
*
|
*
|
||||||
* Must be run from the app login screen (i.e. immediately after first 'I enter the app').
|
|
||||||
*
|
|
||||||
* @Given /^I log in as "(?P<username_string>(?:[^"]|\\")*)" in the app$/
|
|
||||||
* @param string $username Username (and password)
|
* @param string $username Username (and password)
|
||||||
* @throws DriverException If the main page doesn't load
|
* @throws Exception Any error
|
||||||
*/
|
*/
|
||||||
public function i_log_in_as_username_in_the_app(string $username) {
|
public function login(string $username) {
|
||||||
$this->i_set_the_field_in_the_app('Username', $username);
|
$this->i_set_the_field_in_the_app('Username', $username);
|
||||||
$this->i_set_the_field_in_the_app('Password', $username);
|
$this->i_set_the_field_in_the_app('Password', $username);
|
||||||
|
|
||||||
// Note there are two 'Log in' texts visible (the title and the button) so we have to use
|
// Note there are two 'Log in' texts visible (the title and the button) so we have to use
|
||||||
// the 'near' syntax here.
|
// a 'near' value here.
|
||||||
$this->i_press_near_in_the_app('Log in', 'Forgotten');
|
$this->i_press_near_in_the_app('Log in', 'Forgotten');
|
||||||
|
|
||||||
// Wait until the main page appears.
|
// Wait until the main page appears.
|
||||||
|
@ -398,15 +396,7 @@ class behat_app extends behat_base {
|
||||||
* @throws DriverException If the press doesn't work
|
* @throws DriverException If the press doesn't work
|
||||||
*/
|
*/
|
||||||
public function i_press_in_the_app(string $text) {
|
public function i_press_in_the_app(string $text) {
|
||||||
$this->spin(function($context, $args) use ($text) {
|
$this->press($text);
|
||||||
$result = $this->getSession()->evaluateScript('return window.behatPress("' .
|
|
||||||
addslashes_js($text) . '");');
|
|
||||||
if ($result !== 'OK') {
|
|
||||||
throw new DriverException('Error pressing item - ' . $result);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
$this->wait_for_pending_js();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -422,9 +412,30 @@ class behat_app extends behat_base {
|
||||||
* @throws DriverException If the press doesn't work
|
* @throws DriverException If the press doesn't work
|
||||||
*/
|
*/
|
||||||
public function i_press_near_in_the_app(string $text, string $near) {
|
public function i_press_near_in_the_app(string $text, string $near) {
|
||||||
|
$this->press($text, $near);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clicks on / touches something that is visible in the app, near some other text.
|
||||||
|
*
|
||||||
|
* If the $near is specified then when there are multiple matches, it picks the one
|
||||||
|
* nearest (in DOM terms) $near. $near should be an exact match, or a partial match that only
|
||||||
|
* has one result.
|
||||||
|
*
|
||||||
|
* @param behat_base $base Behat context
|
||||||
|
* @param string $text Text identifying click target
|
||||||
|
* @param string $near Text identifying a nearby unique piece of text
|
||||||
|
* @throws DriverException If the press doesn't work
|
||||||
|
*/
|
||||||
|
protected function press(string $text, string $near = '') {
|
||||||
$this->spin(function($context, $args) use ($text, $near) {
|
$this->spin(function($context, $args) use ($text, $near) {
|
||||||
$result = $this->getSession()->evaluateScript('return window.behatPress("' .
|
if ($near !== '') {
|
||||||
addslashes_js($text) . '", "' . addslashes_js($near) . '");');
|
$nearbit = ', "' . addslashes_js($near) . '"';
|
||||||
|
} else {
|
||||||
|
$nearbit = '';
|
||||||
|
}
|
||||||
|
$result = $context->getSession()->evaluateScript('return window.behatPress("' .
|
||||||
|
addslashes_js($text) . '"' . $nearbit .');');
|
||||||
if ($result !== 'OK') {
|
if ($result !== 'OK') {
|
||||||
throw new DriverException('Error pressing item - ' . $result);
|
throw new DriverException('Error pressing item - ' . $result);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue