playwright-ruby-client 0.0.3 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +119 -12
- data/docs/api_coverage.md +354 -0
- data/lib/playwright.rb +8 -0
- data/lib/playwright/channel_owner.rb +16 -2
- data/lib/playwright/channel_owners/android.rb +10 -1
- data/lib/playwright/channel_owners/android_device.rb +163 -0
- data/lib/playwright/channel_owners/browser.rb +22 -29
- data/lib/playwright/channel_owners/browser_context.rb +43 -0
- data/lib/playwright/channel_owners/console_message.rb +21 -0
- data/lib/playwright/channel_owners/element_handle.rb +314 -0
- data/lib/playwright/channel_owners/frame.rb +466 -7
- data/lib/playwright/channel_owners/js_handle.rb +55 -0
- data/lib/playwright/channel_owners/page.rb +353 -5
- data/lib/playwright/channel_owners/request.rb +90 -0
- data/lib/playwright/channel_owners/webkit_browser.rb +1 -1
- data/lib/playwright/connection.rb +15 -14
- data/lib/playwright/errors.rb +1 -1
- data/lib/playwright/event_emitter.rb +13 -0
- data/lib/playwright/input_files.rb +42 -0
- data/lib/playwright/input_type.rb +19 -0
- data/lib/playwright/input_types/android_input.rb +19 -0
- data/lib/playwright/input_types/keyboard.rb +32 -0
- data/lib/playwright/input_types/mouse.rb +4 -0
- data/lib/playwright/input_types/touchscreen.rb +4 -0
- data/lib/playwright/javascript.rb +13 -0
- data/lib/playwright/javascript/expression.rb +67 -0
- data/lib/playwright/javascript/function.rb +67 -0
- data/lib/playwright/javascript/value_parser.rb +75 -0
- data/lib/playwright/javascript/value_serializer.rb +54 -0
- data/lib/playwright/playwright_api.rb +45 -25
- data/lib/playwright/select_option_values.rb +32 -0
- data/lib/playwright/timeout_settings.rb +19 -0
- data/lib/playwright/url_matcher.rb +19 -0
- data/lib/playwright/utils.rb +37 -0
- data/lib/playwright/version.rb +1 -1
- data/lib/playwright/wait_helper.rb +73 -0
- data/lib/playwright_api/accessibility.rb +60 -6
- data/lib/playwright_api/android.rb +33 -0
- data/lib/playwright_api/android_device.rb +78 -0
- data/lib/playwright_api/android_input.rb +25 -0
- data/lib/playwright_api/binding_call.rb +18 -0
- data/lib/playwright_api/browser.rb +136 -44
- data/lib/playwright_api/browser_context.rb +378 -51
- data/lib/playwright_api/browser_type.rb +137 -55
- data/lib/playwright_api/cdp_session.rb +32 -7
- data/lib/playwright_api/chromium_browser_context.rb +31 -0
- data/lib/playwright_api/console_message.rb +27 -7
- data/lib/playwright_api/dialog.rb +47 -3
- data/lib/playwright_api/download.rb +29 -5
- data/lib/playwright_api/element_handle.rb +429 -143
- data/lib/playwright_api/file_chooser.rb +13 -2
- data/lib/playwright_api/frame.rb +633 -179
- data/lib/playwright_api/js_handle.rb +97 -17
- data/lib/playwright_api/keyboard.rb +152 -24
- data/lib/playwright_api/mouse.rb +28 -3
- data/lib/playwright_api/page.rb +1183 -317
- data/lib/playwright_api/playwright.rb +174 -13
- data/lib/playwright_api/request.rb +115 -30
- data/lib/playwright_api/response.rb +22 -3
- data/lib/playwright_api/route.rb +63 -4
- data/lib/playwright_api/selectors.rb +29 -7
- data/lib/playwright_api/touchscreen.rb +2 -1
- data/lib/playwright_api/video.rb +11 -1
- data/lib/playwright_api/web_socket.rb +5 -5
- data/lib/playwright_api/worker.rb +29 -5
- data/playwright.gemspec +3 -0
- metadata +68 -2
@@ -1,47 +1,86 @@
|
|
1
1
|
module Playwright
|
2
|
-
# JSHandle represents an in-page JavaScript object. JSHandles can be created with the `
|
2
|
+
# JSHandle represents an in-page JavaScript object. JSHandles can be created with the [`method: Page.evaluateHandle`]
|
3
|
+
# method.
|
4
|
+
#
|
3
5
|
#
|
4
6
|
# ```js
|
5
7
|
# const windowHandle = await page.evaluateHandle(() => window);
|
6
8
|
# // ...
|
7
9
|
# ```
|
8
|
-
#
|
9
|
-
#
|
10
|
+
#
|
11
|
+
# ```python async
|
12
|
+
# window_handle = await page.evaluate_handle("window")
|
13
|
+
# # ...
|
14
|
+
# ```
|
15
|
+
#
|
16
|
+
# ```python sync
|
17
|
+
# window_handle = page.evaluate_handle("window")
|
18
|
+
# # ...
|
19
|
+
# ```
|
20
|
+
#
|
21
|
+
# JSHandle prevents the referenced JavaScript object being garbage collected unless the handle is exposed with
|
22
|
+
# [`method: JSHandle.dispose`]. JSHandles are auto-disposed when their origin frame gets navigated or the parent context
|
23
|
+
# gets destroyed.
|
24
|
+
#
|
25
|
+
# JSHandle instances can be used as an argument in [`method: Page.$eval`], [`method: Page.evaluate`] and
|
26
|
+
# [`method: Page.evaluateHandle`] methods.
|
10
27
|
class JSHandle < PlaywrightApi
|
11
28
|
|
12
|
-
# Returns either `null` or the object handle itself, if the object handle is an instance of ElementHandle
|
29
|
+
# Returns either `null` or the object handle itself, if the object handle is an instance of `ElementHandle`.
|
13
30
|
def as_element
|
14
|
-
|
31
|
+
wrap_impl(@impl.as_element)
|
15
32
|
end
|
16
33
|
|
17
34
|
# The `jsHandle.dispose` method stops referencing the element handle.
|
18
35
|
def dispose
|
19
|
-
|
36
|
+
wrap_impl(@impl.dispose)
|
20
37
|
end
|
21
38
|
|
22
39
|
# Returns the return value of `pageFunction`
|
40
|
+
#
|
23
41
|
# This method passes this handle as the first argument to `pageFunction`.
|
24
|
-
#
|
42
|
+
#
|
43
|
+
# If `pageFunction` returns a [Promise], then `handle.evaluate` would wait for the promise to resolve and return its
|
44
|
+
# value.
|
45
|
+
#
|
25
46
|
# Examples:
|
47
|
+
#
|
26
48
|
#
|
27
49
|
# ```js
|
28
50
|
# const tweetHandle = await page.$('.tweet .retweets');
|
29
|
-
# expect(await tweetHandle.evaluate(
|
51
|
+
# expect(await tweetHandle.evaluate(node => node.innerText)).toBe('10 retweets');
|
52
|
+
# ```
|
53
|
+
#
|
54
|
+
# ```python async
|
55
|
+
# tweet_handle = await page.query_selector(".tweet .retweets")
|
56
|
+
# assert await tweet_handle.evaluate("node => node.innerText") == "10 retweets"
|
57
|
+
# ```
|
58
|
+
#
|
59
|
+
# ```python sync
|
60
|
+
# tweet_handle = page.query_selector(".tweet .retweets")
|
61
|
+
# assert tweet_handle.evaluate("node => node.innerText") == "10 retweets"
|
30
62
|
# ```
|
31
63
|
def evaluate(pageFunction, arg: nil)
|
32
|
-
|
64
|
+
wrap_impl(@impl.evaluate(unwrap_impl(pageFunction), arg: unwrap_impl(arg)))
|
33
65
|
end
|
34
66
|
|
35
67
|
# Returns the return value of `pageFunction` as in-page object (JSHandle).
|
68
|
+
#
|
36
69
|
# This method passes this handle as the first argument to `pageFunction`.
|
37
|
-
#
|
38
|
-
#
|
39
|
-
#
|
70
|
+
#
|
71
|
+
# The only difference between `jsHandle.evaluate` and `jsHandle.evaluateHandle` is that `jsHandle.evaluateHandle` returns
|
72
|
+
# in-page object (JSHandle).
|
73
|
+
#
|
74
|
+
# If the function passed to the `jsHandle.evaluateHandle` returns a [Promise], then `jsHandle.evaluateHandle` would wait
|
75
|
+
# for the promise to resolve and return its value.
|
76
|
+
#
|
77
|
+
# See [`method: Page.evaluateHandle`] for more details.
|
40
78
|
def evaluate_handle(pageFunction, arg: nil)
|
41
|
-
|
79
|
+
wrap_impl(@impl.evaluate_handle(unwrap_impl(pageFunction), arg: unwrap_impl(arg)))
|
42
80
|
end
|
43
81
|
|
44
82
|
# The method returns a map with **own property names** as keys and JSHandle instances for the property values.
|
83
|
+
#
|
45
84
|
#
|
46
85
|
# ```js
|
47
86
|
# const handle = await page.evaluateHandle(() => ({window, document}));
|
@@ -50,20 +89,61 @@ module Playwright
|
|
50
89
|
# const documentHandle = properties.get('document');
|
51
90
|
# await handle.dispose();
|
52
91
|
# ```
|
92
|
+
#
|
93
|
+
# ```python async
|
94
|
+
# handle = await page.evaluate_handle("{window, document}")
|
95
|
+
# properties = await handle.get_properties()
|
96
|
+
# window_handle = properties.get("window")
|
97
|
+
# document_handle = properties.get("document")
|
98
|
+
# await handle.dispose()
|
99
|
+
# ```
|
100
|
+
#
|
101
|
+
# ```python sync
|
102
|
+
# handle = page.evaluate_handle("{window, document}")
|
103
|
+
# properties = handle.get_properties()
|
104
|
+
# window_handle = properties.get("window")
|
105
|
+
# document_handle = properties.get("document")
|
106
|
+
# handle.dispose()
|
107
|
+
# ```
|
53
108
|
def get_properties
|
54
|
-
|
109
|
+
wrap_impl(@impl.get_properties)
|
55
110
|
end
|
111
|
+
alias_method :properties, :get_properties
|
56
112
|
|
57
113
|
# Fetches a single property from the referenced object.
|
58
114
|
def get_property(propertyName)
|
59
|
-
|
115
|
+
wrap_impl(@impl.get_property(unwrap_impl(propertyName)))
|
60
116
|
end
|
61
117
|
|
62
118
|
# Returns a JSON representation of the object. If the object has a `toJSON` function, it **will not be called**.
|
63
119
|
#
|
64
|
-
#
|
120
|
+
# > NOTE: The method will return an empty JSON object if the referenced object is not stringifiable. It will throw an
|
121
|
+
# error if the object has circular references.
|
65
122
|
def json_value
|
66
|
-
|
123
|
+
wrap_impl(@impl.json_value)
|
124
|
+
end
|
125
|
+
|
126
|
+
# @nodoc
|
127
|
+
def after_initialize
|
128
|
+
wrap_impl(@impl.after_initialize)
|
129
|
+
end
|
130
|
+
|
131
|
+
# -- inherited from EventEmitter --
|
132
|
+
# @nodoc
|
133
|
+
def on(event, callback)
|
134
|
+
wrap_impl(@impl.on(unwrap_impl(event), unwrap_impl(callback)))
|
135
|
+
end
|
136
|
+
|
137
|
+
# -- inherited from EventEmitter --
|
138
|
+
# @nodoc
|
139
|
+
def off(event, callback)
|
140
|
+
wrap_impl(@impl.off(unwrap_impl(event), unwrap_impl(callback)))
|
141
|
+
end
|
142
|
+
|
143
|
+
# -- inherited from EventEmitter --
|
144
|
+
# @nodoc
|
145
|
+
def once(event, callback)
|
146
|
+
wrap_impl(@impl.once(unwrap_impl(event), unwrap_impl(callback)))
|
67
147
|
end
|
68
148
|
end
|
69
149
|
end
|
@@ -1,7 +1,12 @@
|
|
1
1
|
module Playwright
|
2
|
-
# Keyboard provides an api for managing a virtual keyboard. The high level api is `
|
3
|
-
#
|
2
|
+
# Keyboard provides an api for managing a virtual keyboard. The high level api is [`method: Keyboard.type`], which takes
|
3
|
+
# raw characters and generates proper keydown, keypress/input, and keyup events on your page.
|
4
|
+
#
|
5
|
+
# For finer control, you can use [`method: Keyboard.down`], [`method: Keyboard.up`], and [`method: Keyboard.insertText`]
|
6
|
+
# to manually fire events as if they were generated from a real keyboard.
|
7
|
+
#
|
4
8
|
# An example of holding down `Shift` in order to select and delete some text:
|
9
|
+
#
|
5
10
|
#
|
6
11
|
# ```js
|
7
12
|
# await page.keyboard.type('Hello World!');
|
@@ -15,14 +20,52 @@ module Playwright
|
|
15
20
|
# await page.keyboard.press('Backspace');
|
16
21
|
# // Result text will end up saying 'Hello!'
|
17
22
|
# ```
|
23
|
+
#
|
24
|
+
# ```python async
|
25
|
+
# await page.keyboard.type("Hello World!")
|
26
|
+
# await page.keyboard.press("ArrowLeft")
|
27
|
+
# await page.keyboard.down("Shift")
|
28
|
+
# for i in range(6):
|
29
|
+
# await page.keyboard.press("ArrowLeft")
|
30
|
+
# await page.keyboard.up("Shift")
|
31
|
+
# await page.keyboard.press("Backspace")
|
32
|
+
# # result text will end up saying "Hello!"
|
33
|
+
# ```
|
34
|
+
#
|
35
|
+
# ```python sync
|
36
|
+
# page.keyboard.type("Hello World!")
|
37
|
+
# page.keyboard.press("ArrowLeft")
|
38
|
+
# page.keyboard.down("Shift")
|
39
|
+
# for i in range(6):
|
40
|
+
# page.keyboard.press("ArrowLeft")
|
41
|
+
# page.keyboard.up("Shift")
|
42
|
+
# page.keyboard.press("Backspace")
|
43
|
+
# # result text will end up saying "Hello!"
|
44
|
+
# ```
|
45
|
+
#
|
18
46
|
# An example of pressing uppercase `A`
|
47
|
+
#
|
19
48
|
#
|
20
49
|
# ```js
|
21
50
|
# await page.keyboard.press('Shift+KeyA');
|
22
51
|
# // or
|
23
52
|
# await page.keyboard.press('Shift+A');
|
24
53
|
# ```
|
54
|
+
#
|
55
|
+
# ```python async
|
56
|
+
# await page.keyboard.press("Shift+KeyA")
|
57
|
+
# # or
|
58
|
+
# await page.keyboard.press("Shift+A")
|
59
|
+
# ```
|
60
|
+
#
|
61
|
+
# ```python sync
|
62
|
+
# page.keyboard.press("Shift+KeyA")
|
63
|
+
# # or
|
64
|
+
# page.keyboard.press("Shift+A")
|
65
|
+
# ```
|
66
|
+
#
|
25
67
|
# An example to trigger select-all with the keyboard
|
68
|
+
#
|
26
69
|
#
|
27
70
|
# ```js
|
28
71
|
# // on Windows and Linux
|
@@ -30,39 +73,87 @@ module Playwright
|
|
30
73
|
# // on macOS
|
31
74
|
# await page.keyboard.press('Meta+A');
|
32
75
|
# ```
|
76
|
+
#
|
77
|
+
# ```python async
|
78
|
+
# # on windows and linux
|
79
|
+
# await page.keyboard.press("Control+A")
|
80
|
+
# # on mac_os
|
81
|
+
# await page.keyboard.press("Meta+A")
|
82
|
+
# ```
|
83
|
+
#
|
84
|
+
# ```python sync
|
85
|
+
# # on windows and linux
|
86
|
+
# page.keyboard.press("Control+A")
|
87
|
+
# # on mac_os
|
88
|
+
# page.keyboard.press("Meta+A")
|
89
|
+
# ```
|
33
90
|
class Keyboard < PlaywrightApi
|
34
91
|
|
35
92
|
# Dispatches a `keydown` event.
|
36
|
-
#
|
37
|
-
# `
|
38
|
-
#
|
93
|
+
#
|
94
|
+
# `key` can specify the intended [keyboardEvent.key](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key)
|
95
|
+
# value or a single character to generate the text for. A superset of the `key` values can be found
|
96
|
+
# [here](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values). Examples of the keys are:
|
97
|
+
#
|
98
|
+
# `F1` - `F12`, `Digit0`- `Digit9`, `KeyA`- `KeyZ`, `Backquote`, `Minus`, `Equal`, `Backslash`, `Backspace`, `Tab`,
|
99
|
+
# `Delete`, `Escape`, `ArrowDown`, `End`, `Enter`, `Home`, `Insert`, `PageDown`, `PageUp`, `ArrowRight`, `ArrowUp`, etc.
|
100
|
+
#
|
101
|
+
# Following modification shortcuts are also supported: `Shift`, `Control`, `Alt`, `Meta`, `ShiftLeft`.
|
102
|
+
#
|
39
103
|
# Holding down `Shift` will type the text that corresponds to the `key` in the upper case.
|
40
|
-
# If `key` is a single character, it is case-sensitive, so the values `a` and `A` will generate different respective texts.
|
41
|
-
# If `key` is a modifier key, `Shift`, `Meta`, `Control`, or `Alt`, subsequent key presses will be sent with that modifier active. To release the modifier key, use `keyboard.up(key)`.
|
42
|
-
# After the key is pressed once, subsequent calls to `keyboard.down(key)` will have repeat set to true. To release the key, use `keyboard.up(key)`.
|
43
104
|
#
|
44
|
-
#
|
105
|
+
# If `key` is a single character, it is case-sensitive, so the values `a` and `A` will generate different respective
|
106
|
+
# texts.
|
107
|
+
#
|
108
|
+
# If `key` is a modifier key, `Shift`, `Meta`, `Control`, or `Alt`, subsequent key presses will be sent with that modifier
|
109
|
+
# active. To release the modifier key, use [`method: Keyboard.up`].
|
110
|
+
#
|
111
|
+
# After the key is pressed once, subsequent calls to [`method: Keyboard.down`] will have
|
112
|
+
# [repeat](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/repeat) set to true. To release the key, use
|
113
|
+
# [`method: Keyboard.up`].
|
114
|
+
#
|
115
|
+
# > NOTE: Modifier keys DO influence `keyboard.down`. Holding down `Shift` will type the text in upper case.
|
45
116
|
def down(key)
|
46
|
-
|
117
|
+
@impl.down(unwrap_impl(key))
|
47
118
|
end
|
48
119
|
|
49
120
|
# Dispatches only `input` event, does not emit the `keydown`, `keyup` or `keypress` events.
|
121
|
+
#
|
50
122
|
#
|
51
123
|
# ```js
|
52
124
|
# page.keyboard.insertText('嗨');
|
53
125
|
# ```
|
54
126
|
#
|
55
|
-
#
|
127
|
+
# ```python async
|
128
|
+
# await page.keyboard.insert_text("嗨")
|
129
|
+
# ```
|
130
|
+
#
|
131
|
+
# ```python sync
|
132
|
+
# page.keyboard.insert_text("嗨")
|
133
|
+
# ```
|
134
|
+
#
|
135
|
+
# > NOTE: Modifier keys DO NOT effect `keyboard.insertText`. Holding down `Shift` will not type the text in upper case.
|
56
136
|
def insert_text(text)
|
57
|
-
|
137
|
+
@impl.insert_text(unwrap_impl(text))
|
58
138
|
end
|
59
139
|
|
60
|
-
# `key` can specify the intended keyboardEvent.key
|
61
|
-
#
|
62
|
-
#
|
140
|
+
# `key` can specify the intended [keyboardEvent.key](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key)
|
141
|
+
# value or a single character to generate the text for. A superset of the `key` values can be found
|
142
|
+
# [here](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values). Examples of the keys are:
|
143
|
+
#
|
144
|
+
# `F1` - `F12`, `Digit0`- `Digit9`, `KeyA`- `KeyZ`, `Backquote`, `Minus`, `Equal`, `Backslash`, `Backspace`, `Tab`,
|
145
|
+
# `Delete`, `Escape`, `ArrowDown`, `End`, `Enter`, `Home`, `Insert`, `PageDown`, `PageUp`, `ArrowRight`, `ArrowUp`, etc.
|
146
|
+
#
|
147
|
+
# Following modification shortcuts are also supported: `Shift`, `Control`, `Alt`, `Meta`, `ShiftLeft`.
|
148
|
+
#
|
63
149
|
# Holding down `Shift` will type the text that corresponds to the `key` in the upper case.
|
64
|
-
#
|
65
|
-
#
|
150
|
+
#
|
151
|
+
# If `key` is a single character, it is case-sensitive, so the values `a` and `A` will generate different respective
|
152
|
+
# texts.
|
153
|
+
#
|
154
|
+
# Shortcuts such as `key: "Control+o"` or `key: "Control+Shift+T"` are supported as well. When speficied with the
|
155
|
+
# modifier, modifier is pressed and being held while the subsequent key is being pressed.
|
156
|
+
#
|
66
157
|
#
|
67
158
|
# ```js
|
68
159
|
# const page = await browser.newPage();
|
@@ -75,27 +166,64 @@ module Playwright
|
|
75
166
|
# await page.screenshot({ path: 'O.png' });
|
76
167
|
# await browser.close();
|
77
168
|
# ```
|
78
|
-
#
|
169
|
+
#
|
170
|
+
# ```python async
|
171
|
+
# page = await browser.new_page()
|
172
|
+
# await page.goto("https://keycode.info")
|
173
|
+
# await page.keyboard.press("a")
|
174
|
+
# await page.screenshot(path="a.png")
|
175
|
+
# await page.keyboard.press("ArrowLeft")
|
176
|
+
# await page.screenshot(path="arrow_left.png")
|
177
|
+
# await page.keyboard.press("Shift+O")
|
178
|
+
# await page.screenshot(path="o.png")
|
179
|
+
# await browser.close()
|
180
|
+
# ```
|
181
|
+
#
|
182
|
+
# ```python sync
|
183
|
+
# page = browser.new_page()
|
184
|
+
# page.goto("https://keycode.info")
|
185
|
+
# page.keyboard.press("a")
|
186
|
+
# page.screenshot(path="a.png")
|
187
|
+
# page.keyboard.press("ArrowLeft")
|
188
|
+
# page.screenshot(path="arrow_left.png")
|
189
|
+
# page.keyboard.press("Shift+O")
|
190
|
+
# page.screenshot(path="o.png")
|
191
|
+
# browser.close()
|
192
|
+
# ```
|
193
|
+
#
|
194
|
+
# Shortcut for [`method: Keyboard.down`] and [`method: Keyboard.up`].
|
79
195
|
def press(key, delay: nil)
|
80
|
-
|
196
|
+
@impl.press(unwrap_impl(key), delay: unwrap_impl(delay))
|
81
197
|
end
|
82
198
|
|
83
199
|
# Sends a `keydown`, `keypress`/`input`, and `keyup` event for each character in the text.
|
84
|
-
#
|
200
|
+
#
|
201
|
+
# To press a special key, like `Control` or `ArrowDown`, use [`method: Keyboard.press`].
|
202
|
+
#
|
85
203
|
#
|
86
204
|
# ```js
|
87
205
|
# await page.keyboard.type('Hello'); // Types instantly
|
88
206
|
# await page.keyboard.type('World', {delay: 100}); // Types slower, like a user
|
89
207
|
# ```
|
90
208
|
#
|
91
|
-
#
|
92
|
-
|
93
|
-
|
209
|
+
# ```python async
|
210
|
+
# await page.keyboard.type("Hello") # types instantly
|
211
|
+
# await page.keyboard.type("World", delay=100) # types slower, like a user
|
212
|
+
# ```
|
213
|
+
#
|
214
|
+
# ```python sync
|
215
|
+
# page.keyboard.type("Hello") # types instantly
|
216
|
+
# page.keyboard.type("World", delay=100) # types slower, like a user
|
217
|
+
# ```
|
218
|
+
#
|
219
|
+
# > NOTE: Modifier keys DO NOT effect `keyboard.type`. Holding down `Shift` will not type the text in upper case.
|
220
|
+
def type(text, delay: nil)
|
221
|
+
@impl.type(unwrap_impl(text), delay: unwrap_impl(delay))
|
94
222
|
end
|
95
223
|
|
96
224
|
# Dispatches a `keyup` event.
|
97
225
|
def up(key)
|
98
|
-
|
226
|
+
@impl.up(unwrap_impl(key))
|
99
227
|
end
|
100
228
|
end
|
101
229
|
end
|
data/lib/playwright_api/mouse.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
module Playwright
|
2
2
|
# The Mouse class operates in main-frame CSS pixels relative to the top-left corner of the viewport.
|
3
|
-
#
|
3
|
+
#
|
4
|
+
# Every `page` object has its own Mouse, accessible with [`property: Page.mouse`].
|
5
|
+
#
|
4
6
|
#
|
5
7
|
# ```js
|
6
8
|
# // Using ‘page.mouse’ to trace a 100x100 square.
|
@@ -12,9 +14,31 @@ module Playwright
|
|
12
14
|
# await page.mouse.move(0, 0);
|
13
15
|
# await page.mouse.up();
|
14
16
|
# ```
|
17
|
+
#
|
18
|
+
# ```python async
|
19
|
+
# # using ‘page.mouse’ to trace a 100x100 square.
|
20
|
+
# await page.mouse.move(0, 0)
|
21
|
+
# await page.mouse.down()
|
22
|
+
# await page.mouse.move(0, 100)
|
23
|
+
# await page.mouse.move(100, 100)
|
24
|
+
# await page.mouse.move(100, 0)
|
25
|
+
# await page.mouse.move(0, 0)
|
26
|
+
# await page.mouse.up()
|
27
|
+
# ```
|
28
|
+
#
|
29
|
+
# ```python sync
|
30
|
+
# # using ‘page.mouse’ to trace a 100x100 square.
|
31
|
+
# page.mouse.move(0, 0)
|
32
|
+
# page.mouse.down()
|
33
|
+
# page.mouse.move(0, 100)
|
34
|
+
# page.mouse.move(100, 100)
|
35
|
+
# page.mouse.move(100, 0)
|
36
|
+
# page.mouse.move(0, 0)
|
37
|
+
# page.mouse.up()
|
38
|
+
# ```
|
15
39
|
class Mouse < PlaywrightApi
|
16
40
|
|
17
|
-
# Shortcut for `
|
41
|
+
# Shortcut for [`method: Mouse.move`], [`method: Mouse.down`], [`method: Mouse.up`].
|
18
42
|
def click(
|
19
43
|
x,
|
20
44
|
y,
|
@@ -24,7 +48,8 @@ module Playwright
|
|
24
48
|
raise NotImplementedError.new('click is not implemented yet.')
|
25
49
|
end
|
26
50
|
|
27
|
-
# Shortcut for `
|
51
|
+
# Shortcut for [`method: Mouse.move`], [`method: Mouse.down`], [`method: Mouse.up`], [`method: Mouse.down`] and
|
52
|
+
# [`method: Mouse.up`].
|
28
53
|
def dblclick(x, y, button: nil, delay: nil)
|
29
54
|
raise NotImplementedError.new('dblclick is not implemented yet.')
|
30
55
|
end
|