| @@ 140-177 (lines=38) @@ | ||
| 137 | * |
|
| 138 | * @BeforeStep |
|
| 139 | */ |
|
| 140 | public function handleAjaxBeforeStep(StepEvent $event) |
|
| 141 | { |
|
| 142 | try { |
|
| 143 | $ajaxEnabledSteps = $this->getMainContext()->getAjaxSteps(); |
|
| 144 | $ajaxEnabledSteps = implode('|', array_filter($ajaxEnabledSteps)); |
|
| 145 | ||
| 146 | if (empty($ajaxEnabledSteps) || !preg_match('/(' . $ajaxEnabledSteps . ')/i', $event->getStep()->getText())) { |
|
| 147 | return; |
|
| 148 | } |
|
| 149 | ||
| 150 | $javascript = <<<JS |
|
| 151 | if ('undefined' !== typeof window.jQuery && 'undefined' !== typeof window.jQuery.fn.on) { |
|
| 152 | window.jQuery(document).on('ajaxStart.ss.test.behaviour', function(){ |
|
| 153 | window.__ajaxStatus = function() { |
|
| 154 | return 'waiting'; |
|
| 155 | }; |
|
| 156 | }); |
|
| 157 | window.jQuery(document).on('ajaxComplete.ss.test.behaviour', function(e, jqXHR){ |
|
| 158 | if (null === jqXHR.getResponseHeader('X-ControllerURL')) { |
|
| 159 | window.__ajaxStatus = function() { |
|
| 160 | return 'no ajax'; |
|
| 161 | }; |
|
| 162 | } |
|
| 163 | }); |
|
| 164 | window.jQuery(document).on('ajaxSuccess.ss.test.behaviour', function(e, jqXHR){ |
|
| 165 | if (null === jqXHR.getResponseHeader('X-ControllerURL')) { |
|
| 166 | window.__ajaxStatus = function() { |
|
| 167 | return 'success'; |
|
| 168 | }; |
|
| 169 | } |
|
| 170 | }); |
|
| 171 | } |
|
| 172 | JS; |
|
| 173 | $this->getSession()->wait(500); // give browser a chance to process and render response |
|
| 174 | $this->getSession()->executeScript($javascript); |
|
| 175 | } catch (\WebDriver\Exception $e) { |
|
| 176 | $this->logException($e); |
|
| 177 | } |
|
| 178 | } |
|
| 179 | ||
| 180 | /** |
|
| @@ 188-210 (lines=23) @@ | ||
| 185 | * |
|
| 186 | * @AfterStep ~@modal |
|
| 187 | */ |
|
| 188 | public function handleAjaxAfterStep(StepEvent $event) |
|
| 189 | { |
|
| 190 | try { |
|
| 191 | $ajaxEnabledSteps = $this->getMainContext()->getAjaxSteps(); |
|
| 192 | $ajaxEnabledSteps = implode('|', array_filter($ajaxEnabledSteps)); |
|
| 193 | ||
| 194 | if (empty($ajaxEnabledSteps) || !preg_match('/(' . $ajaxEnabledSteps . ')/i', $event->getStep()->getText())) { |
|
| 195 | return; |
|
| 196 | } |
|
| 197 | ||
| 198 | $this->handleAjaxTimeout(); |
|
| 199 | ||
| 200 | $javascript = <<<JS |
|
| 201 | if ('undefined' !== typeof window.jQuery && 'undefined' !== typeof window.jQuery.fn.off) { |
|
| 202 | window.jQuery(document).off('ajaxStart.ss.test.behaviour'); |
|
| 203 | window.jQuery(document).off('ajaxComplete.ss.test.behaviour'); |
|
| 204 | window.jQuery(document).off('ajaxSuccess.ss.test.behaviour'); |
|
| 205 | } |
|
| 206 | JS; |
|
| 207 | $this->getSession()->executeScript($javascript); |
|
| 208 | } catch (\WebDriver\Exception $e) { |
|
| 209 | $this->logException($e); |
|
| 210 | } |
|
| 211 | } |
|
| 212 | ||
| 213 | public function handleAjaxTimeout() |
|