예제 #1
0
 /**
  * Get data from <form> element
  *
  * Form is get by $xpath
  * Return key->value array where key is name of field
  *
  * @param ElementFinder $page
  * @param string $xpath xpath to form
  * @return array
  * @throws \Exception
  */
 public static function getDefaultFormData(ElementFinder $page, $xpath)
 {
     /** @var ElementFinder $form */
     $form = $page->object($xpath, true)->getFirst();
     if (empty($form)) {
         throw new \Exception("Cant find form. Possible invalid xpath ");
     }
     $formData = [];
     # textarea
     foreach ($form->elements('//textarea') as $textArea) {
         $formData[$textArea->getAttribute('name')] = $textArea->nodeValue;
     }
     # radio and checkboxes
     foreach ($form->elements('//input[@checked]') as $textArea) {
         $formData[$textArea->getAttribute('name')] = $textArea->getAttribute('value');
     }
     # hidden, text, submit
     $hiddenAndTextElements = $form->elements('//input[@type="hidden" or @type="text" or @type="submit" or not(@type)]');
     foreach ($hiddenAndTextElements as $element) {
         $formData[$element->getAttribute('name')] = $element->getAttribute('value');
     }
     # select
     $selectItems = $form->object('//select', true);
     foreach ($selectItems as $select) {
         $name = $select->attribute('//select/@name')->item(0);
         $option = $select->value('//option[@selected]');
         if (!isset($option[0])) {
             $option = $select->value('//option[1]');
         }
         $formData[$name] = $option->item(0);
     }
     return $formData;
 }