/**
  * Asserts the preview of a media asset field is shown.
  *
  * @Then /^(?:|I )see the "(?P<field>(?:[^"]|\\")*)" preview$/
  */
 public function assertMediaAssetFieldPreview($field)
 {
     $field = str_replace('\\"', '"', $field);
     $label = $this->mink->getSession()->getPage()->find('xpath', '//label[contains(text(), \'' . $field . '\')]');
     $current_element = $label;
     // Ascend back up to the div with class field-type-media.
     do {
         $current_element = $current_element->getParent();
     } while (!$current_element->hasClass('field-type-media'));
     $media_field_div = $current_element;
     $preview_thumbnail = NULL;
     $remove_button = NULL;
     // Try to find the preview thumbnail & remove button (for max. 10 seconds).
     $end = microtime(TRUE) + 10;
     do {
         if (!$preview_thumbnail) {
             $preview_thumbnail = $media_field_div->find('css', 'div.preview div.media-thumbnail');
         }
         if (!$remove_button) {
             $remove_button = $media_field_div->findButton('Remove');
         }
         if (!$preview_thumbnail || !$remove_button) {
             usleep(500);
         }
     } while ((!$preview_thumbnail || !$remove_button) && microtime(TRUE) < $end);
     if (!$preview_thumbnail) {
         throw new Exception(sprintf('Preview thumbnail for field "%s" not found.', $field));
     }
     if (!$remove_button) {
         throw new Exception(sprintf('Remove button for field "%s" not found.', $field));
     }
 }
 /**
  * Gets the cache purge rules overview.
  *
  * @return Element
  *   The table body.
  */
 protected function getCachePurgeRulesOverview()
 {
     return $this->mink->getSession()->getPage()->find('css', 'table#frontend-cache-purge-rules > tbody');
 }