diff --git a/lib/outputrequirementslib.php b/lib/outputrequirementslib.php index 170eea7d4d2..57b802851d3 100644 --- a/lib/outputrequirementslib.php +++ b/lib/outputrequirementslib.php @@ -288,6 +288,9 @@ class page_requirements_manager { if ($CFG->debugdeveloper) { $this->M_cfg['developerdebug'] = true; } + if (defined('BEHAT_SITE_RUNNING')) { + $this->M_cfg['behatsiterunning'] = true; + } // Accessibility stuff. $this->skip_link_to('maincontent', get_string('tocontent', 'access')); diff --git a/lib/tests/behat/behat_hooks.php b/lib/tests/behat/behat_hooks.php index 81285c0717a..401ab5012ae 100644 --- a/lib/tests/behat/behat_hooks.php +++ b/lib/tests/behat/behat_hooks.php @@ -210,15 +210,6 @@ class behat_hooks extends behat_base { self::$initprocessesfinished = true; } - // Closing JS dialogs if present. Otherwise they would block this scenario execution. - if ($this->running_javascript()) { - try { - $session->getDriver()->getWebDriverSession()->accept_alert(); - } catch (NoAlertOpenError $e) { - // All ok, there should not be JS dialogs in theory. - } - } - } /** @@ -368,13 +359,6 @@ class behat_hooks extends behat_base { } catch (NoSuchWindow $e) { // If we were interacting with a popup window it will not exists after closing it. - } catch (UnexpectedAlertOpen $e) { - // We fail the scenario if we find an opened JS alert/confirm, in most of the cases it - // will be there because we are leaving an edited form without submitting/cancelling - // it, but moodle is using JS confirms and we can not just cancel the JS dialog - // as in some cases (delete activity with JS enabled for example) the test writer should - // use extra steps to deal with moodle's behaviour. - throw new Exception('Modal window present. Ensure there are no edited forms pending to submit/cancel.'); } } diff --git a/lib/yui/build/moodle-core-formchangechecker/moodle-core-formchangechecker-debug.js b/lib/yui/build/moodle-core-formchangechecker/moodle-core-formchangechecker-debug.js index 5dffba27b0c..e9763ded56e 100644 --- a/lib/yui/build/moodle-core-formchangechecker/moodle-core-formchangechecker-debug.js +++ b/lib/yui/build/moodle-core-formchangechecker/moodle-core-formchangechecker-debug.js @@ -172,6 +172,11 @@ M.core_formchangechecker.report_form_dirty_state = function(e) { // This is the error message that we'll show to browsers which support it var warningmessage = M.util.get_string('changesmadereallygoaway', 'moodle'); + if (M.cfg.behatsiterunning) { + // If the behat site is running we don't want browser alerts. + return; + } + // Most browsers are happy with the returnValue being set on the event // But some browsers do not consistently pass the event if (e) { diff --git a/lib/yui/build/moodle-core-formchangechecker/moodle-core-formchangechecker-min.js b/lib/yui/build/moodle-core-formchangechecker/moodle-core-formchangechecker-min.js index c928e91f458..30444d2d481 100644 --- a/lib/yui/build/moodle-core-formchangechecker/moodle-core-formchangechecker-min.js +++ b/lib/yui/build/moodle-core-formchangechecker/moodle-core-formchangechecker-min.js @@ -1 +1 @@ -YUI.add("moodle-core-formchangechecker",function(e,t){var n="core-formchangechecker",r=function(){r.superclass.constructor.apply(this,arguments)};e.extend(r,e.Base,{initialvaluelisteners:[],initializer:function(){var t="form#"+this.get("formid"),n=e.one(t);if(!n)return;n.delegate("change",M.core_formchangechecker.set_form_changed,"input",this),n.delegate("change",M.core_formchangechecker.set_form_changed,"textarea",this),n.delegate("change",M.core_formchangechecker.set_form_changed,"select",this),this.initialvaluelisteners.push(n.delegate("focus",this.store_initial_value,"input",this)),this.initialvaluelisteners.push(n.delegate("focus",this.store_initial_value,"textarea",this)),this.initialvaluelisteners.push(n.delegate("focus",this.store_initial_value,"select",this)),e.one(t).on("submit",M.core_formchangechecker.set_form_submitted,this),window.onbeforeunload=M.core_formchangechecker.report_form_dirty_state},store_initial_value:function(e){var t;if(e.target.hasClass("ignoredirty"))return;if(M.core_formchangechecker.get_form_dirty_state()){while(this.initialvaluelisteners.length)t=this.initialvaluelisteners.shift(),t.detach();return}M.core_formchangechecker.stateinformation.focused_element={element:e.target,initial_value:e.target.get("value")}}},{NAME:n,ATTRS:{formid:{value:""}}}),M.core_formchangechecker=M.core_formchangechecker||{},M.core_formchangechecker.instances=M.core_formchangechecker.instances||[],M.core_formchangechecker.init=function(e){var t=new r(e);return M.core_formchangechecker.instances.push(t),t},M.core_formchangechecker.stateinformation=[],M.core_formchangechecker.set_form_changed=function(e){if(e&&e.target&&e.target.hasClass("ignoredirty"))return;M.core_formchangechecker.stateinformation.formchanged=1,delete M.core_formchangechecker.stateinformation.focused_element},M.core_formchangechecker.set_form_submitted=function(){M.core_formchangechecker.stateinformation.formsubmitted=1},M.core_formchangechecker.get_form_dirty_state=function(){var e=M.core_formchangechecker.stateinformation,t;if(e.formsubmitted)return 0;if(e.formchanged)return 1;if(e.focused_element&&e.focused_element.element.get("value")!==e.focused_element.initial_value)return 1;if(typeof tinyMCE!="undefined")for(t in tinyMCE.editors)if(tinyMCE.editors[t].isDirty())return 1;return 0},M.core_formchangechecker.report_form_dirty_state=function(e){if(!M.core_formchangechecker.get_form_dirty_state())return;var t=M.util.get_string("changesmadereallygoaway","moodle");return e&&(e.returnValue=t),t}},"@VERSION@",{requires:["base","event-focus"]}); +YUI.add("moodle-core-formchangechecker",function(e,t){var n="core-formchangechecker",r=function(){r.superclass.constructor.apply(this,arguments)};e.extend(r,e.Base,{initialvaluelisteners:[],initializer:function(){var t="form#"+this.get("formid"),n=e.one(t);if(!n)return;n.delegate("change",M.core_formchangechecker.set_form_changed,"input",this),n.delegate("change",M.core_formchangechecker.set_form_changed,"textarea",this),n.delegate("change",M.core_formchangechecker.set_form_changed,"select",this),this.initialvaluelisteners.push(n.delegate("focus",this.store_initial_value,"input",this)),this.initialvaluelisteners.push(n.delegate("focus",this.store_initial_value,"textarea",this)),this.initialvaluelisteners.push(n.delegate("focus",this.store_initial_value,"select",this)),e.one(t).on("submit",M.core_formchangechecker.set_form_submitted,this),window.onbeforeunload=M.core_formchangechecker.report_form_dirty_state},store_initial_value:function(e){var t;if(e.target.hasClass("ignoredirty"))return;if(M.core_formchangechecker.get_form_dirty_state()){while(this.initialvaluelisteners.length)t=this.initialvaluelisteners.shift(),t.detach();return}M.core_formchangechecker.stateinformation.focused_element={element:e.target,initial_value:e.target.get("value")}}},{NAME:n,ATTRS:{formid:{value:""}}}),M.core_formchangechecker=M.core_formchangechecker||{},M.core_formchangechecker.instances=M.core_formchangechecker.instances||[],M.core_formchangechecker.init=function(e){var t=new r(e);return M.core_formchangechecker.instances.push(t),t},M.core_formchangechecker.stateinformation=[],M.core_formchangechecker.set_form_changed=function(e){if(e&&e.target&&e.target.hasClass("ignoredirty"))return;M.core_formchangechecker.stateinformation.formchanged=1,delete M.core_formchangechecker.stateinformation.focused_element},M.core_formchangechecker.set_form_submitted=function(){M.core_formchangechecker.stateinformation.formsubmitted=1},M.core_formchangechecker.get_form_dirty_state=function(){var e=M.core_formchangechecker.stateinformation,t;if(e.formsubmitted)return 0;if(e.formchanged)return 1;if(e.focused_element&&e.focused_element.element.get("value")!==e.focused_element.initial_value)return 1;if(typeof tinyMCE!="undefined")for(t in tinyMCE.editors)if(tinyMCE.editors[t].isDirty())return 1;return 0},M.core_formchangechecker.report_form_dirty_state=function(e){if(!M.core_formchangechecker.get_form_dirty_state())return;var t=M.util.get_string("changesmadereallygoaway","moodle");if(M.cfg.behatsiterunning)return;return e&&(e.returnValue=t),t}},"@VERSION@",{requires:["base","event-focus"]}); diff --git a/lib/yui/build/moodle-core-formchangechecker/moodle-core-formchangechecker.js b/lib/yui/build/moodle-core-formchangechecker/moodle-core-formchangechecker.js index 5dffba27b0c..e9763ded56e 100644 --- a/lib/yui/build/moodle-core-formchangechecker/moodle-core-formchangechecker.js +++ b/lib/yui/build/moodle-core-formchangechecker/moodle-core-formchangechecker.js @@ -172,6 +172,11 @@ M.core_formchangechecker.report_form_dirty_state = function(e) { // This is the error message that we'll show to browsers which support it var warningmessage = M.util.get_string('changesmadereallygoaway', 'moodle'); + if (M.cfg.behatsiterunning) { + // If the behat site is running we don't want browser alerts. + return; + } + // Most browsers are happy with the returnValue being set on the event // But some browsers do not consistently pass the event if (e) { diff --git a/lib/yui/src/formchangechecker/js/formchangechecker.js b/lib/yui/src/formchangechecker/js/formchangechecker.js index 0aec7ec6d90..0d2bd6393c6 100644 --- a/lib/yui/src/formchangechecker/js/formchangechecker.js +++ b/lib/yui/src/formchangechecker/js/formchangechecker.js @@ -170,6 +170,11 @@ M.core_formchangechecker.report_form_dirty_state = function(e) { // This is the error message that we'll show to browsers which support it var warningmessage = M.util.get_string('changesmadereallygoaway', 'moodle'); + if (M.cfg.behatsiterunning) { + // If the behat site is running we don't want browser alerts. + return; + } + // Most browsers are happy with the returnValue being set on the event // But some browsers do not consistently pass the event if (e) {