← Back to team overview

mahara-contributors team mailing list archive

[Bug 1575512] A change has been merged

 

Reviewed:  https://reviews.mahara.org/6988
Committed: https://git.mahara.org/mahara/mahara/commit/f27e5ebf72bb88e8feac9fced877c27c5f7eec3e
Submitter: Robert Lyon (robertl@xxxxxxxxxxxxxxx)
Branch:    master

commit f27e5ebf72bb88e8feac9fced877c27c5f7eec3e
Author: Son Nguyen <son.nguyen@xxxxxxxxxxxxxxx>
Date:   Wed Aug 31 13:54:05 2016 +1200

Bug 1575512: Better way to check if a page is ready for behat tests

Add JS event handlers for
- pieforms
- tinyMCE editor
- bootstrap
to detect when a page is ready after a behat test step

Refactor behat tests .feature files
- remove redundant steps I wait
- replace the step I set the field ...
by the faster step I fill in ...
for regular text inputs

Change-Id: I0ce4cc8dc32f228a648cfee608ec60ed917b7774

-- 
You received this bug notification because you are a member of Mahara
Contributors, which is subscribed to Mahara.
Matching subscriptions: Subscription for all Mahara Contributors -- please ask on #mahara-dev or mahara.org forum before editing or unsubscribing it!
https://bugs.launchpad.net/bugs/1575512

Title:
  Behat tests are failing due to not waiting for Javascript to finish

Status in Mahara:
  Fix Committed
Status in Mahara 17.10 series:
  Fix Committed

Bug description:
  We're seeing an annoying number of Behat tests that are failing due to
  a race condition between Behat and the Javascript in the browser.
  Here's an example: http://test.mahara.org/job/mahara-
  gerrit/5558/console

  In that case, the test is failing in this part:

  1. I press "Create folder"
  2. And I follow "Folder1"

  The failure happens because Behat can't find a link named "Follow1"
  when it tries to carry out that step. The way it *should* work, is
  basically like this:

  1. Behat step: I press "Create folder"
  2. Behat web driver locates and presses the "Create folder" button.
  3. The button press triggers a Pieform javascript method, which fires off an Ajax request to submit the form for creating a new folder.
  4. The Ajax request is handled by a PHP script, which creates the artefact and sends back a success response, including updated HTML for what the file area should look like now.
  5. Pieform Javascript receives the response from the Ajax script, and swaps the new HTML in place of the old HTML. The new HTML contains the link to the new folder.
  6. Behat step: I follow "Folder1"
  7. Behat web driver locates and clicks the link with text "Folder1".

  The race condition seems to happen because when you do the "I press"
  step (defined in \Behat\MinkExtension\Context\MinkContext) waits for
  the conclusion of any HTTP requests caused by the button press, but it
  doesn't wait for the Pieform callback to finish.

  The quick workaround for these is to add a "And I wait "1" seconds"
  step on affected tests. But it would be better to get a systemic fix
  to it. I think maybe the best thing to do, would be to change all the
  underlying "find" methods into spin functions, which, if they don't
  find the element, will wait up to 5 seconds to find it. Behat's
  inheritance structure for steps may make that tricky to do, though.

To manage notifications about this bug go to:
https://bugs.launchpad.net/mahara/+bug/1575512/+subscriptions


References