-
Notifications
You must be signed in to change notification settings - Fork 845
/
WebDriverKeys.php
132 lines (123 loc) · 4.54 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
{
public const NULL = "\xEE\x80\x80";
public const CANCEL = "\xEE\x80\x81";
public const HELP = "\xEE\x80\x82";
public const BACKSPACE = "\xEE\x80\x83";
public const TAB = "\xEE\x80\x84";
public const CLEAR = "\xEE\x80\x85";
public const RETURN_KEY = "\xEE\x80\x86";
public const ENTER = "\xEE\x80\x87";
public const SHIFT = "\xEE\x80\x88";
public const CONTROL = "\xEE\x80\x89";
public const ALT = "\xEE\x80\x8A";
public const PAUSE = "\xEE\x80\x8B";
public const ESCAPE = "\xEE\x80\x8C";
public const SPACE = "\xEE\x80\x8D";
public const PAGE_UP = "\xEE\x80\x8E";
public const PAGE_DOWN = "\xEE\x80\x8F";
public const END = "\xEE\x80\x90";
public const HOME = "\xEE\x80\x91";
public const ARROW_LEFT = "\xEE\x80\x92";
public const ARROW_UP = "\xEE\x80\x93";
public const ARROW_RIGHT = "\xEE\x80\x94";
public const ARROW_DOWN = "\xEE\x80\x95";
public const INSERT = "\xEE\x80\x96";
public const DELETE = "\xEE\x80\x97";
public const SEMICOLON = "\xEE\x80\x98";
public const EQUALS = "\xEE\x80\x99";
public const NUMPAD0 = "\xEE\x80\x9A";
public const NUMPAD1 = "\xEE\x80\x9B";
public const NUMPAD2 = "\xEE\x80\x9C";
public const NUMPAD3 = "\xEE\x80\x9D";
public const NUMPAD4 = "\xEE\x80\x9E";
public const NUMPAD5 = "\xEE\x80\x9F";
public const NUMPAD6 = "\xEE\x80\xA0";
public const NUMPAD7 = "\xEE\x80\xA1";
public const NUMPAD8 = "\xEE\x80\xA2";
public const NUMPAD9 = "\xEE\x80\xA3";
public const MULTIPLY = "\xEE\x80\xA4";
public const ADD = "\xEE\x80\xA5";
public const SEPARATOR = "\xEE\x80\xA6";
public const SUBTRACT = "\xEE\x80\xA7";
public const DECIMAL = "\xEE\x80\xA8";
public const DIVIDE = "\xEE\x80\xA9";
public const F1 = "\xEE\x80\xB1";
public const F2 = "\xEE\x80\xB2";
public const F3 = "\xEE\x80\xB3";
public const F4 = "\xEE\x80\xB4";
public const F5 = "\xEE\x80\xB5";
public const F6 = "\xEE\x80\xB6";
public const F7 = "\xEE\x80\xB7";
public const F8 = "\xEE\x80\xB8";
public const F9 = "\xEE\x80\xB9";
public const F10 = "\xEE\x80\xBA";
public const F11 = "\xEE\x80\xBB";
public const F12 = "\xEE\x80\xBC";
public const META = "\xEE\x80\xBD";
public const ZENKAKU_HANKAKU = "\xEE\x80\xC0";
public const RIGHT_SHIFT = "\xEE\x81\x90";
public const RIGHT_CONTROL = "\xEE\x81\x91";
public const RIGHT_ALT = "\xEE\x81\x92";
public const RIGHT_META = "\xEE\x81\x93";
public const NUMPAD_PAGE_UP = "\xEE\x81\x94";
public const NUMPAD_PAGE_DOWN = "\xEE\x81\x95";
public const NUMPAD_END = "\xEE\x81\x96";
public const NUMPAD_HOME = "\xEE\x81\x97";
public const NUMPAD_ARROW_LEFT = "\xEE\x81\x98";
public const NUMPAD_ARROW_UP = "\xEE\x81\x99";
public const NUMPAD_ARROW_RIGHT = "\xEE\x81\x9A";
public const NUMPAD_ARROW_DOWN = "\xEE\x81\x9B";
public const NUMPAD_ARROW_INSERT = "\xEE\x81\x9C";
public const NUMPAD_ARROW_DELETE = "\xEE\x81\x9D";
// Aliases
public const LEFT_SHIFT = self::SHIFT;
public const LEFT_CONTROL = self::CONTROL;
public const LEFT_ALT = self::ALT;
public const LEFT = self::ARROW_LEFT;
public const UP = self::ARROW_UP;
public const RIGHT = self::ARROW_RIGHT;
public const DOWN = self::ARROW_DOWN;
public 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);
}
}