diff --git a/lib/tests/behat/behat_general.php b/lib/tests/behat/behat_general.php index 904e8b04d64..ba6ccf20847 100644 --- a/lib/tests/behat/behat_general.php +++ b/lib/tests/behat/behat_general.php @@ -1220,7 +1220,20 @@ class behat_general extends behat_base { * @param number $expectedsize the expected file size in bytes. */ public function following_should_download_bytes($link, $expectedsize) { - $result = $this->download_file_from_link($link); + $exception = new ExpectationException('Error while downloading data from ' . $link, $this->getSession()); + + // It will stop spinning once file is downloaded or time out. + $result = $this->spin( + function($context, $args) { + $link = $args['link']; + return $this->download_file_from_link($link); + }, + array('link' => $link), + self::EXTENDED_TIMEOUT, + $exception + ); + + // Check download size. $actualsize = (int)strlen($result); if ($actualsize !== (int)$expectedsize) { throw new ExpectationException('Downloaded data was ' . $actualsize . @@ -1249,7 +1262,21 @@ class behat_general extends behat_base { list($minexpectedsize, $maxexpectedsize) = array($maxexpectedsize, $minexpectedsize); } - $result = $this->download_file_from_link($link); + $exception = new ExpectationException('Error while downloading data from ' . $link, $this->getSession()); + + // It will stop spinning once file is downloaded or time out. + $result = $this->spin( + function($context, $args) { + $link = $args['link']; + + return $this->download_file_from_link($link); + }, + array('link' => $link), + self::EXTENDED_TIMEOUT, + $exception + ); + + // Check download size. $actualsize = (int)strlen($result); if ($actualsize < $minexpectedsize || $actualsize > $maxexpectedsize) { throw new ExpectationException('Downloaded data was ' . $actualsize . diff --git a/mod/workshop/allocation/manual/tests/behat/behat_workshopallocation_manual.php b/mod/workshop/allocation/manual/tests/behat/behat_workshopallocation_manual.php index 18579cbf806..99b861374e4 100644 --- a/mod/workshop/allocation/manual/tests/behat/behat_workshopallocation_manual.php +++ b/mod/workshop/allocation/manual/tests/behat/behat_workshopallocation_manual.php @@ -51,32 +51,40 @@ class behat_workshopallocation_manual extends behat_base { * @param string $participantname */ public function i_add_a_reviewer_for_workshop_participant($reviewername, $participantname) { - $participantnameliteral = $this->getSession()->getSelectorsHandler()->xpathLiteral($participantname); - $xpathtd = "//table[contains(concat(' ', normalize-space(@class), ' '), ' allocations ')]/". - "tbody/tr[./td[contains(concat(' ', normalize-space(@class), ' '), ' peer ')]". - "[contains(.,$participantnameliteral)]]/". - "td[contains(concat(' ', normalize-space(@class), ' '), ' reviewedby ')]"; - $xpathselect = $xpathtd . "/descendant::select"; - try { - $selectnode = $this->find('xpath', $xpathselect); - } catch (Exception $ex) { - $this->find_button(get_string('showallparticipants', 'workshopallocation_manual'))->press(); - $selectnode = $this->find('xpath', $xpathselect); - } - $selectid = $selectnode->getAttribute('id'); - $selectformfield = behat_field_manager::get_form_field($selectnode, $this->getSession()); - $selectformfield->set_value($reviewername); + // It will stop spinning once all reviewer for workshop participants are added or it time out. + $this->spin( + function($context, $args) { + $participantnameliteral = $this->getSession()->getSelectorsHandler()->xpathLiteral($args['participantname']); + $xpathtd = "//table[contains(concat(' ', normalize-space(@class), ' '), ' allocations ')]/". + "tbody/tr[./td[contains(concat(' ', normalize-space(@class), ' '), ' peer ')]". + "[contains(.,$participantnameliteral)]]/". + "td[contains(concat(' ', normalize-space(@class), ' '), ' reviewedby ')]"; + $xpathselect = $xpathtd . "/descendant::select"; + try { + $selectnode = $this->find('xpath', $xpathselect); + } catch (Exception $ex) { + $this->find_button(get_string('showallparticipants', 'workshopallocation_manual'))->press(); + $selectnode = $this->find('xpath', $xpathselect); + } - if (!$this->running_javascript()) { - // Without Javascript we need to press the "Go" button. - $go = $this->getSession()->getSelectorsHandler()->xpathLiteral(get_string('go')); - $this->find('xpath', $xpathtd."/descendant::input[@value=$go]")->click(); - } else { - // With Javascript we just wait for the page to reload and the success string to appear. - $allocatedtext = $this->getSession()->getSelectorsHandler()->xpathLiteral( - get_string('allocationadded', 'workshopallocation_manual')); - $this->find('xpath', "//*[contains(.,$allocatedtext)]"); - } + $selectformfield = behat_field_manager::get_form_field($selectnode, $this->getSession()); + $selectformfield->set_value($args['reviewername']); + + if (!$this->running_javascript()) { + // Without Javascript we need to press the "Go" button. + $go = $this->getSession()->getSelectorsHandler()->xpathLiteral(get_string('go')); + $this->find('xpath', $xpathtd."/descendant::input[@value=$go]")->click(); + } else { + // With Javascript we just wait for the page to reload and the success string to appear. + $allocatedtext = $this->getSession()->getSelectorsHandler()->xpathLiteral( + get_string('allocationadded', 'workshopallocation_manual')); + $this->find('xpath', "//*[contains(.,$allocatedtext)]"); + } + return true; + }, + array('participantname' => $participantname, 'reviewername' => $reviewername), + self::EXTENDED_TIMEOUT + ); } /** diff --git a/question/export.php b/question/export.php index 892cf75b44f..44350bd526a 100644 --- a/question/export.php +++ b/question/export.php @@ -73,7 +73,10 @@ if ($from_form = $export_form->get_data()) { echo get_string('yourfileshoulddownload', 'question', $export_url->out()); echo $OUTPUT->box_end(); - $PAGE->requires->js_function_call('document.location.replace', array($export_url->out(false)), false, 1); + // Don't allow force download for behat site, as pop-up can't be handled by selenium. + if (!defined('BEHAT_SITE_RUNNING')) { + $PAGE->requires->js_function_call('document.location.replace', array($export_url->out(false)), false, 1); + } echo $OUTPUT->continue_button(new moodle_url('edit.php', $thispageurl->params())); echo $OUTPUT->footer(); diff --git a/question/format/gift/tests/behat/import_export.feature b/question/format/gift/tests/behat/import_export.feature index 11ad3bffcb9..075e1ec585b 100644 --- a/question/format/gift/tests/behat/import_export.feature +++ b/question/format/gift/tests/behat/import_export.feature @@ -34,8 +34,4 @@ Feature: Test importing questions from GIFT format. And I set the field "id_format_gift" to "1" And I press "Export questions to file" And following "click here" should download between "1550" and "1650" bytes - # If the download step is the last in the scenario then we can sometimes run - # into the situation where the download page causes a http redirect but behat - # has already conducted its reset (generating an error). By putting a logout - # step we avoid behat doing the reset until we are off that page. - And I log out + diff --git a/question/format/xml/tests/behat/import_export.feature b/question/format/xml/tests/behat/import_export.feature index 941c722d0a1..18dcc9bd740 100644 --- a/question/format/xml/tests/behat/import_export.feature +++ b/question/format/xml/tests/behat/import_export.feature @@ -36,11 +36,6 @@ Feature: Test importing questions from Moodle XML format. And I set the field "id_format_xml" to "1" And I press "Export questions to file" And following "click here" should download between "57000" and "58000" bytes - # If the download step is the last in the scenario then we can sometimes run - # into the situation where the download page causes a http redirect but behat - # has already conducted its reset (generating an error). By putting a logout - # step we avoid behat doing the reset until we are off that page. - And I log out @javascript @_file_upload Scenario: import some multiple choice questions from Moodle XML format