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; } }