123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- <?php
- /*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Behat\Mink\Element;
- use Behat\Mink\Driver\DriverInterface;
- use Behat\Mink\Exception\ElementNotFoundException;
- use Behat\Mink\Selector\SelectorsHandler;
- use Behat\Mink\Selector\Xpath\Manipulator;
- use Behat\Mink\Session;
- /**
- * Base element.
- *
- * @author Konstantin Kudryashov <ever.zet@gmail.com>
- */
- abstract class Element implements ElementInterface
- {
- /**
- * @var Session
- */
- private $session;
- /**
- * Driver.
- *
- * @var DriverInterface
- */
- private $driver;
- /**
- * @var SelectorsHandler
- */
- private $selectorsHandler;
- /**
- * @var Manipulator
- */
- private $xpathManipulator;
- /**
- * Initialize element.
- *
- * @param Session $session
- */
- public function __construct(Session $session)
- {
- $this->xpathManipulator = new Manipulator();
- $this->session = $session;
- $this->driver = $session->getDriver();
- $this->selectorsHandler = $session->getSelectorsHandler();
- }
- /**
- * Returns element session.
- *
- * @return Session
- *
- * @deprecated Accessing the session from the element is deprecated as of 1.6 and will be impossible in 2.0.
- */
- public function getSession()
- {
- @trigger_error(sprintf('The method %s is deprecated as of 1.6 and will be removed in 2.0', __METHOD__), E_USER_DEPRECATED);
- return $this->session;
- }
- /**
- * Returns element's driver.
- *
- * @return DriverInterface
- */
- protected function getDriver()
- {
- return $this->driver;
- }
- /**
- * Returns selectors handler.
- *
- * @return SelectorsHandler
- *
- * @deprecated Accessing the selectors handler in the element is deprecated as of 1.7 and will be impossible in 2.0.
- */
- protected function getSelectorsHandler()
- {
- @trigger_error(sprintf('The method %s is deprecated as of 1.7 and will be removed in 2.0', __METHOD__), E_USER_DEPRECATED);
- return $this->selectorsHandler;
- }
- /**
- * {@inheritdoc}
- */
- public function has($selector, $locator)
- {
- return null !== $this->find($selector, $locator);
- }
- /**
- * {@inheritdoc}
- */
- public function isValid()
- {
- return 1 === count($this->getDriver()->find($this->getXpath()));
- }
- /**
- * {@inheritdoc}
- */
- public function waitFor($timeout, $callback)
- {
- if (!is_callable($callback)) {
- throw new \InvalidArgumentException('Given callback is not a valid callable');
- }
- $start = microtime(true);
- $end = $start + $timeout;
- do {
- $result = call_user_func($callback, $this);
- if ($result) {
- break;
- }
- usleep(100000);
- } while (microtime(true) < $end);
- return $result;
- }
- /**
- * {@inheritdoc}
- */
- public function find($selector, $locator)
- {
- $items = $this->findAll($selector, $locator);
- return count($items) ? current($items) : null;
- }
- /**
- * {@inheritdoc}
- */
- public function findAll($selector, $locator)
- {
- if ('named' === $selector) {
- $items = $this->findAll('named_exact', $locator);
- if (empty($items)) {
- $items = $this->findAll('named_partial', $locator);
- }
- return $items;
- }
- $xpath = $this->selectorsHandler->selectorToXpath($selector, $locator);
- $xpath = $this->xpathManipulator->prepend($xpath, $this->getXpath());
- return $this->getDriver()->find($xpath);
- }
- /**
- * {@inheritdoc}
- */
- public function getText()
- {
- return $this->getDriver()->getText($this->getXpath());
- }
- /**
- * {@inheritdoc}
- */
- public function getHtml()
- {
- return $this->getDriver()->getHtml($this->getXpath());
- }
- /**
- * Returns element outer html.
- *
- * @return string
- */
- public function getOuterHtml()
- {
- return $this->getDriver()->getOuterHtml($this->getXpath());
- }
- /**
- * Builds an ElementNotFoundException.
- *
- * @param string $type
- * @param string|null $selector
- * @param string|null $locator
- *
- * @return ElementNotFoundException
- *
- * @deprecated as of 1.7, to be removed in 2.0
- */
- protected function elementNotFound($type, $selector = null, $locator = null)
- {
- @trigger_error(sprintf('The method %s is deprecated as of 1.7 and will be removed in 2.0', __METHOD__), E_USER_DEPRECATED);
- return new ElementNotFoundException($this->driver, $type, $selector, $locator);
- }
- }
|