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

Breadcrumb

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

class BrowserKitDriver

Symfony BrowserKit driver.

@author Konstantin Kudryashov <ever.zet@gmail.com>

Hierarchy

  • class \Behat\Mink\Driver\CoreDriver implements \Behat\Mink\Driver\DriverInterface
    • class \Behat\Mink\Driver\BrowserKitDriver extends \Behat\Mink\Driver\CoreDriver

Expanded class hierarchy of BrowserKitDriver

File

vendor/behat/mink-browserkit-driver/src/BrowserKitDriver.php, line 32

Namespace

Behat\Mink\Driver
View source
class BrowserKitDriver extends CoreDriver {
    
    /**
     * @var AbstractBrowser
     */
    private $client;
    
    /**
     * @var array<string, Form>
     */
    private $forms = array();
    
    /**
     * @var array<string, string>
     */
    private $serverParameters = array();
    
    /**
     * @var bool
     */
    private $started = false;
    
    /**
     * Initializes BrowserKit driver.
     *
     * @param string|null $baseUrl Base URL for HttpKernel clients
     */
    public function __construct(AbstractBrowser $client, ?string $baseUrl = null) {
        $this->client = $client;
        $this->client
            ->followRedirects(true);
        if ($baseUrl !== null && $client instanceof HttpKernelBrowser) {
            $basePath = parse_url($baseUrl, PHP_URL_PATH);
            if (\is_string($basePath)) {
                $client->setServerParameter('SCRIPT_FILENAME', $basePath);
            }
        }
    }
    
    /**
     * Returns BrowserKit browser instance.
     *
     * @return AbstractBrowser
     */
    public function getClient() {
        return $this->client;
    }
    
    /**
     * {@inheritdoc}
     */
    public function start() {
        $this->started = true;
    }
    
    /**
     * {@inheritdoc}
     */
    public function isStarted() {
        return $this->started;
    }
    
    /**
     * {@inheritdoc}
     */
    public function stop() {
        $this->reset();
        $this->started = false;
    }
    
    /**
     * {@inheritdoc}
     */
    public function reset() {
        // Restarting the client resets the cookies and the history
        $this->client
            ->restart();
        $this->forms = array();
        $this->serverParameters = array();
    }
    
    /**
     * {@inheritdoc}
     */
    public function visit(string $url) {
        $this->client
            ->request('GET', $this->prepareUrl($url), array(), array(), $this->serverParameters);
        $this->forms = array();
    }
    
    /**
     * {@inheritdoc}
     */
    public function getCurrentUrl() {
        // This should be encapsulated in `getRequest` method if any other method needs the request
        try {
            $request = $this->client
                ->getInternalRequest();
        } catch (BadMethodCallException $e) {
            // Handling Symfony 5+ behaviour
            $request = null;
        }
        if ($request === null) {
            throw new DriverException('Unable to access the request before visiting a page');
        }
        return $request->getUri();
    }
    
    /**
     * {@inheritdoc}
     */
    public function reload() {
        $this->client
            ->reload();
        $this->forms = array();
    }
    
    /**
     * {@inheritdoc}
     */
    public function forward() {
        $this->client
            ->forward();
        $this->forms = array();
    }
    
    /**
     * {@inheritdoc}
     */
    public function back() {
        $this->client
            ->back();
        $this->forms = array();
    }
    
    /**
     * {@inheritdoc}
     */
    public function setBasicAuth($user, string $password) {
        if (false === $user) {
            unset($this->serverParameters['PHP_AUTH_USER'], $this->serverParameters['PHP_AUTH_PW']);
            unset($this->serverParameters['HTTP_AUTHORIZATION']);
            return;
        }
        $this->serverParameters['PHP_AUTH_USER'] = $user;
        $this->serverParameters['PHP_AUTH_PW'] = $password;
        $this->serverParameters['HTTP_AUTHORIZATION'] = 'Basic ' . base64_encode($user . ':' . $password);
    }
    
    /**
     * {@inheritdoc}
     */
    public function setRequestHeader(string $name, string $value) {
        $contentHeaders = array(
            'CONTENT_LENGTH' => true,
            'CONTENT_MD5' => true,
            'CONTENT_TYPE' => true,
        );
        $name = str_replace('-', '_', strtoupper($name));
        // CONTENT_* are not prefixed with HTTP_ in PHP when building $_SERVER
        if (!isset($contentHeaders[$name])) {
            $name = 'HTTP_' . $name;
        }
        $this->serverParameters[$name] = $value;
    }
    
    /**
     * {@inheritdoc}
     */
    public function getResponseHeaders() {
        return $this->getResponse()
            ->getHeaders();
    }
    
    /**
     * {@inheritdoc}
     */
    public function setCookie(string $name, ?string $value = null) {
        if (null === $value) {
            $this->deleteCookie($name);
            return;
        }
        $jar = $this->client
            ->getCookieJar();
        $jar->set(new Cookie($name, $value));
    }
    
    /**
     * Deletes a cookie by name.
     *
     * @param string $name Cookie name.
     */
    private function deleteCookie(string $name) : void {
        $path = $this->getCookiePath();
        $jar = $this->client
            ->getCookieJar();
        do {
            if (null !== $jar->get($name, $path)) {
                $jar->expire($name, $path);
            }
            $path = preg_replace('/.$/', '', $path);
        } while ($path);
    }
    
    /**
     * Returns current cookie path.
     */
    private function getCookiePath() : string {
        $path = parse_url($this->getCurrentUrl(), PHP_URL_PATH);
        if ($path === null || $path === false || $path === '') {
            $path = '/';
        }
        if ('\\' === DIRECTORY_SEPARATOR) {
            $path = str_replace('\\', '/', $path);
        }
        return $path;
    }
    
    /**
     * {@inheritdoc}
     */
    public function getCookie(string $name) {
        // Note that the following doesn't work well because
        // Symfony\Component\BrowserKit\CookieJar stores cookies by name,
        // path, AND domain and if you don't fill them all in correctly then
        // you won't get the value that you're expecting.
        //
        // $jar = $this->client->getCookieJar();
        //
        // if (null !== $cookie = $jar->get($name)) {
        //     return $cookie->getValue();
        // }
        $allValues = $this->client
            ->getCookieJar()
            ->allValues($this->getCurrentUrl());
        if (isset($allValues[$name])) {
            return $allValues[$name];
        }
        return null;
    }
    
    /**
     * {@inheritdoc}
     */
    public function getStatusCode() {
        $response = $this->getResponse();
        return $response->getStatusCode();
    }
    
    /**
     * {@inheritdoc}
     */
    public function getContent() {
        return $this->getResponse()
            ->getContent();
    }
    
    /**
     * {@inheritdoc}
     */
    public function findElementXpaths(string $xpath) {
        $nodes = $this->getCrawler()
            ->filterXPath($xpath);
        $elements = array();
        foreach ($nodes as $i => $node) {
            $elements[] = sprintf('(%s)[%d]', $xpath, $i + 1);
        }
        return $elements;
    }
    
    /**
     * {@inheritdoc}
     */
    public function getTagName(string $xpath) {
        return $this->getCrawlerNode($this->getFilteredCrawler($xpath))->nodeName;
    }
    
    /**
     * {@inheritdoc}
     */
    public function getText(string $xpath) {
        $text = $this->getFilteredCrawler($xpath)
            ->text(null, true);
        return $text;
    }
    
    /**
     * {@inheritdoc}
     */
    public function getHtml(string $xpath) {
        return $this->getFilteredCrawler($xpath)
            ->html();
    }
    
    /**
     * {@inheritdoc}
     */
    public function getOuterHtml(string $xpath) {
        $crawler = $this->getFilteredCrawler($xpath);
        return $crawler->outerHtml();
    }
    
    /**
     * {@inheritdoc}
     */
    public function getAttribute(string $xpath, string $name) {
        $node = $this->getFilteredCrawler($xpath);
        if ($this->getCrawlerNode($node)
            ->hasAttribute($name)) {
            return $node->attr($name);
        }
        return null;
    }
    
    /**
     * {@inheritdoc}
     */
    public function getValue(string $xpath) {
        if (in_array($this->getAttribute($xpath, 'type'), array(
            'submit',
            'image',
            'button',
        ), true)) {
            return $this->getAttribute($xpath, 'value');
        }
        $node = $this->getCrawlerNode($this->getFilteredCrawler($xpath));
        if ('option' === $node->tagName) {
            return $this->getOptionValue($node);
        }
        try {
            $field = $this->getFormField($xpath);
        } catch (\InvalidArgumentException $e) {
            return $this->getAttribute($xpath, 'value');
        }
        $value = $field->getValue();
        if ('select' === $node->tagName && null === $value) {
            // symfony/dom-crawler returns null as value for a non-multiple select without
            // options but we want an empty string to match browsers.
            $value = '';
        }
        return $value;
    }
    
    /**
     * {@inheritdoc}
     */
    public function setValue(string $xpath, $value) {
        $field = $this->getFormField($xpath);
        if ($field instanceof ChoiceFormField) {
            if (!\is_string($value) && $field->getType() === 'radio') {
                throw new DriverException('Only string values can be used for a radio input.');
            }
            if (\is_bool($value) && $field->getType() === 'select') {
                throw new DriverException('Boolean values cannot be used for a select element.');
            }
            $field->setValue($value);
            return;
        }
        if (\is_array($value) || \is_bool($value)) {
            throw new DriverException('Textual and file form fields don\'t support array or boolean values.');
        }
        $field->setValue($value);
    }
    
    /**
     * {@inheritdoc}
     */
    public function check(string $xpath) {
        $this->getCheckboxField($xpath)
            ->tick();
    }
    
    /**
     * {@inheritdoc}
     */
    public function uncheck(string $xpath) {
        $this->getCheckboxField($xpath)
            ->untick();
    }
    
    /**
     * {@inheritdoc}
     */
    public function selectOption(string $xpath, string $value, bool $multiple = false) {
        $field = $this->getFormField($xpath);
        if (!$field instanceof ChoiceFormField) {
            throw new DriverException(sprintf('Impossible to select an option on the element with XPath "%s" as it is not a select or radio input', $xpath));
        }
        if ($multiple) {
            $oldValue = (array) $field->getValue();
            $oldValue[] = $value;
            $value = $oldValue;
        }
        $field->select($value);
    }
    
    /**
     * {@inheritdoc}
     */
    public function isSelected(string $xpath) {
        $optionValue = $this->getOptionValue($this->getCrawlerNode($this->getFilteredCrawler($xpath)));
        $selectField = $this->getFormField('(' . $xpath . ')/ancestor-or-self::*[local-name()="select"]');
        $selectValue = $selectField->getValue();
        return is_array($selectValue) ? in_array($optionValue, $selectValue, true) : $optionValue === $selectValue;
    }
    
    /**
     * {@inheritdoc}
     */
    public function click(string $xpath) {
        $crawler = $this->getFilteredCrawler($xpath);
        $node = $this->getCrawlerNode($crawler);
        $tagName = $node->nodeName;
        if ('a' === $tagName) {
            $this->client
                ->click($crawler->link());
            $this->forms = array();
        }
        elseif ($this->canSubmitForm($node)) {
            $this->submit($crawler->form());
        }
        elseif ($this->canResetForm($node)) {
            $this->resetForm($node);
        }
        else {
            $message = sprintf('%%s supports clicking on links and submit or reset buttons only. But "%s" provided', $tagName);
            throw new UnsupportedDriverActionException($message, $this);
        }
    }
    
    /**
     * {@inheritdoc}
     */
    public function isChecked(string $xpath) {
        $field = $this->getFormField($xpath);
        if (!$field instanceof ChoiceFormField || 'select' === $field->getType()) {
            throw new DriverException(sprintf('Impossible to get the checked state of the element with XPath "%s" as it is not a checkbox or radio input', $xpath));
        }
        if ('checkbox' === $field->getType()) {
            return $field->hasValue();
        }
        $radio = $this->getCrawlerNode($this->getFilteredCrawler($xpath));
        return $radio->getAttribute('value') === $field->getValue();
    }
    
    /**
     * {@inheritdoc}
     */
    public function attachFile(string $xpath, string $path) {
        $field = $this->getFormField($xpath);
        if (!$field instanceof FileFormField) {
            throw new DriverException(sprintf('Impossible to attach a file on the element with XPath "%s" as it is not a file input', $xpath));
        }
        $field->upload($path);
    }
    
    /**
     * {@inheritdoc}
     */
    public function submitForm(string $xpath) {
        $crawler = $this->getFilteredCrawler($xpath);
        $this->submit($crawler->form());
    }
    
    /**
     * @return Response
     *
     * @throws DriverException If there is not response yet
     */
    protected function getResponse() {
        try {
            $response = $this->client
                ->getInternalResponse();
        } catch (BadMethodCallException $e) {
            // Handling Symfony 5+ behaviour
            $response = null;
        }
        if (null === $response) {
            throw new DriverException('Unable to access the response before visiting a page');
        }
        return $response;
    }
    
    /**
     * Prepares URL for visiting.
     * Removes "*.php/" from urls and then passes it to BrowserKitDriver::visit().
     *
     * @param string $url
     *
     * @return string
     */
    protected function prepareUrl(string $url) {
        return $url;
    }
    
    /**
     * Returns form field from XPath query.
     *
     * @param string $xpath
     *
     * @return FormField
     *
     * @throws DriverException
     * @throws \InvalidArgumentException when the field does not exist in the BrowserKit form
     */
    protected function getFormField(string $xpath) {
        $fieldNode = $this->getCrawlerNode($this->getFilteredCrawler($xpath));
        $fieldType = $fieldNode->getAttribute('type');
        if (\in_array($fieldType, [
            'button',
            'submit',
            'image',
        ], true)) {
            throw new DriverException(sprintf('Cannot access a form field of type "%s".', $fieldType));
        }
        $fieldName = str_replace('[]', '', $fieldNode->getAttribute('name'));
        $formNode = $this->getFormNode($fieldNode);
        $formId = $this->getFormNodeId($formNode);
        if (!isset($this->forms[$formId])) {
            $this->forms[$formId] = new Form($formNode, $this->getCurrentUrl());
        }
        if (is_array($this->forms[$formId][$fieldName])) {
            $positionField = $this->forms[$formId][$fieldName][$this->getFieldPosition($fieldNode)];
            \assert($positionField instanceof FormField);
            return $positionField;
        }
        return $this->forms[$formId][$fieldName];
    }
    
    /**
     * Returns the checkbox field from xpath query, ensuring it is valid.
     *
     * @param string $xpath
     *
     * @return ChoiceFormField
     *
     * @throws DriverException when the field is not a checkbox
     */
    private function getCheckboxField(string $xpath) : ChoiceFormField {
        $field = $this->getFormField($xpath);
        if (!$field instanceof ChoiceFormField) {
            throw new DriverException(sprintf('Impossible to check the element with XPath "%s" as it is not a checkbox', $xpath));
        }
        return $field;
    }
    
    /**
     * @param \DOMElement $element
     *
     * @return \DOMElement
     *
     * @throws DriverException if the form node cannot be found
     */
    private function getFormNode(\DOMElement $element) : \DOMElement {
        if ($element->hasAttribute('form')) {
            $formId = $element->getAttribute('form');
            \assert($element->ownerDocument !== null);
            $formNode = $element->ownerDocument
                ->getElementById($formId);
            if (null === $formNode || 'form' !== $formNode->nodeName) {
                throw new DriverException(sprintf('The selected node has an invalid form attribute (%s).', $formId));
            }
            return $formNode;
        }
        $formNode = $element;
        do {
            // use the ancestor form element
            if (null === ($formNode = $formNode->parentNode)) {
                throw new DriverException('The selected node does not have a form ancestor.');
            }
        } while ('form' !== $formNode->nodeName);
        \assert($formNode instanceof \DOMElement);
        return $formNode;
    }
    
    /**
     * Gets the position of the field node among elements with the same name
     *
     * BrowserKit uses the field name as index to find the field in its Form object.
     * When multiple fields have the same name (checkboxes for instance), it will return
     * an array of elements in the order they appear in the DOM.
     *
     * @throws DriverException
     */
    private function getFieldPosition(\DOMElement $fieldNode) : int {
        $elements = $this->getCrawler()
            ->filterXPath('//*[@name=\'' . $fieldNode->getAttribute('name') . '\']');
        if (count($elements) > 1) {
            // more than one element contains this name !
            // so we need to find the position of $fieldNode
            foreach ($elements as $key => $element) {
                
                /** @var \DOMElement $element */
                if ($element->getNodePath() === $fieldNode->getNodePath()) {
                    return $key;
                }
            }
        }
        return 0;
    }
    private function submit(Form $form) : void {
        $formId = $this->getFormNodeId($form->getFormNode());
        if (isset($this->forms[$formId])) {
            $this->mergeForms($form, $this->forms[$formId]);
        }
        // remove empty file fields from request
        foreach ($form->getFiles() as $name => $field) {
            if (empty($field['name']) && empty($field['tmp_name'])) {
                $form->remove($name);
            }
        }
        $this->client
            ->submit($form, array(), $this->serverParameters);
        $this->forms = array();
    }
    private function resetForm(\DOMElement $fieldNode) : void {
        $formNode = $this->getFormNode($fieldNode);
        $formId = $this->getFormNodeId($formNode);
        unset($this->forms[$formId]);
    }
    private function canSubmitForm(\DOMElement $node) : bool {
        $type = $node->hasAttribute('type') ? $node->getAttribute('type') : null;
        if ('input' === $node->nodeName && in_array($type, array(
            'submit',
            'image',
        ), true)) {
            return true;
        }
        return 'button' === $node->nodeName && (null === $type || 'submit' === $type);
    }
    private function canResetForm(\DOMElement $node) : bool {
        $type = $node->hasAttribute('type') ? $node->getAttribute('type') : null;
        return in_array($node->nodeName, array(
            'input',
            'button',
        ), true) && 'reset' === $type;
    }
    
    /**
     * Returns form node unique identifier.
     *
     * @param \DOMElement $form
     *
     * @return string
     */
    private function getFormNodeId(\DOMElement $form) : string {
        return md5($form->getLineNo() . $form->getNodePath() . $form->nodeValue);
    }
    
    /**
     * Gets the value of an option element
     *
     * @param \DOMElement $option
     *
     * @return string
     *
     * @see \Symfony\Component\DomCrawler\Field\ChoiceFormField::buildOptionValue
     */
    private function getOptionValue(\DOMElement $option) : string {
        if ($option->hasAttribute('value')) {
            return $option->getAttribute('value');
        }
        if (!empty($option->nodeValue)) {
            return $option->nodeValue;
        }
        return '1';
        // DomCrawler uses 1 by default if there is no text in the option
    }
    
    /**
     * Merges second form values into first one.
     *
     * @param Form $to   merging target
     * @param Form $from merging source
     */
    private function mergeForms(Form $to, Form $from) : void {
        foreach ($from->all() as $name => $field) {
            $fieldReflection = new \ReflectionObject($field);
            $nodeReflection = $fieldReflection->getProperty('node');
            $valueReflection = $fieldReflection->getProperty('value');
            $nodeReflection->setAccessible(true);
            $valueReflection->setAccessible(true);
            $isIgnoredField = $field instanceof InputFormField && in_array($nodeReflection->getValue($field)
                ->getAttribute('type'), array(
                'submit',
                'button',
                'image',
            ), true);
            if (!$isIgnoredField) {
                $targetField = $to[$name];
                \assert($targetField instanceof FormField);
                $valueReflection->setValue($targetField, $valueReflection->getValue($field));
            }
        }
    }
    
    /**
     * Returns DOMElement from crawler instance.
     *
     * @throws DriverException when the node does not exist
     */
    private function getCrawlerNode(Crawler $crawler) : \DOMElement {
        $node = $crawler->getNode(0);
        if (null !== $node) {
            \assert($node instanceof \DOMElement);
            return $node;
        }
        throw new DriverException('The element does not exist');
    }
    
    /**
     * Returns a crawler filtered for the given XPath, requiring at least 1 result.
     *
     * @param string $xpath
     *
     * @return Crawler
     *
     * @throws DriverException when no matching elements are found
     */
    private function getFilteredCrawler(string $xpath) : Crawler {
        if (!count($crawler = $this->getCrawler()
            ->filterXPath($xpath))) {
            throw new DriverException(sprintf('There is no element matching XPath "%s"', $xpath));
        }
        return $crawler;
    }
    
    /**
     * Returns crawler instance (got from client).
     *
     * @return Crawler
     *
     * @throws DriverException
     */
    private function getCrawler() : Crawler {
        try {
            $crawler = $this->client
                ->getCrawler();
        } catch (BadMethodCallException $e) {
            $crawler = null;
        }
        if (null === $crawler) {
            throw new DriverException('Unable to access the response content before visiting a page');
        }
        return $crawler;
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title Overrides
BrowserKitDriver::$client private property
BrowserKitDriver::$forms private property
BrowserKitDriver::$serverParameters private property
BrowserKitDriver::$started private property
BrowserKitDriver::attachFile public function Attaches file path to file field located by its XPath query. Overrides CoreDriver::attachFile
BrowserKitDriver::back public function Moves browser backward 1 page. Overrides CoreDriver::back
BrowserKitDriver::canResetForm private function
BrowserKitDriver::canSubmitForm private function
BrowserKitDriver::check public function Checks checkbox by its XPath query. Overrides CoreDriver::check
BrowserKitDriver::click public function Clicks button or link located by its XPath query. Overrides CoreDriver::click
BrowserKitDriver::deleteCookie private function Deletes a cookie by name.
BrowserKitDriver::findElementXpaths public function Finds elements with specified XPath query. Overrides CoreDriver::findElementXpaths
BrowserKitDriver::forward public function Moves browser forward 1 page. Overrides CoreDriver::forward
BrowserKitDriver::getAttribute public function Returns element&#039;s attribute by its XPath query. Overrides CoreDriver::getAttribute
BrowserKitDriver::getCheckboxField private function Returns the checkbox field from xpath query, ensuring it is valid.
BrowserKitDriver::getClient public function Returns BrowserKit browser instance.
BrowserKitDriver::getContent public function Returns last response content. Overrides CoreDriver::getContent
BrowserKitDriver::getCookie public function Returns cookie by name. Overrides CoreDriver::getCookie
BrowserKitDriver::getCookiePath private function Returns current cookie path.
BrowserKitDriver::getCrawler private function Returns crawler instance (got from client).
BrowserKitDriver::getCrawlerNode private function Returns DOMElement from crawler instance.
BrowserKitDriver::getCurrentUrl public function Returns current URL address. Overrides CoreDriver::getCurrentUrl
BrowserKitDriver::getFieldPosition private function Gets the position of the field node among elements with the same name
BrowserKitDriver::getFilteredCrawler private function Returns a crawler filtered for the given XPath, requiring at least 1 result.
BrowserKitDriver::getFormField protected function Returns form field from XPath query.
BrowserKitDriver::getFormNode private function
BrowserKitDriver::getFormNodeId private function Returns form node unique identifier.
BrowserKitDriver::getHtml public function Returns element&#039;s inner html by its XPath query. Overrides CoreDriver::getHtml
BrowserKitDriver::getOptionValue private function Gets the value of an option element
BrowserKitDriver::getOuterHtml public function Returns element&#039;s outer html by its XPath query. Overrides CoreDriver::getOuterHtml
BrowserKitDriver::getResponse protected function
BrowserKitDriver::getResponseHeaders public function Returns last response headers. Overrides CoreDriver::getResponseHeaders
BrowserKitDriver::getStatusCode public function Returns last response status code. Overrides CoreDriver::getStatusCode
BrowserKitDriver::getTagName public function Returns element&#039;s tag name by its XPath query. Overrides CoreDriver::getTagName
BrowserKitDriver::getText public function Returns element&#039;s text by its XPath query. Overrides CoreDriver::getText
BrowserKitDriver::getValue public function Returns element&#039;s value by its XPath query. Overrides CoreDriver::getValue
BrowserKitDriver::isChecked public function Checks whether checkbox or radio button located by its XPath query is checked. Overrides CoreDriver::isChecked
BrowserKitDriver::isSelected public function Checks whether select option, located by its XPath query, is selected. Overrides CoreDriver::isSelected
BrowserKitDriver::isStarted public function Checks whether driver is started. Overrides CoreDriver::isStarted
BrowserKitDriver::mergeForms private function Merges second form values into first one.
BrowserKitDriver::prepareUrl protected function Prepares URL for visiting.
Removes &quot;*.php/&quot; from urls and then passes it to BrowserKitDriver::visit().
BrowserKitDriver::reload public function Reloads current page. Overrides CoreDriver::reload
BrowserKitDriver::reset public function Resets driver state. Overrides CoreDriver::reset
BrowserKitDriver::resetForm private function
BrowserKitDriver::selectOption public function Selects option from select field or value in radio group located by its XPath query. Overrides CoreDriver::selectOption
BrowserKitDriver::setBasicAuth public function Sets HTTP Basic authentication parameters. Overrides CoreDriver::setBasicAuth
BrowserKitDriver::setCookie public function Sets cookie. Overrides CoreDriver::setCookie
BrowserKitDriver::setRequestHeader public function Sets specific request header on client. Overrides CoreDriver::setRequestHeader
BrowserKitDriver::setValue public function Sets element&#039;s value by its XPath query. Overrides CoreDriver::setValue
BrowserKitDriver::start public function Starts driver. Overrides CoreDriver::start
BrowserKitDriver::stop public function Stops driver. Overrides CoreDriver::stop
BrowserKitDriver::submit private function
BrowserKitDriver::submitForm public function Submits the form. Overrides CoreDriver::submitForm
BrowserKitDriver::uncheck public function Unchecks checkbox by its XPath query. Overrides CoreDriver::uncheck
BrowserKitDriver::visit public function Visit specified URL. Overrides CoreDriver::visit
BrowserKitDriver::__construct public function Initializes BrowserKit driver.
CoreDriver::$session private property
CoreDriver::blur public function Overrides DriverInterface::blur 1
CoreDriver::doubleClick public function Overrides DriverInterface::doubleClick 1
CoreDriver::dragTo public function Overrides DriverInterface::dragTo 1
CoreDriver::evaluateScript public function Overrides DriverInterface::evaluateScript 1
CoreDriver::executeScript public function Overrides DriverInterface::executeScript 1
CoreDriver::find public function @final since 1.11 Overrides DriverInterface::find
CoreDriver::focus public function Overrides DriverInterface::focus 1
CoreDriver::getScreenshot public function Overrides DriverInterface::getScreenshot 1
CoreDriver::getWindowName public function Overrides DriverInterface::getWindowName 1
CoreDriver::getWindowNames public function Overrides DriverInterface::getWindowNames 1
CoreDriver::isVisible public function Overrides DriverInterface::isVisible 1
CoreDriver::keyDown public function Overrides DriverInterface::keyDown 1
CoreDriver::keyPress public function Overrides DriverInterface::keyPress 1
CoreDriver::keyUp public function Overrides DriverInterface::keyUp 1
CoreDriver::maximizeWindow public function Overrides DriverInterface::maximizeWindow 1
CoreDriver::mouseOver public function Overrides DriverInterface::mouseOver 1
CoreDriver::resizeWindow public function Overrides DriverInterface::resizeWindow 1
CoreDriver::rightClick public function Overrides DriverInterface::rightClick 1
CoreDriver::setSession public function @final since 1.11 Overrides DriverInterface::setSession
CoreDriver::switchToIFrame public function Overrides DriverInterface::switchToIFrame 1
CoreDriver::switchToWindow public function Overrides DriverInterface::switchToWindow 1
CoreDriver::wait public function Overrides DriverInterface::wait 1

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal