CRM-15197 - Webtest fixes
authorColeman Watts <coleman@civicrm.org>
Thu, 18 Sep 2014 04:02:26 +0000 (00:02 -0400)
committerColeman Watts <coleman@civicrm.org>
Thu, 18 Sep 2014 04:06:51 +0000 (00:06 -0400)
tests/phpunit/CiviTest/CiviSeleniumTestCase.php
tests/phpunit/WebTest/Event/AddEventTest.php
tests/phpunit/WebTest/Event/AddPricesetTest.php

index 870608c1a9bb847b6a137740481f34427aa27c9f..16934bd915841c0462d4166a3150c8399bac124d 100644 (file)
@@ -237,8 +237,22 @@ class CiviSeleniumTestCase extends PHPUnit_Extensions_SeleniumTestCase {
   }
 
   /**
-   * Click on a link and have it open full-page
-   * @param $element
+   * Click a popup link and wait for the ajax content to load
+   * @param string $element
+   * @param string $waitFor
+   */
+  function clickPopupLink($element, $waitFor) {
+    $this->click($element);
+    $this->waitForElementPresent('css=.ui-dialog');
+    $this->waitForAjaxContent();
+    if ($waitFor) {
+      $this->waitForElementPresent($waitFor);
+    }
+  }
+
+  /**
+   * Force a link to open full-page, even if it would normally open in a popup
+   * @param string $element
    * @param string $waitFor
    */
   function clickLinkSuppressPopup($element, $waitFor = 'civicrm-footer') {
@@ -250,6 +264,15 @@ class CiviSeleniumTestCase extends PHPUnit_Extensions_SeleniumTestCase {
     }
   }
 
+  /**
+   * Wait for ajax snippets to finish loading
+   */
+  function waitForAjaxContent() {
+    // Add sleep to prevent condition where we click an ajax button and call this function before the content has even started loading
+    sleep(1);
+    $this->waitForElementNotPresent('css=.blockOverlay');
+  }
+
   /**
    * Call the API on the local server
    * (kind of defeats the point of a webtest - see CRM-11889)
@@ -2091,7 +2114,7 @@ class CiviSeleniumTestCase extends PHPUnit_Extensions_SeleniumTestCase {
 
       $fieldLabel = "custom_field_for_{$customSet['entity']}_{$customSet['subEntity']}" . substr(sha1(rand()), 0, 4);
       $this->type('label', $fieldLabel);
-      $this->click('_qf_Field_next_new-bottom');
+      $this->click('_qf_Field_done-bottom');
       $customGroupTitle = preg_replace('/\s/', '_', trim($customGroupTitle));
 
       $return[] = array(
@@ -2132,6 +2155,8 @@ class CiviSeleniumTestCase extends PHPUnit_Extensions_SeleniumTestCase {
    * function to select multiple options
    */
   function multiselect2($fieldid, $params) {
+    // In the case of chainSelect, wait for options to load
+    $this->waitForElementNotPresent('css=select.loading');
     foreach($params as $value) {
       $this->clickAt("xpath=//*[@id='$fieldid']/../div/ul//li/input");
       $this->waitForElementPresent("xpath=//ul[@class='select2-results']");
index 5f5ce829f45dcae59042a2a4cc5700a21c8d2117..b5c93cd7f595bafa97337815f565988ce5df75f9 100644 (file)
@@ -310,7 +310,9 @@ class WebTest_Event_AddEventTest extends CiviSeleniumTestCase {
     $this->assertChecked('is_pay_later');
     $this->click("CIVICRM_QFID_0_is_monetary");
 
-    $this->clickLink("_qf_Fee_upload-bottom", "_qf_Fee_upload-bottom");
+    $this->click("_qf_Fee_upload-bottom");
+    $this->waitForText('crm-notification-container', "'Fees' information has been saved.");
+    $this->waitForAjaxContent();
 
     //check if pay later option is disabled
     $this->click('CIVICRM_QFID_1_is_monetary');
@@ -357,8 +359,7 @@ class WebTest_Event_AddEventTest extends CiviSeleniumTestCase {
     $this->type("max_participants", "50");
     $this->click("is_map");
     $this->click("is_public");
-    $this->click("_qf_EventInfo_upload-bottom");
-    $this->waitForPageToLoad($this->getTimeoutMsec());
+    $this->clickLink("_qf_EventInfo_upload-bottom");
   }
 
   /**
@@ -373,8 +374,8 @@ class WebTest_Event_AddEventTest extends CiviSeleniumTestCase {
     // Select event template. Use option value, not label - since labels can be translated and test would fail
     $this->select("template_id", "value={$templateID}");
 
-    // Wait for event type to be filled in (since page reloads)
-    $this->waitForElementPresent("event_type_id");
+    // Wait for event type to be filled in (since page refreshes)
+    $this->waitForAjaxContent();
     $this->verifySelectedValue("event_type_id", $eventTypeID);
 
     // Attendee role s/b selected now.
@@ -395,8 +396,7 @@ class WebTest_Event_AddEventTest extends CiviSeleniumTestCase {
 
     $this->type("max_participants", "50");
     $this->click("is_map");
-    $this->click("_qf_EventInfo_upload-bottom");
-
+    $this->clickLink("_qf_EventInfo_upload-bottom");
   }
 
   /**
@@ -404,7 +404,7 @@ class WebTest_Event_AddEventTest extends CiviSeleniumTestCase {
    */
   function _testAddLocation($streetAddress) {
     // Wait for Location tab form to load
-    $this->waitForPageToLoad($this->getTimeoutMsec());
+    $this->waitForAjaxContent();
     $this->waitForElementPresent("_qf_Location_upload-bottom");
 
     // Fill in address fields
@@ -766,7 +766,7 @@ class WebTest_Event_AddEventTest extends CiviSeleniumTestCase {
       $this->_testOnlineRegistration($registerUrl, 2, $anonymous, FALSE, $participantEmails, "Test Processor");
     $primaryDisplayName = "{$primaryParticipantInfo['first_name']} {$primaryParticipantInfo['last_name']}";
     $this->webtestLogin();
-    $this->openCiviPage("event/search?reset=1", "reset=1");
+    $this->openCiviPage("event/search", "reset=1");
     $this->select2("event_id", $eventTitle, FALSE);
     $this->clickLink('_qf_Search_refresh');
     $this->verifyText("xpath=//div[@id='participantSearch']/table/tbody//tr/td[3]/a[contains(text(),
@@ -776,9 +776,9 @@ class WebTest_Event_AddEventTest extends CiviSeleniumTestCase {
 
     //CRM-12618 check edit screen of additional participant and ensuring record_contribution not present
     foreach ($addtlPart as $value) {
-      $this->clickLink("xpath=//div[@id='participantSearch']/table/tbody//tr/td[3]/a[contains(text(),
+      $this->clickPopupLink("xpath=//div[@id='participantSearch']/table/tbody//tr/td[3]/a[contains(text(),
        '{$value['last_name']}, {$value['first_name']}')]/../../td[11]/span/a[2][contains(text(), 'Edit')]",
-        '_qf_Participant_upload-bottom', FALSE);
+        '_qf_Participant_upload-bottom');
       $this->assertTrue(
         $this->isElementPresent("xpath=//tr[@class='crm-participant-form-block-registered-by']/td[2]/a[contains(text(),
          '$primaryDisplayName')]"), 'Registered By info is wrong on additional participant edit form');
index 6f680e628e0b3820d13e3ae231448ac97724288c..8aecd6cfc4f2ec5b944673ca93ddda57265a5575 100644 (file)
@@ -50,7 +50,7 @@ class WebTest_Event_AddPricesetTest extends CiviSeleniumTestCase {
     $sid = $this->urlArg('sid');
     $this->assertType('numeric', $sid);
 
-    $validStrings = array();
+    $validateStrings = array();
 
     $fields = array(
       'Full Conference' => 'Text',
@@ -59,7 +59,6 @@ class WebTest_Event_AddPricesetTest extends CiviSeleniumTestCase {
       'Evening Sessions' => 'CheckBox',
     );
     $this->_testAddPriceFields($fields, $validateStrings);
-    // var_dump($validateStrings);
 
     // load the Price Set Preview and check for expected values
     $this->_testVerifyPriceSet($validateStrings, $sid);
@@ -97,7 +96,7 @@ class WebTest_Event_AddPricesetTest extends CiviSeleniumTestCase {
    * @param bool $dateSpecificFields
    */
   function _testAddPriceFields(&$fields, &$validateStrings, $dateSpecificFields = FALSE) {
-    $this->waitForElementPresent('_qf_Field_cancel-bottom');
+    $this->clickLinkSuppressPopup('newPriceField');
     foreach ($fields as $label => $type) {
       $validateStrings[] = $label;
 
@@ -176,7 +175,7 @@ class WebTest_Event_AddPricesetTest extends CiviSeleniumTestCase {
         default:
           break;
       }
-      $this->clickLink('_qf_Field_next_new-bottom', '_qf_Field_next-bottom', FALSE);
+      $this->clickLink('_qf_Field_next_new-bottom', '_qf_Field_next-bottom');
       $this->waitForText('crm-notification-container', "Price Field '".$label."' has been saved.");
     }
   }