This commit is contained in:
Eloy Lafuente (stronk7) 2015-01-20 17:07:34 +01:00
commit e08f58288a
5 changed files with 67 additions and 38 deletions

View File

@ -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 .

View File

@ -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
);
}
/**

View File

@ -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();

View File

@ -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

View File

@ -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