xref: /template/strap/vendor/php-webdriver/webdriver/lib/Remote/RemoteKeyboard.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
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