1*04fd306cSNickeau<?php 2*04fd306cSNickeau 3*04fd306cSNickeaunamespace Facebook\WebDriver\Remote; 4*04fd306cSNickeau 5*04fd306cSNickeauuse Facebook\WebDriver\WebDriver; 6*04fd306cSNickeauuse Facebook\WebDriver\WebDriverKeyboard; 7*04fd306cSNickeauuse Facebook\WebDriver\WebDriverKeys; 8*04fd306cSNickeau 9*04fd306cSNickeau/** 10*04fd306cSNickeau * Execute keyboard commands for RemoteWebDriver. 11*04fd306cSNickeau */ 12*04fd306cSNickeauclass RemoteKeyboard implements WebDriverKeyboard 13*04fd306cSNickeau{ 14*04fd306cSNickeau /** @var RemoteExecuteMethod */ 15*04fd306cSNickeau private $executor; 16*04fd306cSNickeau /** @var WebDriver */ 17*04fd306cSNickeau private $driver; 18*04fd306cSNickeau /** @var bool */ 19*04fd306cSNickeau private $isW3cCompliant; 20*04fd306cSNickeau 21*04fd306cSNickeau /** 22*04fd306cSNickeau * @param bool $isW3cCompliant 23*04fd306cSNickeau */ 24*04fd306cSNickeau public function __construct(RemoteExecuteMethod $executor, WebDriver $driver, $isW3cCompliant = false) 25*04fd306cSNickeau { 26*04fd306cSNickeau $this->executor = $executor; 27*04fd306cSNickeau $this->driver = $driver; 28*04fd306cSNickeau $this->isW3cCompliant = $isW3cCompliant; 29*04fd306cSNickeau } 30*04fd306cSNickeau 31*04fd306cSNickeau /** 32*04fd306cSNickeau * Send keys to active element 33*04fd306cSNickeau * @param string|array $keys 34*04fd306cSNickeau * @return $this 35*04fd306cSNickeau */ 36*04fd306cSNickeau public function sendKeys($keys) 37*04fd306cSNickeau { 38*04fd306cSNickeau if ($this->isW3cCompliant) { 39*04fd306cSNickeau $activeElement = $this->driver->switchTo()->activeElement(); 40*04fd306cSNickeau $activeElement->sendKeys($keys); 41*04fd306cSNickeau } else { 42*04fd306cSNickeau $this->executor->execute(DriverCommand::SEND_KEYS_TO_ACTIVE_ELEMENT, [ 43*04fd306cSNickeau 'value' => WebDriverKeys::encode($keys), 44*04fd306cSNickeau ]); 45*04fd306cSNickeau } 46*04fd306cSNickeau 47*04fd306cSNickeau return $this; 48*04fd306cSNickeau } 49*04fd306cSNickeau 50*04fd306cSNickeau /** 51*04fd306cSNickeau * Press a modifier key 52*04fd306cSNickeau * 53*04fd306cSNickeau * @see WebDriverKeys 54*04fd306cSNickeau * @param string $key 55*04fd306cSNickeau * @return $this 56*04fd306cSNickeau */ 57*04fd306cSNickeau public function pressKey($key) 58*04fd306cSNickeau { 59*04fd306cSNickeau if ($this->isW3cCompliant) { 60*04fd306cSNickeau $this->executor->execute(DriverCommand::ACTIONS, [ 61*04fd306cSNickeau 'actions' => [ 62*04fd306cSNickeau [ 63*04fd306cSNickeau 'type' => 'key', 64*04fd306cSNickeau 'id' => 'keyboard', 65*04fd306cSNickeau 'actions' => [['type' => 'keyDown', 'value' => $key]], 66*04fd306cSNickeau ], 67*04fd306cSNickeau ], 68*04fd306cSNickeau ]); 69*04fd306cSNickeau } else { 70*04fd306cSNickeau $this->executor->execute(DriverCommand::SEND_KEYS_TO_ACTIVE_ELEMENT, [ 71*04fd306cSNickeau 'value' => [(string) $key], 72*04fd306cSNickeau ]); 73*04fd306cSNickeau } 74*04fd306cSNickeau 75*04fd306cSNickeau return $this; 76*04fd306cSNickeau } 77*04fd306cSNickeau 78*04fd306cSNickeau /** 79*04fd306cSNickeau * Release a modifier key 80*04fd306cSNickeau * 81*04fd306cSNickeau * @see WebDriverKeys 82*04fd306cSNickeau * @param string $key 83*04fd306cSNickeau * @return $this 84*04fd306cSNickeau */ 85*04fd306cSNickeau public function releaseKey($key) 86*04fd306cSNickeau { 87*04fd306cSNickeau if ($this->isW3cCompliant) { 88*04fd306cSNickeau $this->executor->execute(DriverCommand::ACTIONS, [ 89*04fd306cSNickeau 'actions' => [ 90*04fd306cSNickeau [ 91*04fd306cSNickeau 'type' => 'key', 92*04fd306cSNickeau 'id' => 'keyboard', 93*04fd306cSNickeau 'actions' => [['type' => 'keyUp', 'value' => $key]], 94*04fd306cSNickeau ], 95*04fd306cSNickeau ], 96*04fd306cSNickeau ]); 97*04fd306cSNickeau } else { 98*04fd306cSNickeau $this->executor->execute(DriverCommand::SEND_KEYS_TO_ACTIVE_ELEMENT, [ 99*04fd306cSNickeau 'value' => [(string) $key], 100*04fd306cSNickeau ]); 101*04fd306cSNickeau } 102*04fd306cSNickeau 103*04fd306cSNickeau return $this; 104*04fd306cSNickeau } 105*04fd306cSNickeau} 106