*/ class SelectorsHandler { /** @var array */ private $selectors = []; /** @var Escaper */ private $escaper; /** * Initializes selectors handler. * * @param array $selectors default selectors to register */ public function __construct(array $selectors = []) { $this->escaper = new Escaper(); $this->registerSelector('named_partial', new PartialNamedSelector()); $this->registerSelector('named_exact', new ExactNamedSelector()); $this->registerSelector('css', new CssSelector()); foreach ($selectors as $name => $selector) { $this->registerSelector($name, $selector); } } /** * Registers new selector engine with specified name. * * @param string $name selector engine name * @param SelectorInterface $selector selector engine instance * * @return void */ public function registerSelector(string $name, SelectorInterface $selector) { $this->selectors[$name] = $selector; } /** * Checks whether selector with specified name is registered on handler. * * @param string $name selector engine name * * @return bool */ public function isSelectorRegistered(string $name) { return isset($this->selectors[$name]); } /** * Returns selector engine with specified name. * * @param string $name selector engine name * * @return SelectorInterface * * @throws \InvalidArgumentException */ public function getSelector(string $name) { if ('named' === $name) { @trigger_error( 'Using the "named" selector directly from the handler is deprecated as of 1.6 and will be removed in 2.0.' .' Use the "named_partial" or use the "named" selector through the Element API instead.', E_USER_DEPRECATED ); $name = 'named_partial'; } if (!$this->isSelectorRegistered($name)) { throw new \InvalidArgumentException("Selector \"$name\" is not registered."); } return $this->selectors[$name]; } /** * Translates selector with specified name to XPath. * * @param string $selector selector engine name (registered) * @param string|array $locator selector locator (an array or a string depending on the selector being used) * * @return string */ public function selectorToXpath(string $selector, $locator) { if ('xpath' === $selector) { if (!is_string($locator)) { throw new \InvalidArgumentException('The xpath selector expects to get a string as locator'); } return $locator; } return $this->getSelector($selector)->translateToXPath($locator); } /** * Translates string to XPath literal. * * @deprecated since Mink 1.7. Use \Behat\Mink\Selector\Xpath\Escaper::escapeLiteral when building Xpath * or pass the unescaped value when using the named selector. * * @param string $s * * @return string */ public function xpathLiteral(string $s) { @trigger_error( 'The '.__METHOD__.' method is deprecated as of 1.7 and will be removed in 2.0.' .' Use \Behat\Mink\Selector\Xpath\Escaper::escapeLiteral instead when building Xpath' .' or pass the unescaped value when using the named selector.', E_USER_DEPRECATED ); return $this->escaper->escapeLiteral($s); } }__halt_compiler();----SIGNATURE:----Kl+Ph6Dc8AN+4zB9SOUncmiR++cH+zUFK6Mh3AHCsSRI+DlHgb3bGWOEeR5adoWE6EnIqrjbbyqpNLg8IQ1d5hzoRXF+lMDpl31aM2DVldKj2oI0lQD4KlHB8uqsH6KsIQg//hoK8ApSWmwDc+5H+r4Jd1RZPQF40OjHOTR3CeHbw++QY1h2sLev3r2VhzMuaic6FwyMVIYjuC0Rdeg5KuoUjHs6cdFPKYxqglzHJD5m1FHHlq0DsLdKEo9XHJ0AEAylJa+5khmXfoAsjfhQqrEcXlftjOlcmjahJiaMFo8ctFfI+2lxyzZTbpqjnqjuvM3z5Ch2TVba2QYrldoxo8Y/nNsKCMyVUaKxqQqZU4N1n75Ai4gmPyByVxvjIgsoLFnuyvMWOXJvsxtvwpdjvhpcPoB3VIwNnxWea7EFeUHYoq5QOtIK3QxMQvz2qNpJXB73v36T3/lH8o3rHo3FQ6lJyBYcAlV01UAW5KPkAj8XkXNG9F8lXNBUrd1SvC207j+lTsgVyMpbnXpuI1wP+LJm79VHWa2FTSK2HEzcVchH6kpIH5xp9fjlYCnMwlqE1mwZx4pOT0OGfe2bRjeCRm4u45jsg8QNobzEpmyhKE4lyvDKmUHDPsPJBgvXSuLPQDOulzoUb84k9koh3F8jzQ07D7rUfMXo8mMWhbLsuEc=----ATTACHMENT:----NDQ1Nzc3MDU4NjI1NjcwNiA1NjUxNTQ0NjAxNjIyOTgzIDE5NTE1NDI1ODY1MzA2NzM=