From d17de5db94200856f9b45f1db624667e9a65a695 Mon Sep 17 00:00:00 2001 From: Rajesh Taneja Date: Tue, 2 Dec 2014 11:40:33 +0800 Subject: [PATCH] MDL-48374 behat: Check flag before searching for span on page --- lib/tests/behat/behat_general.php | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/lib/tests/behat/behat_general.php b/lib/tests/behat/behat_general.php index ae910a7bdbb..6c52a44c4b2 100644 --- a/lib/tests/behat/behat_general.php +++ b/lib/tests/behat/behat_general.php @@ -67,7 +67,7 @@ class behat_general extends behat_base { * @var $pageloaddetectionrunning boolean Used to ensure that page load detection was started before a page reload * was checked for. */ - private $pageloaddetectionrunning = null; + private $pageloaddetectionrunning = false; /** * Opens Moodle homepage. @@ -1246,15 +1246,18 @@ class behat_general extends behat_base { throw new DriverException('Page load detection requires JavaScript.'); } - if ($this->getSession()->getPage()->find('xpath', $this->get_page_load_xpath())) { + $session = $this->getSession(); + + if ($this->pageloaddetectionrunning || $session->getPage()->find('xpath', $this->get_page_load_xpath())) { // If we find this node at this point we are already watching for a reload and the behat steps // are out of order. We will treat this as an error - really it needs to be fixed as it indicates a problem. - throw new ExpectationException('Page load expectation error: page reloads are already been watched for.'); + throw new ExpectationException( + 'Page load expectation error: page reloads are already been watched for.', $session); } $this->pageloaddetectionrunning = true; - $this->getSession()->evaluateScript( + $session->evaluateScript( 'var span = document.createElement("span"); span.setAttribute("data-rel", "' . self::PAGE_LOAD_DETECTION_STRING . '"); span.setAttribute("style", "display: none;"); @@ -1268,23 +1271,23 @@ class behat_general extends behat_base { * @Given /^a new page should have loaded since I started watching$/ */ public function a_new_page_should_have_loaded_since_i_started_watching() { - // As the node is inserted by code above it is either there or not, and we do not need spin and it is safe - // to use the native API here which is great as exception handling (the alternative is slow). - if ($this->getSession()->getPage()->find('xpath', $this->get_page_load_xpath())) { - // We don't want to find this node, if we do we have an error. + $session = $this->getSession(); + + // Make sure page load tracking was started. + if (!$this->pageloaddetectionrunning) { throw new ExpectationException( - 'Page load expectation error: a new page has not been loaded when it should have been.', - $this->getSession() - ); + 'Page load expectation error: page load tracking was not started.', $session); } - if (!$this->pageloaddetectionrunning) { + // As the node is inserted by code above it is either there or not, and we do not need spin and it is safe + // to use the native API here which is great as exception handling (the alternative is slow). + if ($session->getPage()->find('xpath', $this->get_page_load_xpath())) { + // We don't want to find this node, if we do we have an error. throw new ExpectationException( - 'Page load expectation error: page load tracking was not started.', - $this->getSession()); + 'Page load expectation error: a new page has not been loaded when it should have been.', $session); } - // Cancel the trakcing of pageloaddetectionrunning. + // Cancel the tracking of pageloaddetectionrunning. $this->pageloaddetectionrunning = false; } @@ -1295,6 +1298,12 @@ class behat_general extends behat_base { * @Given /^a new page should not have loaded since I started watching$/ */ public function a_new_page_should_not_have_loaded_since_i_started_watching() { + // Make sure page load tracking was started. + if (!$this->pageloaddetectionrunning) { + throw new ExpectationException( + 'Page load expectation error: page load tracking was not started.', $session); + } + // We use our API here as we can use the exception handling provided by it. $this->find( 'xpath', -- 2.11.4.GIT