Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. Selenium2Driver.php

function Selenium2Driver::getValue

Overrides CoreDriver::getValue

File

vendor/lullabot/mink-selenium2-driver/src/Selenium2Driver.php, line 624

Class

Selenium2Driver
Selenium2 driver.

Namespace

Behat\Mink\Driver

Code

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');
}
RSS feed
Powered by Drupal