/
WebDriverKeys.php
132 lines (123 loc) · 4.01 KB
/
WebDriverKeys.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
<?php
namespace Facebook\WebDriver;
/**
* Representations of pressable keys that aren't text.
* These are stored in the Unicode PUA (Private Use Area) code points.
* @see https://w3c.github.io/webdriver/#keyboard-actions
*/
class WebDriverKeys
{
const NULL = "\xEE\x80\x80";
const CANCEL = "\xEE\x80\x81";
const HELP = "\xEE\x80\x82";
const BACKSPACE = "\xEE\x80\x83";
const TAB = "\xEE\x80\x84";
const CLEAR = "\xEE\x80\x85";
const RETURN_KEY = "\xEE\x80\x86";
const ENTER = "\xEE\x80\x87";
const SHIFT = "\xEE\x80\x88";
const CONTROL = "\xEE\x80\x89";
const ALT = "\xEE\x80\x8A";
const PAUSE = "\xEE\x80\x8B";
const ESCAPE = "\xEE\x80\x8C";
const SPACE = "\xEE\x80\x8D";
const PAGE_UP = "\xEE\x80\x8E";
const PAGE_DOWN = "\xEE\x80\x8F";
const END = "\xEE\x80\x90";
const HOME = "\xEE\x80\x91";
const ARROW_LEFT = "\xEE\x80\x92";
const ARROW_UP = "\xEE\x80\x93";
const ARROW_RIGHT = "\xEE\x80\x94";
const ARROW_DOWN = "\xEE\x80\x95";
const INSERT = "\xEE\x80\x96";
const DELETE = "\xEE\x80\x97";
const SEMICOLON = "\xEE\x80\x98";
const EQUALS = "\xEE\x80\x99";
const NUMPAD0 = "\xEE\x80\x9A";
const NUMPAD1 = "\xEE\x80\x9B";
const NUMPAD2 = "\xEE\x80\x9C";
const NUMPAD3 = "\xEE\x80\x9D";
const NUMPAD4 = "\xEE\x80\x9E";
const NUMPAD5 = "\xEE\x80\x9F";
const NUMPAD6 = "\xEE\x80\xA0";
const NUMPAD7 = "\xEE\x80\xA1";
const NUMPAD8 = "\xEE\x80\xA2";
const NUMPAD9 = "\xEE\x80\xA3";
const MULTIPLY = "\xEE\x80\xA4";
const ADD = "\xEE\x80\xA5";
const SEPARATOR = "\xEE\x80\xA6";
const SUBTRACT = "\xEE\x80\xA7";
const DECIMAL = "\xEE\x80\xA8";
const DIVIDE = "\xEE\x80\xA9";
const F1 = "\xEE\x80\xB1";
const F2 = "\xEE\x80\xB2";
const F3 = "\xEE\x80\xB3";
const F4 = "\xEE\x80\xB4";
const F5 = "\xEE\x80\xB5";
const F6 = "\xEE\x80\xB6";
const F7 = "\xEE\x80\xB7";
const F8 = "\xEE\x80\xB8";
const F9 = "\xEE\x80\xB9";
const F10 = "\xEE\x80\xBA";
const F11 = "\xEE\x80\xBB";
const F12 = "\xEE\x80\xBC";
const META = "\xEE\x80\xBD";
const ZENKAKU_HANKAKU = "\xEE\x80\xC0";
const RIGHT_SHIFT = "\xEE\x81\x90";
const RIGHT_CONTROL = "\xEE\x81\x91";
const RIGHT_ALT = "\xEE\x81\x92";
const RIGHT_META = "\xEE\x81\x93";
const NUMPAD_PAGE_UP = "\xEE\x81\x94";
const NUMPAD_PAGE_DOWN = "\xEE\x81\x95";
const NUMPAD_END = "\xEE\x81\x96";
const NUMPAD_HOME = "\xEE\x81\x97";
const NUMPAD_ARROW_LEFT = "\xEE\x81\x98";
const NUMPAD_ARROW_UP = "\xEE\x81\x99";
const NUMPAD_ARROW_RIGHT = "\xEE\x81\x9A";
const NUMPAD_ARROW_DOWN = "\xEE\x81\x9B";
const NUMPAD_ARROW_INSERT = "\xEE\x81\x9C";
const NUMPAD_ARROW_DELETE = "\xEE\x81\x9D";
// Aliases
const LEFT_SHIFT = self::SHIFT;
const LEFT_CONTROL = self::CONTROL;
const LEFT_ALT = self::ALT;
const LEFT = self::ARROW_LEFT;
const UP = self::ARROW_UP;
const RIGHT = self::ARROW_RIGHT;
const DOWN = self::ARROW_DOWN;
const COMMAND = self::META;
/**
* Encode input of `sendKeys()` to appropriate format according to protocol.
*
* @param string|array|int|float $keys
* @param bool $isW3cCompliant
* @return array|string
*/
public static function encode($keys, $isW3cCompliant = false)
{
if (is_numeric($keys)) {
$keys = (string) $keys;
}
if (is_string($keys)) {
$keys = [$keys];
}
if (!is_array($keys)) {
if (!$isW3cCompliant) {
return [];
}
return '';
}
$encoded = [];
foreach ($keys as $key) {
if (is_array($key)) {
// handle key modifiers
$key = implode('', $key) . self::NULL; // the NULL clears the input state (eg. previous modifiers)
}
$encoded[] = (string) $key;
}
if (!$isW3cCompliant) {
return $encoded;
}
return implode('', $encoded);
}
}