96 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace Facebook\WebDriver\Remote;
 | |
| 
 | |
| use Facebook\WebDriver\Exception\UnknownErrorException;
 | |
| use Facebook\WebDriver\WebDriverBy;
 | |
| use Facebook\WebDriver\WebDriverElement;
 | |
| use Facebook\WebDriver\WebDriverSearchContext;
 | |
| 
 | |
| class ShadowRoot implements WebDriverSearchContext
 | |
| {
 | |
|     /**
 | |
|      * Shadow root identifier defined in the W3CWebDriver protocol.
 | |
|      *
 | |
|      * @see https://w3c.github.io/webdriver/#shadow-root
 | |
|      */
 | |
|     const SHADOW_ROOT_IDENTIFIER = 'shadow-6066-11e4-a52e-4f735466cecf';
 | |
| 
 | |
|     /**
 | |
|      * @var RemoteExecuteMethod
 | |
|      */
 | |
|     private $executor;
 | |
| 
 | |
|     /**
 | |
|      * @var string
 | |
|      */
 | |
|     private $id;
 | |
| 
 | |
|     public function __construct(RemoteExecuteMethod $executor, $id)
 | |
|     {
 | |
|         $this->executor = $executor;
 | |
|         $this->id = $id;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param RemoteExecuteMethod $executor
 | |
|      * @param array $response
 | |
|      * @return self
 | |
|      */
 | |
|     public static function createFromResponse(RemoteExecuteMethod $executor, array $response)
 | |
|     {
 | |
|         if (empty($response[self::SHADOW_ROOT_IDENTIFIER])) {
 | |
|             throw new UnknownErrorException('Shadow root is missing in server response');
 | |
|         }
 | |
| 
 | |
|         return new self($executor, $response[self::SHADOW_ROOT_IDENTIFIER]);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param WebDriverBy $locator
 | |
|      * @return RemoteWebElement
 | |
|      */
 | |
|     public function findElement(WebDriverBy $locator)
 | |
|     {
 | |
|         $params = JsonWireCompat::getUsing($locator, true);
 | |
|         $params[':id'] = $this->id;
 | |
| 
 | |
|         $rawElement = $this->executor->execute(
 | |
|             DriverCommand::FIND_ELEMENT_FROM_SHADOW_ROOT,
 | |
|             $params
 | |
|         );
 | |
| 
 | |
|         return new RemoteWebElement($this->executor, JsonWireCompat::getElement($rawElement), true);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param WebDriverBy $locator
 | |
|      * @return WebDriverElement[]
 | |
|      */
 | |
|     public function findElements(WebDriverBy $locator)
 | |
|     {
 | |
|         $params = JsonWireCompat::getUsing($locator, true);
 | |
|         $params[':id'] = $this->id;
 | |
| 
 | |
|         $rawElements = $this->executor->execute(
 | |
|             DriverCommand::FIND_ELEMENTS_FROM_SHADOW_ROOT,
 | |
|             $params
 | |
|         );
 | |
| 
 | |
|         $elements = [];
 | |
|         foreach ($rawElements as $rawElement) {
 | |
|             $elements[] = new RemoteWebElement($this->executor, JsonWireCompat::getElement($rawElement), true);
 | |
|         }
 | |
| 
 | |
|         return $elements;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @return string
 | |
|      */
 | |
|     public function getID()
 | |
|     {
 | |
|         return $this->id;
 | |
|     }
 | |
| }
 | 
