function Selenium2Driver::getValue
Overrides CoreDriver::getValue
File
-
vendor/
lullabot/ mink-selenium2-driver/ src/ Selenium2Driver.php, line 624
Class
- Selenium2Driver
- Selenium2 driver.
Namespace
Behat\Mink\DriverCode
public function getValue(string $xpath) {
$element = $this->findElement($xpath);
$elementName = strtolower($element->name());
$elementType = strtolower($element->attribute('type') ?: '');
// Getting the value of a checkbox returns its value if selected.
if ('input' === $elementName && 'checkbox' === $elementType) {
return $element->selected() ? $element->attribute('value') : null;
}
if ('input' === $elementName && 'radio' === $elementType) {
$script = <<<JS
var node = {{ELEMENT}},
value = null;
var name = node.getAttribute('name');
if (name) {
var fields = window.document.getElementsByName(name),
i, l = fields.length;
for (i = 0; i < l; i++) {
var field = fields.item(i);
if (field.form === node.form && field.checked) {
value = field.value;
break;
}
}
}
return value;
JS;
return $this->executeJsOnElement($element, $script);
}
// Using $element->attribute('value') on a select only returns the first selected option
// even when it is a multiple select, so a custom retrieval is needed.
if ('select' === $elementName && $element->attribute('multiple')) {
$script = <<<JS
var node = {{ELEMENT}},
value = [];
for (var i = 0; i < node.options.length; i++) {
if (node.options[i].selected) {
value.push(node.options[i].value);
}
}
return value;
JS;
return $this->executeJsOnElement($element, $script);
}
if ($this->isW3C()) {
return $element->property('value');
}
return $element->attribute('value');
}