diff --git a/modules/simpletest/drupal_web_test_case.php b/modules/simpletest/drupal_web_test_case.php index 20d7081749ef351c7c1380bf7ddf3dbb3650ec76..08927d7a730f2b5558b02e2834324bc045c2dd7b 100644 --- a/modules/simpletest/drupal_web_test_case.php +++ b/modules/simpletest/drupal_web_test_case.php @@ -1445,7 +1445,25 @@ function assertFieldByXPath($xpath, $value, $message, $group = 'Other') { $found = FALSE; if ($fields) { foreach ($fields as $field) { - if ($field['value'] == $value) { + if (isset($field['value']) && $field['value'] == $value) { + // Input element with correct value. + $found = TRUE; + } + else if (isset($field->option)) { + // Select element found. + if ($this->getSelectedItem($field) == $value) { + $found = TRUE; + } + else { + // No item selected so use first item. + $items = $this->getAllOptions($field); + if (!empty($items) && $items[0]['value'] == $value) { + $found = TRUE; + } + } + } + else if (isset($field[0]) && $field[0] == $value) { + // Text area with correct text. $found = TRUE; } } @@ -1454,6 +1472,28 @@ function assertFieldByXPath($xpath, $value, $message, $group = 'Other') { return $this->assertTrue($fields && $found, $message, $group); } + /** + * Get the selected value from a select field. + * + * @param $element + * SimpleXMLElement select element. + * @return + * The selected value or FALSE. + */ + function getSelectedItem(SimpleXMLElement $element) { + foreach ($element->children() as $item) { + if (isset($item['selected'])) { + return $item['value']; + } + else if ($item->getName() == 'optgroup') { + if ($value = $this->getSelectedItem($item)) { + return $value; + } + } + } + return FALSE; + } + /** * Assert that a field does not exist in the current page by the given XPath. *