MDL-37750 behat: Using base find* methods

This commit is contained in:
David Monllao
2013-02-08 17:11:27 +08:00
parent d56ae59b47
commit 1f9ffbdbde
5 changed files with 68 additions and 101 deletions
+6 -9
View File
@@ -66,10 +66,6 @@ class behat_course extends behat_base {
*/
public function i_add_to_section_and_i_fill_the_form_with($activity, $section, TableNode $data) {
$activity = $this->fixStepArgument($activity);
$section = $this->fixStepArgument($section);
// The 'I wait until the page is ready' is just in case.
return array(
new Given('I add a "'.$activity.'" to section "'.$section.'"'),
new Given('I fill the moodle form with:', $data),
@@ -81,6 +77,7 @@ class behat_course extends behat_base {
* Opens the activity chooser and opens the activity/resource form page.
*
* @Given /^I add a "(?P<activity_or_resource_string>(?:[^"]|\\")*)" to section "(?P<section_number>\d+)"$/
* @throws ElementNotFoundException Thrown by behat_base::find
* @param string $activity
* @param string $section
*/
@@ -90,14 +87,14 @@ class behat_course extends behat_base {
$section = $this->fixStepArgument($section);
// Clicks add activity or resource section link.
$sectionxpath = "//*[@id='section-" . $section . "']/*/*/*/div[@class='section-modchooser']/*/*";
$section = $this->getSession()->getPage()->find('xpath', $sectionxpath);
$section->click();
$sectionxpath = "//*[@id='section-" . $section . "']/*/*/*/div[@class='section-modchooser']/span/a";
$sectionnode = $this->find('xpath', $sectionxpath);
$sectionnode->click();
// Clicks the selected activity if it exists.
$activityxpath = ".//label[contains(.,'" . $activity . "')]/input";
$activity = $this->getSession()->getPage()->find('xpath', $activityxpath);
$activity->doubleClick();
$activitynode = $this->find('xpath', $activityxpath);
$activitynode->doubleClick();
}
}
+6 -6
View File
@@ -222,7 +222,7 @@ class behat_data_generators extends behat_base {
global $DB;
if (!$id = $DB->get_field('user', 'id', array('username' => $username))) {
throw new Exception('The specified user with username "' . $username . '" does not exists');
throw new Exception('The specified user with username "' . $username . '" does not exist');
}
return $id;
}
@@ -237,7 +237,7 @@ class behat_data_generators extends behat_base {
global $DB;
if (!$id = $DB->get_field('role', 'id', array('shortname' => $roleshortname))) {
throw new Exception('The specified role with shortname"' . $roleshortname . '" does not exists');
throw new Exception('The specified role with shortname"' . $roleshortname . '" does not exist');
}
return $id;
@@ -258,7 +258,7 @@ class behat_data_generators extends behat_base {
}
if (!$id = $DB->get_field('course_categories', 'id', array('idnumber' => $idnumber))) {
throw new Exception('The specified category with idnumber "' . $idnumber . '" does not exists');
throw new Exception('The specified category with idnumber "' . $idnumber . '" does not exist');
}
return $id;
@@ -274,7 +274,7 @@ class behat_data_generators extends behat_base {
global $DB;
if (!$id = $DB->get_field('course', 'id', array('shortname' => $shortname))) {
throw new Exception('The specified course with shortname"' . $shortname . '" does not exists');
throw new Exception('The specified course with shortname"' . $shortname . '" does not exist');
}
return $id;
}
@@ -289,7 +289,7 @@ class behat_data_generators extends behat_base {
global $DB;
if (!$id = $DB->get_field('groups', 'id', array('idnumber' => $idnumber))) {
throw new Exception('The specified group with idnumber "' . $idnumber . '" does not exists');
throw new Exception('The specified group with idnumber "' . $idnumber . '" does not exist');
}
return $id;
}
@@ -304,7 +304,7 @@ class behat_data_generators extends behat_base {
global $DB;
if (!$id = $DB->get_field('groupings', 'id', array('idnumber' => $idnumber))) {
throw new Exception('The specified grouping with idnumber "' . $idnumber . '" does not exists');
throw new Exception('The specified grouping with idnumber "' . $idnumber . '" does not exist');
}
return $id;
}
+35 -59
View File
@@ -48,19 +48,22 @@ class behat_forms extends behat_base {
/**
* Presses button with specified id|name|title|alt|value.
*
* @see Behat\MinkExtension\Context\MinkContext
* @When /^I press "(?P<button_string>(?:[^"]|\\")*)"$/
* @throws ElementNotFoundException Thrown by behat_base::find
*/
public function press_button($button) {
$button = $this->fixStepArgument($button);
$this->getSession()->getPage()->pressButton($button);
// Ensures the button is present.
$buttonnode = $this->find_button($button);
$buttonnode->press();
}
/**
* Fills a moodle form with field/value data.
*
* @throws ElementNotFoundException
* @Given /^I fill the moodle form with:$/
* @throws ElementNotFoundException Thrown by behat_base::find
* @param TableNode $data
*/
public function i_fill_the_moodle_form_with(TableNode $data) {
@@ -75,21 +78,8 @@ class behat_forms extends behat_base {
// Removing \\ that escapes " of the steps arguments.
$locator = $this->fixStepArgument($locator);
// Finds the element in the page waiting until it appears (or timeouts)
// otherwise spin() throws exception.
$exception = new ElementNotFoundException(
$this->getSession(), 'form field', 'id|name|label|value', $locator
);
// $context is $this and will be passed to the function by spin().
$args['locator'] = $locator;
// Closure to ensure field($locator) exists.
$fieldnode = $this->spin(
function($context, $args) {
return $context->getSession()->getPage()->findField($args['locator']);
}, $exception, $args
);
// Getting the NodeElement.
$fieldnode = $this->find_field($locator);
// Gets the field type from a parent node.
$field = $this->get_field($fieldnode, $locator);
@@ -103,65 +93,66 @@ class behat_forms extends behat_base {
/**
* Fills in form field with specified id|name|label|value.
*
* @see Behat\MinkExtension\Context\MinkContext
* @When /^I fill in "(?P<field_string>(?:[^"]|\\")*)" with "(?P<value_string>(?:[^"]|\\")*)"$/
* @throws ElementNotFoundException Thrown by behat_base::find
*/
public function fill_field($field, $value) {
$field = $this->fixStepArgument($field);
$value = $this->fixStepArgument($value);
$this->getSession()->getPage()->fillField($field, $value);
$fieldnode = $this->find_field($field);
$fieldnode->setValue($value);
}
/**
* Selects option in select field with specified id|name|label|value.
*
* @see Behat\MinkExtension\Context\MinkContext
* @throws ElementNotFoundException
* @When /^I select "(?P<option_string>(?:[^"]|\\")*)" from "(?P<select_string>(?:[^"]|\\")*)"$/
* @throws ElementNotFoundException Thrown by behat_base::find
*/
public function select_option($option, $select) {
$select = $this->fixStepArgument($select);
$option = $this->fixStepArgument($option);
// We add the click event to deal with autosubmit drop down menus.
$selectnode = $this->getSession()->getPage()->findField($select);
if ($selectnode == null) {
throw new ElementNotFoundException(
$this->getSession(), 'form field', 'id|name|label|value', $select
);
}
$selectnode = $this->find_field($select);
$selectnode->selectOption($option);
// Adding a click as Selenium requires it to fire some JS events.
$selectnode->click();
}
/**
* Checks checkbox with specified id|name|label|value.
*
* @see Behat\MinkExtension\Context\MinkContext
* @When /^I check "(?P<option_string>(?:[^"]|\\")*)"$/
* @throws ElementNotFoundException Thrown by behat_base::find
*/
public function check_option($option) {
$option = $this->fixStepArgument($option);
$this->getSession()->getPage()->checkField($option);
$checkboxnode = $this->find_field($option);
$checkboxnode->check();
}
/**
* Unchecks checkbox with specified id|name|label|value.
*
* @see Behat\MinkExtension\Context\MinkContext
* @When /^I uncheck "(?P<option_string>(?:[^"]|\\")*)"$/
* @throws ElementNotFoundException Thrown by behat_base::find
*/
public function uncheck_option($option) {
$option = $this->fixStepArgument($option);
$this->getSession()->getPage()->uncheckField($option);
$checkboxnode = $this->find_field($option);
$checkboxnode->uncheck();
}
/**
* Checks that the form element field have the specified value.
*
* @throws ElementNotFoundException
* @throws ExpectationException
* @Then /^the "(?P<field_string>(?:[^"]|\\")*)" field should match "(?P<value_string>(?:[^"]|\\")*)" value$/
* @throws ExpectationException
* @throws ElementNotFoundException Thrown by behat_base::find
* @param mixed $locator
* @param mixed $value
*/
@@ -170,12 +161,7 @@ class behat_forms extends behat_base {
$locator = $this->fixStepArgument($locator);
$value = $this->fixStepArgument($value);
$fieldnode = $this->getSession()->getPage()->findField($locator);
if (null === $fieldnode) {
throw new ElementNotFoundException(
$this->getSession(), 'form field', 'id|name|label|value', $locator
);
}
$fieldnode = $this->find_field($locator);
// Gets the field instance.
$field = $this->get_field($fieldnode, $locator);
@@ -192,8 +178,8 @@ class behat_forms extends behat_base {
/**
* Checks, that checkbox with specified in|name|label|value is checked.
*
* @see Behat\MinkExtension\Context\MinkContext
* @Then /^the "(?P<checkbox_string>(?:[^"]|\\")*)" checkbox should be checked$/
* @see Behat\MinkExtension\Context\MinkContext
*/
public function assert_checkbox_checked($checkbox) {
$checkbox = $this->fixStepArgument($checkbox);
@@ -203,8 +189,8 @@ class behat_forms extends behat_base {
/**
* Checks, that checkbox with specified in|name|label|value is unchecked.
*
* @see Behat\MinkExtension\Context\MinkContext
* @Then /^the "(?P<checkbox_string>(?:[^"]|\\")*)" checkbox should not be checked$/
* @see Behat\MinkExtension\Context\MinkContext
*/
public function assert_checkbox_not_checked($checkbox) {
$checkbox = $this->fixStepArgument($checkbox);
@@ -214,9 +200,9 @@ class behat_forms extends behat_base {
/**
* Checks, that given select box contains the specified option.
*
* @throws ExpectationException
* @throws ElementNotFoundException
* @Then /^the "(?P<select_string>(?:[^"]|\\")*)" select box should contain "(?P<option_string>(?:[^"]|\\")*)"$/
* @throws ExpectationException
* @throws ElementNotFoundException Thrown by behat_base::find
* @param string $select The select element name
* @param string $option The option text/value
*/
@@ -225,12 +211,7 @@ class behat_forms extends behat_base {
$select = $this->fixStepArgument($select);
$option = $this->fixStepArgument($option);
$selectnode = $this->getSession()->getPage()->findField($select);
if ($selectnode == null) {
throw new ElementNotFoundException(
$this->getSession(), 'form field', 'id|name|label|value', $select
);
}
$selectnode = $this->find_field($select);
$regex = '/' . preg_quote($option, '/') . '/ui';
if (!preg_match($regex, $selectnode->getText())) {
@@ -245,9 +226,9 @@ class behat_forms extends behat_base {
/**
* Checks, that given select box does not contain the specified option.
*
* @throws ExpectationException
* @throws ElementNotFoundException
* @Then /^the "(?P<select_string>(?:[^"]|\\")*)" select box should not contain "(?P<option_string>(?:[^"]|\\")*)"$/
* @throws ExpectationException
* @throws ElementNotFoundException Thrown by behat_base::find
* @param string $select The select element name
* @param string $option The option text/value
*/
@@ -256,12 +237,7 @@ class behat_forms extends behat_base {
$select = $this->fixStepArgument($select);
$option = $this->fixStepArgument($option);
$selectnode = $this->getSession()->getPage()->findField($select);
if ($selectnode == null) {
throw new ElementNotFoundException(
$this->getSession(), 'form field', 'id|name|label|value', $select
);
}
$selectnode = $this->find_field($select);
$regex = '/' . preg_quote($option, '/') . '/ui';
if (preg_match($regex, $selectnode->getText())) {
+18 -25
View File
@@ -47,7 +47,6 @@ class behat_general extends behat_base {
/**
* Opens Moodle homepage.
*
* @see Behat\MinkExtension\Context\MinkContext
* @Given /^I am on homepage$/
*/
public function i_am_on_homepage() {
@@ -57,12 +56,14 @@ class behat_general extends behat_base {
/**
* Clicks link with specified id|title|alt|text.
*
* @see Behat\MinkExtension\Context\MinkContext
* @When /^I follow "(?P<link_string>(?:[^"]|\\")*)"$/
* @throws ElementNotFoundException Thrown by behat_base::find
*/
public function click_link($link) {
$link = $this->fixStepArgument($link);
$this->getSession()->getPage()->clickLink($link);
$linknode = $this->find_link($link);
$linknode->click();
}
/**
@@ -87,16 +88,17 @@ class behat_general extends behat_base {
/**
* Mouse over a CSS element.
*
* @throws ExpectationException
* @see Sanpi/Behatch/Context/BrowserContext.php
* @When /^I hover "(?P<element_string>(?:[^"]|\\")*)"$/
* @throws ExpectationException Thrown by behat_base::find
* @param string $element
*/
public function i_hover($element) {
$node = $this->getSession()->getPage()->find('css', $element);
if ($node === null) {
throw new ExpectationException('The hovered element "' . $element . '" was not found anywhere in the page', $this->getSession());
}
$exception = new ExpectationException(
'The hovered element "' . $element . '" was not found anywhere in the page', $this->getSession()
);
$node = $this->find('css', $element, $exception);
$node->mouseOver();
}
@@ -126,7 +128,6 @@ class behat_general extends behat_base {
* @Then /^I should see "(?P<text_string>(?:[^"]|\\")*)" in the "(?P<element_string>(?:[^"]|\\")*)" element$/
*/
public function assert_element_contains_text($element, $text) {
$element = $this->fixStepArgument($element);
$this->assertSession()->elementTextContains('css', $element, $this->fixStepArgument($text));
}
@@ -136,26 +137,20 @@ class behat_general extends behat_base {
* @Then /^I should not see "(?P<text_string>(?:[^"]|\\")*)" in the "(?P<element_string>(?:[^"]|\\")*)" element$/
*/
public function assert_element_not_contains_text($element, $text) {
$element = $this->fixStepArgument($element);
$this->assertSession()->elementTextNotContains('css', $element, $this->fixStepArgument($text));
}
/**
* Checks, that element with given CSS is disabled.
*
* @throws ExpectationException
* @see Sanpi/Behatch/Context/BrowserContext
* @Then /^the element "(?P<element_string>(?:[^"]|\\")*)" should be disabled$/
* @throws ExpectationException Thrown by behat_base::find
* @param string $element
*/
public function the_element_should_be_disabled($element) {
$element = $this->fixStepArgument($element);
$node = $this->getSession()->getPage()->find('css', $element);
if ($node == null) {
throw new ExpectationException('There is no "' . $element . '" element', $this->getSession());
}
$exception = new ExpectationException('There is no "' . $element . '" element', $this->getSession());
$node = $this->find('css', $element, $exception);
if (!$node->hasAttribute('disabled')) {
throw new ExpectationException('The element "' . $element . '" is not disabled', $this->getSession());
@@ -165,16 +160,14 @@ class behat_general extends behat_base {
/**
* Checks, that element with given CSS is enabled.
*
* @throws ExpectationException
* @see Sanpi/Behatch/Context/BrowserContext.php
* @Then /^the element "(?P<element_string>(?:[^"]|\\")*)" should be enabled$/
* @throws ExpectationException Thrown by behat_base::find
* @param string $element
*/
public function the_element_should_be_enabled($element) {
$node = $this->getSession()->getPage()->find('css', $element);
if ($node == null) {
throw new ExpectationException('There is no "' . $element . '" element', $this->getSession());
}
$exception = new ExpectationException('There is no "' . $element . '" element', $this->getSession());
$node = $this->find('css', $element, $exception);
if ($node->hasAttribute('disabled')) {
throw new ExpectationException('The element "' . $element . '" is not enabled', $this->getSession());
+3 -2
View File
@@ -40,8 +40,9 @@ class behat_navigation extends behat_base {
/**
* Expands the selected node of the navigation tree that matches the text.
*
* @Given /^I expand "(?P<nodetext_string>(?:[^"]|\\")*)" node$/
*
* @throws ElementNotFoundException Thrown by behat_base::find
* @param string $nodetext
*/
public function i_expand_node($nodetext) {
@@ -53,7 +54,7 @@ class behat_navigation extends behat_base {
/descendant::p[contains(concat(' ', normalize-space(@class), ' '), ' branch')]
/descendant::span[contains(concat(' ', normalize-space(.), ' '), '" . $nodetext . "')]";
$node = $this->getSession()->getPage()->find('xpath', $xpath);
$node = $this->find('xpath', $xpath);
$node->click();
}