Merge branch 'wip-MDL-56614-fix' of https://github.com/marinaglancy/moodle

This commit is contained in:
Andrew Nicols
2016-12-07 14:56:49 +08:00
2 changed files with 37 additions and 26 deletions
+1 -1
View File
@@ -31,7 +31,7 @@ Feature: Managers can create courses
And I follow "Course 1"
And I follow "Announcements"
And "Add a new topic" "button" should not exist
And "Subscription mode > Forced subscription" "text" should exist in current page administration
And "Forced subscription" "text" should exist in current page administration
Scenario: Create a course from the management interface and return to it
Given the following "courses" exist:
+36 -25
View File
@@ -244,14 +244,15 @@ class behat_navigation extends behat_base {
}
/**
* Finds a node in the Navigation or Administration tree and clicks on it.
* Finds a node in the Navigation or Administration tree
*
* @param string $nodetext
* @param array $parentnodes
* @throws ExpectationException
* @param string $nodetype node type (link or text)
* @return NodeElement|null
* @throws ExpectationException when one of the parent nodes is not found
*/
protected function select_node_in_navigation($nodetext, $parentnodes) {
protected function find_node_in_navigation($nodetext, $parentnodes, $nodetype = 'link') {
// Site admin is different and needs special treatment.
$siteadminstr = get_string('administrationsite');
@@ -317,10 +318,21 @@ class behat_navigation extends behat_base {
// Finally, click on requested node under navigation.
$nodetextliteral = behat_context_helper::escape($nodetext);
$tagname = ($nodetype === 'link') ? 'a' : 'span';
$xpath = "/ul/li/p[contains(concat(' ', normalize-space(@class), ' '), ' tree_item ')]" .
"/a[normalize-space(.)=" . $nodetextliteral . "]";
$nodetoclick = $node->find('xpath', $xpath);
"/{$tagname}[normalize-space(.)=" . $nodetextliteral . "]";
return $node->find('xpath', $xpath);
}
/**
* Finds a node in the Navigation or Administration tree and clicks on it.
*
* @param string $nodetext
* @param array $parentnodes
* @throws ExpectationException
*/
protected function select_node_in_navigation($nodetext, $parentnodes) {
$nodetoclick = $this->find_node_in_navigation($nodetext, $parentnodes);
// Throw exception if no node found.
if (!$nodetoclick) {
throw new ExpectationException('Navigation node "' . $nodetext . '" not found under "' .
@@ -464,24 +476,21 @@ class behat_navigation extends behat_base {
* @throws ExpectationException
* @param string $element The locator of the specified selector.
* This may be a path, for example "Subscription mode > Forced subscription"
* @param string $selectortype The selector type
* @param string $selectortype The selector type (link or text)
* @return void
*/
public function should_exist_in_current_page_administration($element, $selectortype) {
$parentnodes = array_map('trim', explode('>', $element));
$element = array_pop($parentnodes);
// Find the name of the first category of the administration block tree.
$xpath = '//div[contains(@class,\'block_settings\')]//div[@id=\'settingsnav\']/ul/li[1]/p[1]/span';
$node = $this->find('xpath', $xpath);
array_unshift($parentnodes, $node->getText());
$lastnode = array_pop($parentnodes);
foreach ($parentnodes as $parentnode) {
try {
$this->i_expand_node($parentnode);
} catch (ExpectationException $e) {
// Parent node not found.
return;
}
if (!$this->find_node_in_navigation($lastnode, $parentnodes, strtolower($selectortype))) {
throw new ExpectationException(ucfirst($selectortype) . ' "' . $element .
'" not found in current page administration"', $this->getSession());
}
$xpath = '//div[contains(@class,\'block_settings\')]//div[@id=\'settingsnav\']/ul/li[1]';
$this->execute('behat_general::should_exist_in_the', [$element, $selectortype, $xpath, 'xpath_element']);
}
/**
@@ -492,19 +501,21 @@ class behat_navigation extends behat_base {
* @throws ExpectationException
* @param string $element The locator of the specified selector.
* This may be a path, for example "Subscription mode > Forced subscription"
* @param string $selectortype The selector type
* @param string $selectortype The selector type (link or text)
* @return void
*/
public function should_not_exist_in_current_page_administration($element, $selectortype) {
$parentnodes = array_map('trim', explode('>', $element));
$element = array_pop($parentnodes);
// Find the name of the first category of the administration block tree.
$xpath = '//div[contains(@class,\'block_settings\')]//div[@id=\'settingsnav\']/ul/li[1]/p[1]/span';
$node = $this->find('xpath', $xpath);
array_unshift($parentnodes, $node->getText());
$lastnode = array_pop($parentnodes);
foreach ($parentnodes as $parentnode) {
$this->i_expand_node($parentnode);
if ($this->find_node_in_navigation($lastnode, $parentnodes, strtolower($selectortype))) {
throw new ExpectationException(ucfirst($selectortype) . ' "' . $element .
'" found in current page administration"', $this->getSession());
}
$xpath = '//div[contains(@class,\'block_settings\')]//div[@id=\'settingsnav\']/ul/li[1]';
$this->execute('behat_general::should_not_exist_in_the', [$element, $selectortype, $xpath, 'xpath_element']);
}
/**