*/ 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:----1FLxfcCPUSCC13ct4iqq2xBzJeuQj1GVO1aPd47ku+Qpw49GdRfNJU7BTF2uORD+yhN3hlGXLp/Skcird2LptdlsLRU0BHDIGI7F5heznK6TBRDQlPzunKefg/yKgx7MVLKDEardRIoe6VGSI6zxiLESuoK9Ml6R/4lPCPAzsYffcvU3bunaXJMWuARQLg0kAh2Hty/Odk0XaUyPTPRkpcEVLZHXBITgG3tLTaYbCPPvmpSPODbUB5qZV6TzgPx18lHwKWkAMCX176WfO72ONn1LbwnzFogsCoXPAFrMWFVZoc8Ux3aBvGvtspsaj49f7T6NtzJ8vP3BRTRpZkn7HRS3Gevo9sZihPtzUmNIjjJ6qGzvDgEdzvcd7n9V7WI3J0N4tiaZP3EbeTxuMKvUkepnbOVANchUCuIbCIJqyezjVsTlcB+wyPEwTSIKcNUTkB5lJy1DnSkqdINGxiTU1jZAPYZlSBpU0xhXyCvg0jprM5xY2RBTWe9jrOIjMoDa21H5QBhr9UPZYg/x8tgyOYRg/n9uwPin5yvqHRIz6xJsbIUdn8k1zZ2ikXTpimQuKs/pwE9/kfpsaDWNkuOsINWlaXzhMcqg7Zwh3l89zKVC0YZ8O3SrqBqL3hYVHGxB4j9v1X8pfZRH70tOnYOa8IaDKD+qGr2F98UMh+HUd7o=----ATTACHMENT:----ODkxODk2NTk3Mjg2MjUgNzY2MzcyNDU4MjE1MzA3MSA0NzE2MDA1Njg2Nzk5MzM5