Moodle APIs  3.8
Moodle 3.8.6 (Build: 20201109)
Public Member Functions | Static Public Member Functions | Public Attributes | Protected Member Functions | Static Protected Member Functions | List of all members
behat_mod_quiz Class Reference

Steps definitions related to mod_quiz. More...

Inheritance diagram for behat_mod_quiz:
behat_question_base behat_base behat_theme_classic_behat_mod_quiz

Public Member Functions

 __call ($name, $arguments)
 Finds DOM nodes in the page using named selectors. More...
 
 escape ($string)
 Escapes the double quote character. More...
 
 evaluate_script (string $script)
 Evaluate the supplied script in the current session, returning the result. More...
 
 execute_script (string $script)
 Execute the supplied script in the current session. More...
 
 get_sesskey ()
 Get the session key for the current session via Javascript. More...
 
 has_tag (string $tag)
 Checks if the current scenario, or its feature, has a specified tag. More...
 
 i_add_question_to_the_quiz_with ($questiontype, $quizname, TableNode $questiondata)
 Adds a question to the existing quiz with filling the form. More...
 
 i_click_on_shuffle_for_section ($heading)
 Set Shuffle for shuffling questions within sections. More...
 
 i_click_on_the_page_break_icon_after_question ($addorremoves, $questionname)
 Click the add or remove page-break icon after a particular question. More...
 
 i_delete_question_by_clicking_the_delete_icon ($questionname)
 Delete a question on the Edit quiz page by first clicking on the Delete icon, then clicking one of the "After ..." links. More...
 
 i_move_question_after_item_by_clicking_the_move_icon ($questionname, $target)
 Move a question on the Edit quiz page by first clicking on the Move icon, then clicking one of the "After ..." links. More...
 
 i_move_question_after_item_by_dragging ($questionname, $target)
 Move a question on the Edit quiz page by dragging a given question on top of another item. More...
 
 i_open_the_add_to_quiz_menu_for ($pageorlast)
 Open the add menu on a given page, or at the end of the Edit quiz page. More...
 
 i_set_the_max_mark_for_quiz_question ($questionname, $newmark)
 Set the max mark for a question on the Edit quiz page. More...
 
 i_set_the_section_heading_for ($sectionname, $sectionheading)
 Set the section heading for a given section on the Edit quiz page. More...
 
 i_should_not_see_on_quiz_page ($questionname, $pagenumber)
 Check whether a particular question is not on a particular page of the quiz on the Edit quiz page. More...
 
 i_should_see_before_on_the_edit_quiz_page ($firstquestionname, $secondquestionname)
 Check whether one question comes before another on the Edit quiz page. More...
 
 i_should_see_on_quiz_page ($questionname, $pagenumber)
 Check whether a particular question is on a particular page of the quiz on the Edit quiz page. More...
 
 i_should_see_question_in_section_in_the_quiz_navigation ($questionnumber, $sectionheading)
 Check that a given question comes after a given section heading in the quiz navigation block. More...
 
 look_for_exceptions ()
 Internal step definition to find exceptions, debugging() messages and PHP debug messages. More...
 
 normalise_selector (string $selector, $locator, Element $container)
 Normalise the locator and selector. More...
 
 quiz_contains_the_following_questions ($quizname, TableNode $data)
 Put the specified questions on the specified pages of a given quiz. More...
 
 quiz_contains_the_following_sections ($quizname, TableNode $data)
 Put the specified section headings to start at specified pages of a given quiz. More...
 
 should_have_number_on_the_edit_quiz_page ($questionname, $number)
 Check the number displayed alongside a question on the Edit quiz page. More...
 
 shuffle_for_section_should_be ($heading, $value)
 Check the shuffle checkbox for a particular section. More...
 
 the_page_break_icon_after_question_should_exist ($addorremoves, $questionname)
 Assert the add or remove page-break icon after a particular question exists. More...
 
 the_page_break_icon_after_question_should_not_exist ($addorremoves, $questionname)
 Assert the add or remove page-break icon after a particular question does not exist. More...
 
 the_page_break_link_after_question_should_contain ($addorremoves, $questionname, $paramdata)
 Check the add or remove page-break link after a particular question contains the given parameters in its url. More...
 
 user_has_attempted_with_responses ($username, $quizname, TableNode $attemptinfo)
 Attempt a quiz. More...
 
 user_has_checked_answers_in_their_attempt_at_quiz ($username, $quizname, TableNode $attemptinfo)
 Submit answers to questions an existing quiz attempt, with a simulated click on the 'Check' button. More...
 
 user_has_finished_an_attempt_at_quiz ($username, $quizname)
 Finish an existing quiz attempt. More...
 
 user_has_input_answers_in_their_attempt_at_quiz ($username, $quizname, TableNode $attemptinfo)
 Input answers to particular questions an existing quiz attempt, without simulating a click of the 'Check' button, if any. More...
 
 user_has_started_an_attempt_at_quiz ($username, $quizname)
 Start a quiz attempt without answers. More...
 
 user_has_started_an_attempt_at_quiz_with_details ($username, $quizname, TableNode $attemptinfo)
 Start a quiz attempt without answers. More...
 
 wait_for_pending_js ()
 Waits for all the JS to be loaded. More...
 

Static Public Member Functions

static evaluate_script_in_session (Session $session, string $script)
 Evaluate the supplied script in the specified session, returning the result. More...
 
static execute_script_in_session (Session $session, string $script)
 Excecute the supplied script in the specified session. More...
 
static get_exact_named_selectors ()
 Return a list of the exact named selectors for the component. More...
 
static get_extended_timeout ()
 Gets the extended timeout. More...
 
static get_named_replacements ()
 Return a list of the Mink named replacements for the component. More...
 
static get_partial_named_selectors ()
 Return a list of the partial named selectors for the component. More...
 
static get_reduced_timeout ()
 Gets the reduced timeout. More...
 
static get_timeout ()
 Gets the default timeout. More...
 
static set_user ($user=null)
 Set current $USER, reset access cache. More...
 
static wait_for_pending_js_in_session (Session $session)
 Waits for all the JS to be loaded. More...
 

Public Attributes

const EXTENDED_TIMEOUT = 10
 And extended timeout for specific cases. More...
 
const PAGE_READY_JS
 The JS code to check that the page is ready. More...
 
const REDUCED_TIMEOUT = 2
 Small timeout. More...
 
const TIMEOUT = 6
 The timeout for each Behat step (load page, wait for an element to load...). More...
 

Protected Member Functions

 ensure_editors_are_loaded ()
 Ensures that all the page's editors are loaded. More...
 
 ensure_element_does_not_exist ($locator, $selectortype)
 Spins until the element does not exist. More...
 
 ensure_element_exists ($locator, $selectortype)
 Spins around an element until it exists. More...
 
 ensure_element_is_visible ($element, $selectortype)
 Ensures that the provided element is visible and we can interact with it. More...
 
 ensure_node_attribute_is_set ($node, $attribute, $attributevalue)
 Ensures that the provided node has a attribute value set. More...
 
 ensure_node_is_visible ($node)
 Ensures that the provided node is visible and we can interact with it. More...
 
 execute ($contextapi, $params=array())
 Helper function to execute api in a given context. More...
 
 extract_forced_randomisation_from_attempt_info (TableNode $attemptinfo)
 Helper used by user_has_attempted_with_responses, user_has_started_an_attempt_at_quiz_with_details, etc. More...
 
 extract_responses_from_attempt_info (TableNode $attemptinfo)
 Helper used by user_has_attempted_with_responses, user_has_checked_answers_in_their_attempt_at_quiz, user_has_input_answers_in_their_attempt_at_quiz, etc. More...
 
 find ($selector, $locator, $exception=false, $node=false, $timeout=false)
 Returns the first matching element. More...
 
 find_all ($selector, $locator, $exception=false, $container=false, $timeout=false)
 Returns all matching elements. More...
 
 finish_adding_question ($questiontypename, TableNode $questiondata)
 Helper used by } and * behat_mod_quiz::i_add_question_to_the_quiz_with to finish creating(). More...
 
 get_cm_by_quiz_name (string $name)
 Get a quiz cmid from the quiz name. More...
 
 get_debug_text ($html)
 Converts HTML tags to line breaks to display the info in CLI. More...
 
 get_node_in_container ($selectortype, $element, $containerselectortype, $containerelement)
 Gets the requested element inside the specified container. More...
 
 get_quiz_by_name (string $name)
 Get a quiz by name. More...
 
 get_selected_node ($selectortype, $element)
 Gets a NodeElement based on the locator and selector type received as argument from steps definitions. More...
 
 get_session_user ()
 Get the actual user in the behat session (note $USER does not correspond to the behat session's user). More...
 
 get_text_selector_node ($selectortype, $element)
 Gets a NodeElement based on the locator and selector type received as argument from steps definitions. More...
 
 get_xpath_for_shuffle_checkbox ($heading)
 Return the xpath for shuffle checkbox in section heading. More...
 
 get_xpath_page_break_icon_after_question ($addorremoves, $questionname)
 Get the xpath for a partcular add/remove page-break icon. More...
 
 is_in_app ()
 Checks if the current page is part of the mobile app. More...
 
 js_trigger_click ($node)
 Trigger click on node via javascript instead of actually clicking on it via pointer. More...
 
 locate_path ($path)
 Locates url, based on provided path. More...
 
 require_javascript ()
 Require that javascript be available in the current Session. More...
 
 resize_window ($windowsize, $viewport=false)
 Change browser window size. More...
 
 resolve_page_instance_url (string $type, string $identifier)
 Convert page names to URLs for steps like 'When I am on the "[identifier]" "[page type]" page'. More...
 
 resolve_page_url (string $page)
 Convert page names to URLs for steps like 'When I am on the "[page name]" page'. More...
 
 running_javascript ()
 Whether Javascript is available in the current Session. More...
 
 spin ($lambda, $args=false, $timeout=false, $exception=false, $microsleep=false)
 Executes the passed closure until returns true or time outs. More...
 
 transform_selector ($selectortype, $element)
 Transforms from step definition's argument style to Mink format. More...
 
 transform_text_selector ($selectortype, $element)
 Transforms from step definition's argument style to Mink format. More...
 

Static Protected Member Functions

static get_real_timeout (int $timeout)
 Gets the required timeout in seconds. More...
 
static require_javascript_in_session (Session $session)
 Require that javascript be available for the specified Session. More...
 
static running_javascript_in_session (Session $session)
 Whether Javascript is available in the specified Session. More...
 

Detailed Description

Steps definitions related to mod_quiz.

License
http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later

Member Function Documentation

◆ __call()

behat_base::__call (   $name,
  $arguments 
)
inherited

Finds DOM nodes in the page using named selectors.

The point of using this method instead of Mink ones is the spin method of behat_base::find() that looks for the element until it is available or it timeouts, this avoids the false failures received when selenium tries to execute commands on elements that are not ready to be used.

All steps that requires elements to be available before interact with them should use one of the find* methods.

The methods calls requires a {'find_' . $elementtype}($locator) format, like find_link($locator), find_select($locator), find_button($locator)...

@externalurl http://mink.behat.org/#named-selectors

Exceptions
coding_exception
Parameters
string$nameThe name of the called method
mixed$arguments
Return values
NodeElement

◆ ensure_editors_are_loaded()

behat_base::ensure_editors_are_loaded ( )
protectedinherited

Ensures that all the page's editors are loaded.

Deprecated:
since Moodle 2.7 MDL-44084 - please do not use this function any more.
Exceptions
ElementNotFoundException
ExpectationException
Return values
void

◆ ensure_element_does_not_exist()

behat_base::ensure_element_does_not_exist (   $locator,
  $selectortype 
)
protectedinherited

Spins until the element does not exist.

Exceptions
ExpectationException
Parameters
string$locator
string$selectortype
Return values
void

◆ ensure_element_exists()

behat_base::ensure_element_exists (   $locator,
  $selectortype 
)
protectedinherited

Spins around an element until it exists.

Exceptions
ExpectationException
Parameters
string$locator
string$selectortype
Return values
void

◆ ensure_element_is_visible()

behat_base::ensure_element_is_visible (   $element,
  $selectortype 
)
protectedinherited

Ensures that the provided element is visible and we can interact with it.

Returns the node in case other actions are interested in using it.

Exceptions
ExpectationException
Parameters
string$element
string$selectortype
Return values
NodeElementThrows an exception if it times out without being visible

◆ ensure_node_attribute_is_set()

behat_base::ensure_node_attribute_is_set (   $node,
  $attribute,
  $attributevalue 
)
protectedinherited

Ensures that the provided node has a attribute value set.

This step can be used to check if specific JS has finished modifying the node.

Exceptions
ExpectationException
Parameters
NodeElement$node
string$attributeattribute name
string$attributevalueattribute value to check.
Return values
voidThrows an exception if it times out without the element being visible

◆ ensure_node_is_visible()

behat_base::ensure_node_is_visible (   $node)
protectedinherited

Ensures that the provided node is visible and we can interact with it.

Exceptions
ExpectationException
Parameters
NodeElement$node
Return values
voidThrows an exception if it times out without the element being visible

◆ escape()

behat_base::escape (   $string)
inherited

Escapes the double quote character.

Double quote is the argument delimiter, it can be escaped with a backslash, but we auto-remove this backslashes before the step execution, this method is useful when using arguments as arguments for other steps.

Parameters
string$string
Return values
string

◆ evaluate_script()

behat_base::evaluate_script ( string  $script)
inherited

Evaluate the supplied script in the current session, returning the result.

Parameters
string$script
Return values
mixed

◆ evaluate_script_in_session()

static behat_base::evaluate_script_in_session ( Session  $session,
string  $script 
)
staticinherited

Evaluate the supplied script in the specified session, returning the result.

Parameters
Session$session
string$script
Return values
mixed

◆ execute()

behat_base::execute (   $contextapi,
  $params = array() 
)
protectedinherited

Helper function to execute api in a given context.

Parameters
string$contextapicontext in which api is defined.
array$paramslist of params to pass.
Exceptions
Exception

◆ execute_script()

behat_base::execute_script ( string  $script)
inherited

Execute the supplied script in the current session.

No result will be returned.

Parameters
string$script

◆ execute_script_in_session()

static behat_base::execute_script_in_session ( Session  $session,
string  $script 
)
staticinherited

Excecute the supplied script in the specified session.

No result will be returned.

Parameters
Session$session
string$script

◆ extract_forced_randomisation_from_attempt_info()

behat_mod_quiz::extract_forced_randomisation_from_attempt_info ( TableNode  $attemptinfo)
protected

Helper used by user_has_attempted_with_responses, user_has_started_an_attempt_at_quiz_with_details, etc.

Parameters
TableNode$attemptinfodata table from the Behat step
Return values
arraywith two elements, $forcedrandomquestions, $forcedvariants, that can be passed to $quizgenerator->create_attempt.

◆ extract_responses_from_attempt_info()

behat_mod_quiz::extract_responses_from_attempt_info ( TableNode  $attemptinfo)
protected

Helper used by user_has_attempted_with_responses, user_has_checked_answers_in_their_attempt_at_quiz, user_has_input_answers_in_their_attempt_at_quiz, etc.

Parameters
TableNode$attemptinfodata table from the Behat step
Return values
arrayof responses that can be passed to $quizgenerator->submit_responses.

◆ find()

behat_base::find (   $selector,
  $locator,
  $exception = false,
  $node = false,
  $timeout = false 
)
protectedinherited

Returns the first matching element.

@externalurl http://mink.behat.org/#traverse-the-page-selectors

Parameters
string$selectorThe selector type (css, xpath, named...)
mixed$locatorIt depends on the $selector, can be the xpath, a name, a css locator...
Exception$exceptionOtherwise we throw exception with generic info
NodeElement$nodeSpins around certain DOM node instead of the whole page
int$timeoutForces a specific time out (in seconds).
Return values
NodeElement

◆ find_all()

behat_base::find_all (   $selector,
  $locator,
  $exception = false,
  $container = false,
  $timeout = false 
)
protectedinherited

Returns all matching elements.

Adapter to Behat\Mink\Element\Element::findAll() using the spin() method.

@externalurl http://mink.behat.org/#traverse-the-page-selectors

Parameters
string$selectorThe selector type (css, xpath, named...)
mixed$locatorIt depends on the $selector, can be the xpath, a name, a css locator...
Exception$exceptionOtherwise we throw expcetion with generic info
NodeElement$containerRestrict the search to just children of the specified container
int$timeoutForces a specific time out (in seconds). If 0 is provided the default timeout will be applied.
Return values
arrayNodeElements list

◆ finish_adding_question()

behat_question_base::finish_adding_question (   $questiontypename,
TableNode  $questiondata 
)
protectedinherited

Helper used by } and * behat_mod_quiz::i_add_question_to_the_quiz_with to finish creating().

Parameters
string$questiontypenameThe question type name
TableNode$questiondataThe data to fill the question type form

◆ get_cm_by_quiz_name()

behat_mod_quiz::get_cm_by_quiz_name ( string  $name)
protected

Get a quiz cmid from the quiz name.

Parameters
string$namequiz name.
Return values
stdClasscm from get_coursemodule_from_instance.

◆ get_debug_text()

behat_base::get_debug_text (   $html)
protectedinherited

Converts HTML tags to line breaks to display the info in CLI.

Parameters
string$html
Return values
string

◆ get_exact_named_selectors()

static behat_base::get_exact_named_selectors ( )
staticinherited

Return a list of the exact named selectors for the component.

Named selectors are what make Behat steps like Then I should see "Useful text" in the "General" "fieldset" work. Here, "fieldset" is the named selector, and "General" is the locator.

If you override this method in your plugin (e.g. mod_mymod), to define new selectors specific to your plugin. For example, if you returned new behat_component_named_selector('Thingy', [".//some/xpath//img[contains(@alt, %locator%)]/.."]) then Then I should see "Useful text" in the "Whatever" "mod_mymod > Thingy" would work.

This method should return a list of behat_component_named_selector and the docs on that class explain how it works.

Return values
behat_component_named_selector[]

◆ get_extended_timeout()

static behat_base::get_extended_timeout ( )
staticinherited

Gets the extended timeout.

A longer timeout for cases where the normal timeout is not enough.

Return values
intTimeout in seconds

◆ get_named_replacements()

static behat_base::get_named_replacements ( )
staticinherited

Return a list of the Mink named replacements for the component.

Named replacements allow you to define parts of an xpath that can be reused multiple times, or in multiple xpaths.

This method should return a list of behat_component_named_replacement and the docs on that class explain how it works.

Return values
behat_component_named_replacement[]

Reimplemented in behat_message.

◆ get_node_in_container()

behat_base::get_node_in_container (   $selectortype,
  $element,
  $containerselectortype,
  $containerelement 
)
protectedinherited

Gets the requested element inside the specified container.

Exceptions
ElementNotFoundExceptionThrown by behat_base::find
Parameters
mixed$selectortypeThe element selector type.
mixed$elementThe element locator.
mixed$containerselectortypeThe container selector type.
mixed$containerelementThe container locator.
Return values
NodeElement

◆ get_partial_named_selectors()

static behat_base::get_partial_named_selectors ( )
staticinherited

Return a list of the partial named selectors for the component.

Like the exact named selectors above, but the locator only needs to match part of the text. For example, the standard "button" is a partial selector, so: When I click "Save" "button" will activate "Save changes".

Return values
behat_component_named_selector[]

Reimplemented in behat_message.

◆ get_quiz_by_name()

behat_mod_quiz::get_quiz_by_name ( string  $name)
protected

Get a quiz by name.

Parameters
string$namequiz name.
Return values
stdClassthe corresponding DB row.

◆ get_real_timeout()

static behat_base::get_real_timeout ( int  $timeout)
staticprotectedinherited

Gets the required timeout in seconds.

Parameters
int$timeoutOne of the TIMEOUT constants
Return values
intActual timeout (in seconds)

◆ get_reduced_timeout()

static behat_base::get_reduced_timeout ( )
staticinherited

Gets the reduced timeout.

A reduced timeout for cases where self::get_timeout() is too much and a simple $this->getSession()->getPage()->find() could not be enough.

Return values
intTimeout in seconds

◆ get_selected_node()

behat_base::get_selected_node (   $selectortype,
  $element 
)
protectedinherited

Gets a NodeElement based on the locator and selector type received as argument from steps definitions.

Use behat_base::get_text_selector_node() for text-based selectors.

Exceptions
ElementNotFoundExceptionThrown by behat_base::find
Parameters
string$selectortype
string$element
Return values
NodeElement

◆ get_session_user()

behat_base::get_session_user ( )
protectedinherited

Get the actual user in the behat session (note $USER does not correspond to the behat session's user).

Return values
mixed
Exceptions
coding_exception

◆ get_sesskey()

behat_base::get_sesskey ( )
inherited

Get the session key for the current session via Javascript.

Return values
string

◆ get_text_selector_node()

behat_base::get_text_selector_node (   $selectortype,
  $element 
)
protectedinherited

Gets a NodeElement based on the locator and selector type received as argument from steps definitions.

Exceptions
ElementNotFoundExceptionThrown by behat_base::find
Parameters
string$selectortype
string$element
Return values
NodeElement

◆ get_timeout()

static behat_base::get_timeout ( )
staticinherited

Gets the default timeout.

The timeout for each Behat step (load page, wait for an element to load...).

Return values
intTimeout in seconds

◆ get_xpath_for_shuffle_checkbox()

behat_mod_quiz::get_xpath_for_shuffle_checkbox (   $heading)
protected

Return the xpath for shuffle checkbox in section heading.

Parameters
string$heading
Return values
string

◆ get_xpath_page_break_icon_after_question()

behat_mod_quiz::get_xpath_page_break_icon_after_question (   $addorremoves,
  $questionname 
)
protected

Get the xpath for a partcular add/remove page-break icon.

Parameters
string$addorremoves'Add' or 'Remove'.
string$questionnamethe name of the question before the icon.
Return values
stringthe requried xpath.

◆ has_tag()

behat_base::has_tag ( string  $tag)
inherited

Checks if the current scenario, or its feature, has a specified tag.

Parameters
string$tagTag to check
Return values
boolTrue if the tag exists in scenario or feature

◆ i_add_question_to_the_quiz_with()

behat_mod_quiz::i_add_question_to_the_quiz_with (   $questiontype,
  $quizname,
TableNode  $questiondata 
)

Adds a question to the existing quiz with filling the form.

The form for creating a question should be on one page.

@When /^I add a "(?P<question_type_string>(?:[^"]|")*)" question to the "(?P<quiz_name_string>(?:[^"]|\")*)" quiz with:$/

Parameters
string$questiontype
string$quizname
TableNode$questiondatawith data for filling the add question form

Reimplemented in behat_theme_classic_behat_mod_quiz.

◆ i_click_on_shuffle_for_section()

behat_mod_quiz::i_click_on_shuffle_for_section (   $heading)

Set Shuffle for shuffling questions within sections.

Parameters
string$headingthe heading of the section to change shuffle for.

@Given /^I click on shuffle for section "([^"]*)" on the quiz edit page$/

◆ i_click_on_the_page_break_icon_after_question()

behat_mod_quiz::i_click_on_the_page_break_icon_after_question (   $addorremoves,
  $questionname 
)

Click the add or remove page-break icon after a particular question.

@When /^I click on the "(Add|Remove)" page break icon after question "(?P<question_name>(?:[^"]|")*)"$/

Parameters
string$addorremoves'Add' or 'Remove'.
string$questionnamethe name of the question before the icon to click.

◆ i_delete_question_by_clicking_the_delete_icon()

behat_mod_quiz::i_delete_question_by_clicking_the_delete_icon (   $questionname)

Delete a question on the Edit quiz page by first clicking on the Delete icon, then clicking one of the "After ..." links.

@When /^I delete "(?P<question_name>(?:[^"]|")*)" in the quiz by clicking the delete icon$/

Parameters
string$questionnamethe name of the question we are looking for.
Return values
arrayof steps.

◆ i_move_question_after_item_by_clicking_the_move_icon()

behat_mod_quiz::i_move_question_after_item_by_clicking_the_move_icon (   $questionname,
  $target 
)

Move a question on the Edit quiz page by first clicking on the Move icon, then clicking one of the "After ..." links.

@When /^I move "(?P<question_name>(?:[^"]|")*)" to "(?P<target>(?:[^"]|\")*)" in the quiz by clicking the move icon$/

Parameters
string$questionnamethe name of the question we are looking for.
string$targetthe target place to move to. One of the links in the pop-up like "After Page 1" or "After Question N".

◆ i_move_question_after_item_by_dragging()

behat_mod_quiz::i_move_question_after_item_by_dragging (   $questionname,
  $target 
)

Move a question on the Edit quiz page by dragging a given question on top of another item.

@When /^I move "(?P<question_name>(?:[^"]|")*)" to "(?P<target>(?:[^"]|\")*)" in the quiz by dragging$/

Parameters
string$questionnamethe name of the question we are looking for.
string$targetthe target place to move to. Ether a question name, or "Page N"

◆ i_open_the_add_to_quiz_menu_for()

behat_mod_quiz::i_open_the_add_to_quiz_menu_for (   $pageorlast)

Open the add menu on a given page, or at the end of the Edit quiz page.

@Given /^I open the "(?P<page_n_or_last_string>(?:[^"]|")*)" add to quiz menu$/ @param string $pageorlast either "Page n" or "last".

◆ i_set_the_max_mark_for_quiz_question()

behat_mod_quiz::i_set_the_max_mark_for_quiz_question (   $questionname,
  $newmark 
)

Set the max mark for a question on the Edit quiz page.

@When /^I set the max mark for question "(?P<question_name_string>(?:[^"]|")*)" to "(?P<new_mark_string>(?:[^"]|\")*)"$/

Parameters
string$questionnamethe name of the question to set the max mark for.
string$newmarkthe mark to set

◆ i_set_the_section_heading_for()

behat_mod_quiz::i_set_the_section_heading_for (   $sectionname,
  $sectionheading 
)

Set the section heading for a given section on the Edit quiz page.

@When /^I change quiz section heading "(?P<section_name_string>(?:[^"]|")*)" to "(?P<new_section_heading_string>(?:[^"]|\")*)"$/

Parameters
string$sectionnamethe heading to change.
string$sectionheadingthe new heading to set.

◆ i_should_not_see_on_quiz_page()

behat_mod_quiz::i_should_not_see_on_quiz_page (   $questionname,
  $pagenumber 
)

Check whether a particular question is not on a particular page of the quiz on the Edit quiz page.

@Given /^I should not see "(?P<question_name>(?:[^"]|")*)" on quiz page "(?P<page_number>\d+)"$/

Parameters
string$questionnamethe name of the question we are looking for.
number$pagenumberthe page it should be found on.

◆ i_should_see_before_on_the_edit_quiz_page()

behat_mod_quiz::i_should_see_before_on_the_edit_quiz_page (   $firstquestionname,
  $secondquestionname 
)

Check whether one question comes before another on the Edit quiz page.

The two questions must be on the same page. @Given /^I should see "(?P<first_q_name>(?:[^"]|")*)" before "(?P<second_q_name>(?:[^"]|\")*)" on the edit quiz page$/

Parameters
string$firstquestionnamethe name of the question that should come first in order.
string$secondquestionnamethe name of the question that should come immediately after it in order.

◆ i_should_see_on_quiz_page()

behat_mod_quiz::i_should_see_on_quiz_page (   $questionname,
  $pagenumber 
)

Check whether a particular question is on a particular page of the quiz on the Edit quiz page.

@Given /^I should see "(?P<question_name>(?:[^"]|")*)" on quiz page "(?P<page_number>\d+)"$/

Parameters
string$questionnamethe name of the question we are looking for.
number$pagenumberthe page it should be found on.

◆ i_should_see_question_in_section_in_the_quiz_navigation()

behat_mod_quiz::i_should_see_question_in_section_in_the_quiz_navigation (   $questionnumber,
  $sectionheading 
)

Check that a given question comes after a given section heading in the quiz navigation block.

@Then /^I should see question "(?P<questionnumber>\d+)" in section "(?P<section_heading_string>(?:[^"]|")*)" in the quiz navigation$/

Parameters
int$questionnumberthe number of the question to check.
string$sectionheadingwhich section heading it should appear after.

◆ is_in_app()

behat_base::is_in_app ( )
protectedinherited

Checks if the current page is part of the mobile app.

Return values
boolTrue if it's in the app

◆ js_trigger_click()

behat_base::js_trigger_click (   $node)
protectedinherited

Trigger click on node via javascript instead of actually clicking on it via pointer.

This function resolves the issue of nested elements with click listeners or links - in these cases clicking via the pointer may accidentally cause a click on the wrong element. Example of issue: clicking to expand navigation nodes when the config value linkadmincategories is enabled.

Parameters
NodeElement$node

◆ locate_path()

behat_base::locate_path (   $path)
protectedinherited

Locates url, based on provided path.

Override to provide custom routing mechanism.

See also
Behat\MinkExtension\Context\MinkContext
Parameters
string$path
Return values
string

◆ look_for_exceptions()

behat_base::look_for_exceptions ( )
inherited

Internal step definition to find exceptions, debugging() messages and PHP debug messages.

Part of behat_hooks class as is part of the testing framework, is auto-executed after each step so no features will splicitly use it.

Exceptions
ExceptionUnknown type, depending on what we caught in the hook or basic Exception.
See also
Moodle\BehatExtension\Tester\MoodleStepTester

◆ normalise_selector()

behat_base::normalise_selector ( string  $selector,
  $locator,
Element  $container 
)
inherited

Normalise the locator and selector.

Parameters
string$selectorThe type of thing to search
mixed$locatorThe locator value. Can be an array, but is more likely a string.
Element$containerAn optional container to search within
Return values
arrayThe selector, locator, and container to search within

◆ quiz_contains_the_following_questions()

behat_mod_quiz::quiz_contains_the_following_questions (   $quizname,
TableNode  $data 
)

Put the specified questions on the specified pages of a given quiz.

The first row should be column names: | question | page | maxmark | requireprevious | The first two of those are required. The others are optional.

question needs to uniquely match a question name. page is a page number. Must start at 1, and on each following row should be the same as the previous, or one more. maxmark What the question is marked out of. Defaults to question.defaultmark. requireprevious The question can only be attempted after the previous one was completed.

Then there should be a number of rows of data, one for each question you want to add.

For backwards-compatibility reasons, specifying the column names is optional (but strongly encouraged). If not specified, the columns are asseumed to be | question | page | maxmark |.

Parameters
string$quiznamethe name of the quiz to add questions to.
TableNode$datainformation about the questions to add.

@Given /^quiz "([^"]*)" contains the following questions:$/

◆ quiz_contains_the_following_sections()

behat_mod_quiz::quiz_contains_the_following_sections (   $quizname,
TableNode  $data 
)

Put the specified section headings to start at specified pages of a given quiz.

The first row should be column names: | heading | firstslot | shufflequestions |

heading is the section heading text firstslot is the slot number where the section starts shuffle whether this section is shuffled (0 or 1)

Then there should be a number of rows of data, one for each section you want to add.

Parameters
string$quiznamethe name of the quiz to add sections to.
TableNode$datainformation about the sections to add.

@Given /^quiz "([^"]*)" contains the following sections:$/

◆ require_javascript()

behat_base::require_javascript ( )
protectedinherited

Require that javascript be available in the current Session.

Exceptions
DriverException

◆ require_javascript_in_session()

static behat_base::require_javascript_in_session ( Session  $session)
staticprotectedinherited

Require that javascript be available for the specified Session.

Parameters
Session$session
Exceptions
DriverException

◆ resize_window()

behat_base::resize_window (   $windowsize,
  $viewport = false 
)
protectedinherited

Change browser window size.

  • small: 640x480
  • medium: 1024x768
  • large: 2560x1600
Parameters
string$windowsizesize of window.
bool$viewportIf true, changes viewport rather than window size
Exceptions
ExpectationException

◆ resolve_page_instance_url()

behat_mod_quiz::resolve_page_instance_url ( string  $type,
string  $identifier 
)
protected

Convert page names to URLs for steps like 'When I am on the "[identifier]" "[page type]" page'.

Recognised page names are: | pagetype | name meaning | description | | View | Quiz name | The quiz info page (view.php) | | Edit | Quiz name | The edit quiz page (edit.php) | | Group overrides | Quiz name | The manage group overrides page | | User overrides | Quiz name | The manage user overrides page | | Grades report | Quiz name | The overview report for a quiz | | Responses report | Quiz name | The responses report for a quiz | | Statistics report | Quiz name | The statistics report for a quiz | | Attempt review | Quiz name > username > [Attempt] attempt no | Review page for a given attempt (review.php) |

Parameters
string$typeidentifies which type of page this is, e.g. 'Attempt review'.
string$identifieridentifies the particular page, e.g. 'Test quiz > student > Attempt 1'.
Return values
moodle_urlthe corresponding URL.
Exceptions
Exceptionwith a meaningful error message if the specified page cannot be found.

Reimplemented from behat_base.

◆ resolve_page_url()

behat_mod_quiz::resolve_page_url ( string  $page)
protected

Convert page names to URLs for steps like 'When I am on the "[page name]" page'.

Recognised page names are: | None so far! | |

Parameters
string$pagename of the page, with the component name removed e.g. 'Admin notification'.
Return values
moodle_urlthe corresponding URL.
Exceptions
Exceptionwith a meaningful error message if the specified page cannot be found.

Reimplemented from behat_base.

◆ running_javascript()

behat_base::running_javascript ( )
protectedinherited

Whether Javascript is available in the current Session.

Return values
boolean

◆ running_javascript_in_session()

static behat_base::running_javascript_in_session ( Session  $session)
staticprotectedinherited

Whether Javascript is available in the specified Session.

Parameters
Session$session
Return values
boolean

◆ set_user()

static behat_base::set_user (   $user = null)
staticinherited

Set current $USER, reset access cache.

In some cases, behat will execute the code as admin but in many cases we need to set an specific user as some API's might rely on the logged user to take some action.

Parameters
null | int | stdClass$useruser record, null or 0 means non-logged-in, positive integer means userid

◆ should_have_number_on_the_edit_quiz_page()

behat_mod_quiz::should_have_number_on_the_edit_quiz_page (   $questionname,
  $number 
)

Check the number displayed alongside a question on the Edit quiz page.

@Given /^"(?P<question_name>(?:[^"]|")*)" should have number "(?P<number>(?:[^"]|\")*)" on the edit quiz page$/

Parameters
string$questionnamethe name of the question we are looking for.
number$numberthe number (or 'i') that should be displayed beside that question.

◆ shuffle_for_section_should_be()

behat_mod_quiz::shuffle_for_section_should_be (   $heading,
  $value 
)

Check the shuffle checkbox for a particular section.

Parameters
string$headingthe heading of the section to check shuffle for
int$valuewhether the shuffle checkbox should be on or off.

@Given /^shuffle for section "([^"]*)" should be "(On|Off)" on the quiz edit page$/

◆ spin()

behat_base::spin (   $lambda,
  $args = false,
  $timeout = false,
  $exception = false,
  $microsleep = false 
)
protectedinherited

Executes the passed closure until returns true or time outs.

In most cases the document.readyState === 'complete' will be enough, but sometimes JS requires more time to be completely loaded or an element to be visible or whatever is required to perform some action on an element; this method receives a closure which should contain the required statements to ensure the step definition actions and assertions have all their needs satisfied and executes it until they are satisfied or it timeouts. Redirects the return of the closure to the caller.

The closures requirements to work well with this spin method are:

  • Must return false, null or '' if something goes wrong
  • Must return something != false if finishes as expected, this will be the (mixed) value returned by spin()

The arguments of the closure are mixed, use $args depending on your needs.

You can provide an exception to give more accurate feedback to tests writers, otherwise the closure exception will be used, but you must provide an exception if the closure does not throw an exception.

Exceptions
ExceptionIf it timeouts without receiving something != false from the closure
Parameters
Function | array | string$lambdaThe function to execute or an array passed to call_user_func (maps to a class method)
mixed$argsArguments to pass to the closure
int$timeoutTimeout in seconds
Exception$exceptionThe exception to throw in case it time outs.
bool$microsleepIf set to true it'll sleep micro seconds rather than seconds.
Return values
mixedThe value returned by the closure

◆ the_page_break_icon_after_question_should_exist()

behat_mod_quiz::the_page_break_icon_after_question_should_exist (   $addorremoves,
  $questionname 
)

Assert the add or remove page-break icon after a particular question exists.

@When /^the "(Add|Remove)" page break icon after question "(?P<question_name>(?:[^"]|")*)" should exist$/

Parameters
string$addorremoves'Add' or 'Remove'.
string$questionnamethe name of the question before the icon to click.
Return values
arrayof steps.

◆ the_page_break_icon_after_question_should_not_exist()

behat_mod_quiz::the_page_break_icon_after_question_should_not_exist (   $addorremoves,
  $questionname 
)

Assert the add or remove page-break icon after a particular question does not exist.

@When /^the "(Add|Remove)" page break icon after question "(?P<question_name>(?:[^"]|")*)" should not exist$/

Parameters
string$addorremoves'Add' or 'Remove'.
string$questionnamethe name of the question before the icon to click.
Return values
arrayof steps.

◆ the_page_break_link_after_question_should_contain()

behat_mod_quiz::the_page_break_link_after_question_should_contain (   $addorremoves,
  $questionname,
  $paramdata 
)

Check the add or remove page-break link after a particular question contains the given parameters in its url.

@When /^the "(Add|Remove)" page break link after question "(?P<question_name>(?:[^"]|")*) should contain:"$/

Parameters
string$addorremoves'Add' or 'Remove'.
string$questionnamethe name of the question before the icon to click.
TableNode$paramdatawith data for checking the page break url
Return values
arrayof steps.

◆ transform_selector()

behat_base::transform_selector (   $selectortype,
  $element 
)
protectedinherited

Transforms from step definition's argument style to Mink format.

Mink has 3 different selectors css, xpath and named, where named selectors includes link, button, field... to simplify and group multiple steps in one we use the same interface, considering all link, buttons... at the same level as css selectors and xpath; this method makes the conversion from the arguments received by the steps to the selectors and locators required to interact with Mink.

Exceptions
ExpectationException
Parameters
string$selectortypeIt can be css, xpath or any of the named selectors.
string$elementThe locator (or string) we are looking for.
Return values
arrayContains the selector and the locator expected by Mink.

◆ transform_text_selector()

behat_base::transform_text_selector (   $selectortype,
  $element 
)
protectedinherited

Transforms from step definition's argument style to Mink format.

Delegates all the process to behat_base::transform_selector() checking the provided $selectortype.

Exceptions
ExpectationException
Parameters
string$selectortypeIt can be css, xpath or any of the named selectors.
string$elementThe locator (or string) we are looking for.
Return values
arrayContains the selector and the locator expected by Mink.

◆ user_has_attempted_with_responses()

behat_mod_quiz::user_has_attempted_with_responses (   $username,
  $quizname,
TableNode  $attemptinfo 
)

Attempt a quiz.

The first row should be column names: | slot | actualquestion | variant | response | The first two of those are required. The others are optional.

slot The slot actualquestion This column is optional, and is only needed if the quiz contains random questions. If so, this will let you control which actual question gets picked when this slot is 'randomised' at the start of the attempt. If you don't specify, then one will be picked at random (which might make the response meaningless). Give the question name. variant This column is similar, and also options. It is only needed if the question that ends up in this slot returns something greater than 1 for $question->get_num_variants(). Like with actualquestion, if you specify a value here it is used the fix the 'random' choice made when the quiz is started. response The response that was submitted. How this is interpreted depends on the question type. It gets passed to core_question_generator::get_simulated_post_data_for_question_attempt() and therefore to the un_summarise_response method of the question to decode.

Then there should be a number of rows of data, one for each question you want to add. There is no need to supply answers to all questions. If so, other qusetions will be left unanswered.

Parameters
string$usernamethe username of the user that will attempt.
string$quiznamethe name of the quiz the user will attempt.
TableNode$attemptinfoinformation about the questions to add, as above. @Given /^user "([^"]*)" has attempted "([^"]*)" with responses:$/

◆ user_has_checked_answers_in_their_attempt_at_quiz()

behat_mod_quiz::user_has_checked_answers_in_their_attempt_at_quiz (   $username,
  $quizname,
TableNode  $attemptinfo 
)

Submit answers to questions an existing quiz attempt, with a simulated click on the 'Check' button.

This step should only be used with question behaviours that have have a 'Check' button. Those include Interactive with multiple tires, Immediate feedback and Immediate feedback with CBM.

Then there should be a number of rows of data, with two columns slot and response, as for user_has_attempted_with_responses() above. There is no need to supply answers to all questions. If so, other questions will be left unanswered.

Parameters
string$usernamethe username of the user that will attempt.
string$quiznamethe name of the quiz the user will attempt.
TableNode$attemptinfoinformation about the questions to add, as above.
Exceptions
Behat

◆ user_has_finished_an_attempt_at_quiz()

behat_mod_quiz::user_has_finished_an_attempt_at_quiz (   $username,
  $quizname 
)

Finish an existing quiz attempt.

Parameters
string$usernamethe username of the user that will attempt.
string$quiznamethe name of the quiz the user will attempt. @Given /^user "([^"]*)" has finished an attempt at quiz "([^"]*)"$/

◆ user_has_input_answers_in_their_attempt_at_quiz()

behat_mod_quiz::user_has_input_answers_in_their_attempt_at_quiz (   $username,
  $quizname,
TableNode  $attemptinfo 
)

Input answers to particular questions an existing quiz attempt, without simulating a click of the 'Check' button, if any.

Then there should be a number of rows of data, with two columns slot and response, as for user_has_attempted_with_responses() above. There is no need to supply answers to all questions. If so, other questions will be left unanswered.

Parameters
string$usernamethe username of the user that will attempt.
string$quiznamethe name of the quiz the user will attempt.
TableNode$attemptinfoinformation about the questions to add, as above.
Exceptions
Behat

◆ user_has_started_an_attempt_at_quiz()

behat_mod_quiz::user_has_started_an_attempt_at_quiz (   $username,
  $quizname 
)

Start a quiz attempt without answers.

Then there should be a number of rows of data, one for each question you want to add. There is no need to supply answers to all questions. If so, other qusetions will be left unanswered.

Parameters
string$usernamethe username of the user that will attempt.
string$quiznamethe name of the quiz the user will attempt. @Given /^user "([^"]*)" has started an attempt at quiz "([^"]*)"$/

◆ user_has_started_an_attempt_at_quiz_with_details()

behat_mod_quiz::user_has_started_an_attempt_at_quiz_with_details (   $username,
  $quizname,
TableNode  $attemptinfo 
)

Start a quiz attempt without answers.

The supplied data table for have a row for each slot where you want to force either which random question was chose, or which random variant was used, as for user_has_attempted_with_responses() above.

Parameters
string$usernamethe username of the user that will attempt.
string$quiznamethe name of the quiz the user will attempt.
TableNode$attemptinfoinformation about the questions to add, as above. @Given /^user "([^"]*)" has started an attempt at quiz "([^"]*)" randomised as follows:$/

◆ wait_for_pending_js()

behat_base::wait_for_pending_js ( )
inherited

Waits for all the JS to be loaded.

Return values
boolWhether any JS is still pending completion.

◆ wait_for_pending_js_in_session()

static behat_base::wait_for_pending_js_in_session ( Session  $session)
staticinherited

Waits for all the JS to be loaded.

Parameters
Session$sessionThe Mink Session where JS can be run
Return values
boolWhether any JS is still pending completion.

Member Data Documentation

◆ EXTENDED_TIMEOUT

const behat_base::EXTENDED_TIMEOUT = 10
inherited

And extended timeout for specific cases.

Deprecated:
since Moodle 3.7 MDL-64979 - please use get_extended_timeout() instead
Todo:
MDL-64982 This will be deleted in Moodle 4.1
See also
behat_base::get_extended_timeout()

◆ PAGE_READY_JS

const behat_base::PAGE_READY_JS
inherited
Initial value:
= "document.readyState === 'complete' && " .
"(typeof M !== 'object' || typeof M.util !== 'object' || " .
"typeof M.util.pending_js === 'undefined' || M.util.pending_js.length === 0)"

The JS code to check that the page is ready.

The document must be complete and either M.util.pending_js must be empty, or it must not be defined at all.

◆ REDUCED_TIMEOUT

const behat_base::REDUCED_TIMEOUT = 2
inherited

Small timeout.

A reduced timeout for cases where self::TIMEOUT is too much and a simple $this->getSession()->getPage()->find() could not be enough.

Deprecated:
since Moodle 3.7 MDL-64979 - please use get_reduced_timeout() instead
Todo:
MDL-64982 This will be deleted in Moodle 4.1
See also
behat_base::get_reduced_timeout()

◆ TIMEOUT

const behat_base::TIMEOUT = 6
inherited

The timeout for each Behat step (load page, wait for an element to load...).

Deprecated:
since Moodle 3.7 MDL-64979 - please use get_timeout() instead
Todo:
MDL-64982 This will be deleted in Moodle 4.1
See also
behat_base::get_timeout()

The documentation for this class was generated from the following file: