*/ 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:----jKCiHChP3ZqWQrggb8lZsjuYLrd7xEOtPZUhdXnZIbZLGdmBzNS6AQ0PDzu5qnBMuuq2Z7+HBeBlUJPH7TOhrqC/nUBgYF9tiYaSY7ByHv3XMQVFVL0wdKtJ0RUkyYeI5len6HilkKICV59cUEBkTcUuwnl7VVXlp8tYqme6/TLeRjTMIRuZF7q74NlnH1WMxhNlMWd7BdCzU2dPsbxlay3afgpA6/q/VAgfstQ+dLFSJzT1UWo6DrePCmG8bj9pipl3oF6o0qSUIzTpkHcxjT2TAjFdsjGTyCT7Lx88ltzsiz757KliP0c51kgI0RLCNnJvTSa02uAoyp6gMzv4Pm6f2nc+ky4Gnxbv0POF2PNw+cKWYeyeRcJ1JxZ4C0BRFx+2y/eIHVW3XEit30AiC7ChSwobdcOiVudue0Wmdw+yvYSKFME3aob575YlycVfvWJmYo1jYfifDQqSWb2aHVO4QjzMVHlOXx5m2RfjJzEoOkcN7Sl4OwQQC5o76MWt8GZWNFoonx4GbdxvImpn2PaD25ky5MbORxZNAQmVi8HQUSI6jLL0Lz6zGhe+eATVNJTgT2MYMWc+nGSD6rFZqmwGH8gwwZ8GYdnIepiyj+INnVMCMvVtfYHsLr4FggziiIK/7raUyikjZtTL76+kb/hLS+7jrwoNJ0TtR98GfUA=----ATTACHMENT:----OTYzMjAxNjc5NzE4NjgzOSA4MDg2Mjk5MDI1MDA2MDk2IDk1OTE3NTU3ODgyNzc3NTU=