*/ 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:----QClyDss5q3UGagAAGvoPknsHWZP81gUyxn9zbf5EtuyX+jckOhIwZ8f1dNi5HKu32DbC6Evm8AUNKMKL068wwpgHgx2y1vymcYBqHVBX0IrOpsD8ktAWRN3EcGBt++pQsV0Ji0DjQA9Ys/5iDGo9ko7VglMp2bWA0mIVCw75EKB/8eIN9+GabVI+/XIywWGsJns5ysI2siUHuN8rCmAONfttkA3Rd2WF/bQgvk/bXVSrxwMhM9NRPsb7fMnTKA/6AnBP6Q+uCrx4f0ooRIOeMzcsLDG3cy/OD8G/BQ9HEc/ugv12uXMN744rtTdqWGIVAmS0+sKXhFxfR9HlngnlhRVYGeubQvKWcqTntkHHsnKwmb/AcaEaPeUUOZH4dd0QamMffAHKTPkj1KvoTrmSyS0gmJ5R0N7h9xm2jOi0vDa4qib2lcDSNCHwlKxt4ufeDiiTjvrQiIC8wtKza46IaeLk4v2cDX4JROrPUHVyKS0Ghj+aSRlmEfHtasUZKulLOVJfMOCnfH/DxWt7YTQ3zsrfaQQOQ7L9aj2CdwES6lKiPw8Gg8EVsaNSXvVEdmI1SYQbr25/onSPudYGlq/fEbjf+hyb10IfV5Xp4Uq7lp53Zkk96WHh0z8Hj+FQpqUBMRbW7iKoPk/Q9ln36WBg4Kb8ZIToTDJp68/qv34N7wo=----ATTACHMENT:----Nzg0ODIwNTIwNjMwNjYyNCA1NDgyMTAyNjE4MzE4MzEgOTk0ODcyNzUwNDkxNjY3Nw==