playwright-ruby-client 0.0.3

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.
Files changed (63) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/CODE_OF_CONDUCT.md +74 -0
  4. data/Gemfile +8 -0
  5. data/LICENSE.txt +21 -0
  6. data/README.md +49 -0
  7. data/Rakefile +3 -0
  8. data/bin/console +11 -0
  9. data/bin/setup +8 -0
  10. data/lib/playwright.rb +39 -0
  11. data/lib/playwright/channel.rb +28 -0
  12. data/lib/playwright/channel_owner.rb +80 -0
  13. data/lib/playwright/channel_owners/android.rb +3 -0
  14. data/lib/playwright/channel_owners/binding_call.rb +4 -0
  15. data/lib/playwright/channel_owners/browser.rb +80 -0
  16. data/lib/playwright/channel_owners/browser_context.rb +13 -0
  17. data/lib/playwright/channel_owners/browser_type.rb +26 -0
  18. data/lib/playwright/channel_owners/chromium_browser.rb +8 -0
  19. data/lib/playwright/channel_owners/chromium_browser_context.rb +8 -0
  20. data/lib/playwright/channel_owners/electron.rb +3 -0
  21. data/lib/playwright/channel_owners/firefox_browser.rb +8 -0
  22. data/lib/playwright/channel_owners/frame.rb +44 -0
  23. data/lib/playwright/channel_owners/page.rb +53 -0
  24. data/lib/playwright/channel_owners/playwright.rb +57 -0
  25. data/lib/playwright/channel_owners/request.rb +5 -0
  26. data/lib/playwright/channel_owners/response.rb +5 -0
  27. data/lib/playwright/channel_owners/selectors.rb +4 -0
  28. data/lib/playwright/channel_owners/webkit_browser.rb +8 -0
  29. data/lib/playwright/connection.rb +238 -0
  30. data/lib/playwright/errors.rb +35 -0
  31. data/lib/playwright/event_emitter.rb +62 -0
  32. data/lib/playwright/events.rb +86 -0
  33. data/lib/playwright/playwright_api.rb +75 -0
  34. data/lib/playwright/transport.rb +86 -0
  35. data/lib/playwright/version.rb +5 -0
  36. data/lib/playwright_api/accessibility.rb +39 -0
  37. data/lib/playwright_api/binding_call.rb +5 -0
  38. data/lib/playwright_api/browser.rb +123 -0
  39. data/lib/playwright_api/browser_context.rb +285 -0
  40. data/lib/playwright_api/browser_type.rb +144 -0
  41. data/lib/playwright_api/cdp_session.rb +34 -0
  42. data/lib/playwright_api/chromium_browser_context.rb +26 -0
  43. data/lib/playwright_api/console_message.rb +22 -0
  44. data/lib/playwright_api/dialog.rb +46 -0
  45. data/lib/playwright_api/download.rb +54 -0
  46. data/lib/playwright_api/element_handle.rb +361 -0
  47. data/lib/playwright_api/file_chooser.rb +31 -0
  48. data/lib/playwright_api/frame.rb +526 -0
  49. data/lib/playwright_api/js_handle.rb +69 -0
  50. data/lib/playwright_api/keyboard.rb +101 -0
  51. data/lib/playwright_api/mouse.rb +47 -0
  52. data/lib/playwright_api/page.rb +986 -0
  53. data/lib/playwright_api/playwright.rb +35 -0
  54. data/lib/playwright_api/request.rb +119 -0
  55. data/lib/playwright_api/response.rb +61 -0
  56. data/lib/playwright_api/route.rb +53 -0
  57. data/lib/playwright_api/selectors.rb +51 -0
  58. data/lib/playwright_api/touchscreen.rb +10 -0
  59. data/lib/playwright_api/video.rb +14 -0
  60. data/lib/playwright_api/web_socket.rb +21 -0
  61. data/lib/playwright_api/worker.rb +34 -0
  62. data/playwright.gemspec +35 -0
  63. metadata +216 -0
@@ -0,0 +1,26 @@
1
+ require_relative './browser_context.rb'
2
+
3
+ module Playwright
4
+ # Chromium-specific features including background pages, service worker support, etc.
5
+ #
6
+ # ```js
7
+ # const backgroundPage = await context.waitForEvent('backgroundpage');
8
+ # ```
9
+ class ChromiumBrowserContext < BrowserContext
10
+
11
+ # All existing background pages in the context.
12
+ def background_pages
13
+ raise NotImplementedError.new('background_pages is not implemented yet.')
14
+ end
15
+
16
+ # Returns the newly created session.
17
+ def new_cdp_session(page)
18
+ raise NotImplementedError.new('new_cdp_session is not implemented yet.')
19
+ end
20
+
21
+ # All existing service workers in the context.
22
+ def service_workers
23
+ raise NotImplementedError.new('service_workers is not implemented yet.')
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,22 @@
1
+ module Playwright
2
+ # ConsoleMessage objects are dispatched by page via the page.on('console') event.
3
+ class ConsoleMessage < PlaywrightApi
4
+
5
+ def args
6
+ raise NotImplementedError.new('args is not implemented yet.')
7
+ end
8
+
9
+ def location
10
+ raise NotImplementedError.new('location is not implemented yet.')
11
+ end
12
+
13
+ def text
14
+ raise NotImplementedError.new('text is not implemented yet.')
15
+ end
16
+
17
+ # One of the following values: `'log'`, `'debug'`, `'info'`, `'error'`, `'warning'`, `'dir'`, `'dirxml'`, `'table'`, `'trace'`, `'clear'`, `'startGroup'`, `'startGroupCollapsed'`, `'endGroup'`, `'assert'`, `'profile'`, `'profileEnd'`, `'count'`, `'timeEnd'`.
18
+ def type_text
19
+ raise NotImplementedError.new('type_text is not implemented yet.')
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,46 @@
1
+ module Playwright
2
+ # Dialog objects are dispatched by page via the page.on('dialog') event.
3
+ # An example of using `Dialog` class:
4
+ #
5
+ # ```js
6
+ # const { chromium } = require('playwright'); // Or 'firefox' or 'webkit'.
7
+ #
8
+ # (async () => {
9
+ # const browser = await chromium.launch();
10
+ # const page = await browser.newPage();
11
+ # page.on('dialog', async dialog => {
12
+ # console.log(dialog.message());
13
+ # await dialog.dismiss();
14
+ # await browser.close();
15
+ # });
16
+ # page.evaluate(() => alert('1'));
17
+ # })();
18
+ # ```
19
+ class Dialog < PlaywrightApi
20
+
21
+ # Returns when the dialog has been accepted.
22
+ def accept(promptText: nil)
23
+ raise NotImplementedError.new('accept is not implemented yet.')
24
+ end
25
+
26
+ # If dialog is prompt, returns default prompt value. Otherwise, returns empty string.
27
+ def default_value
28
+ raise NotImplementedError.new('default_value is not implemented yet.')
29
+ end
30
+
31
+ # Returns when the dialog has been dismissed.
32
+ def dismiss
33
+ raise NotImplementedError.new('dismiss is not implemented yet.')
34
+ end
35
+
36
+ # A message displayed in the dialog.
37
+ def message
38
+ raise NotImplementedError.new('message is not implemented yet.')
39
+ end
40
+
41
+ # Returns dialog's type, can be one of `alert`, `beforeunload`, `confirm` or `prompt`.
42
+ def type_text
43
+ raise NotImplementedError.new('type_text is not implemented yet.')
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,54 @@
1
+ module Playwright
2
+ # Download objects are dispatched by page via the page.on('download') event.
3
+ # All the downloaded files belonging to the browser context are deleted when the browser context is closed. All downloaded files are deleted when the browser closes.
4
+ # Download event is emitted once the download starts. Download path becomes available once download completes:
5
+ #
6
+ # ```js
7
+ # const [ download ] = await Promise.all([
8
+ # page.waitForEvent('download'), // wait for download to start
9
+ # page.click('a')
10
+ # ]);
11
+ # // wait for download to complete
12
+ # const path = await download.path();
13
+ # ...
14
+ # ```
15
+ #
16
+ # **NOTE** Browser context **must** be created with the `acceptDownloads` set to `true` when user needs access to the downloaded content. If `acceptDownloads` is not set or set to `false`, download events are emitted, but the actual download is not performed and user has no access to the downloaded files.
17
+ class Download < PlaywrightApi
18
+
19
+ # Returns readable stream for current download or `null` if download failed.
20
+ def create_read_stream
21
+ raise NotImplementedError.new('create_read_stream is not implemented yet.')
22
+ end
23
+
24
+ # Deletes the downloaded file.
25
+ def delete
26
+ raise NotImplementedError.new('delete is not implemented yet.')
27
+ end
28
+
29
+ # Returns download error if any.
30
+ def failure
31
+ raise NotImplementedError.new('failure is not implemented yet.')
32
+ end
33
+
34
+ # Returns path to the downloaded file in case of successful download.
35
+ def path
36
+ raise NotImplementedError.new('path is not implemented yet.')
37
+ end
38
+
39
+ # Saves the download to a user-specified path.
40
+ def save_as(path)
41
+ raise NotImplementedError.new('save_as is not implemented yet.')
42
+ end
43
+
44
+ # Returns suggested filename for this download. It is typically computed by the browser from the `Content-Disposition` response header or the `download` attribute. See the spec on whatwg. Different browsers can use different logic for computing it.
45
+ def suggested_filename
46
+ raise NotImplementedError.new('suggested_filename is not implemented yet.')
47
+ end
48
+
49
+ # Returns downloaded url.
50
+ def url
51
+ raise NotImplementedError.new('url is not implemented yet.')
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,361 @@
1
+ require_relative './js_handle.rb'
2
+
3
+ module Playwright
4
+ # ElementHandle represents an in-page DOM element. ElementHandles can be created with the `page.$(selector)` method.
5
+ #
6
+ # ```js
7
+ # const { chromium } = require('playwright'); // Or 'firefox' or 'webkit'.
8
+ #
9
+ # (async () => {
10
+ # const browser = await chromium.launch();
11
+ # const page = await browser.newPage();
12
+ # await page.goto('https://example.com');
13
+ # const hrefElement = await page.$('a');
14
+ # await hrefElement.click();
15
+ # // ...
16
+ # })();
17
+ # ```
18
+ # ElementHandle prevents DOM element from garbage collection unless the handle is disposed with `jsHandle.dispose()`. ElementHandles are auto-disposed when their origin frame gets navigated.
19
+ # ElementHandle instances can be used as an argument in `page.$eval(selector, pageFunction[, arg])` and `page.evaluate(pageFunction[, arg])` methods.
20
+ class ElementHandle < JSHandle
21
+
22
+ # The method finds an element matching the specified selector in the `ElementHandle`'s subtree. See Working with selectors for more details. If no elements match the selector, returns `null`.
23
+ def S(selector)
24
+ raise NotImplementedError.new('S is not implemented yet.')
25
+ end
26
+
27
+ # The method finds all elements matching the specified selector in the `ElementHandle`s subtree. See Working with selectors for more details. If no elements match the selector, returns empty array.
28
+ def SS(selector)
29
+ raise NotImplementedError.new('SS is not implemented yet.')
30
+ end
31
+
32
+ # Returns the return value of `pageFunction`
33
+ # The method finds an element matching the specified selector in the `ElementHandle`s subtree and passes it as a first argument to `pageFunction`. See Working with selectors for more details. If no elements match the selector, the method throws an error.
34
+ # If `pageFunction` returns a Promise, then `frame.$eval` would wait for the promise to resolve and return its value.
35
+ # Examples:
36
+ #
37
+ # ```js
38
+ # const tweetHandle = await page.$('.tweet');
39
+ # expect(await tweetHandle.$eval('.like', node => node.innerText)).toBe('100');
40
+ # expect(await tweetHandle.$eval('.retweets', node => node.innerText)).toBe('10');
41
+ # ```
42
+ def Seval(selector, pageFunction, arg: nil)
43
+ raise NotImplementedError.new('Seval is not implemented yet.')
44
+ end
45
+
46
+ # Returns the return value of `pageFunction`
47
+ # The method finds all elements matching the specified selector in the `ElementHandle`'s subtree and passes an array of matched elements as a first argument to `pageFunction`. See Working with selectors for more details.
48
+ # If `pageFunction` returns a Promise, then `frame.$$eval` would wait for the promise to resolve and return its value.
49
+ # Examples:
50
+ # ```html
51
+ # <div class="feed">
52
+ # <div class="tweet">Hello!</div>
53
+ # <div class="tweet">Hi!</div>
54
+ # </div>
55
+ # ```
56
+ #
57
+ # ```js
58
+ # const feedHandle = await page.$('.feed');
59
+ # expect(await feedHandle.$$eval('.tweet', nodes => nodes.map(n => n.innerText))).toEqual(['Hello!', 'Hi!']);
60
+ # ```
61
+ def SSeval(selector, pageFunction, arg: nil)
62
+ raise NotImplementedError.new('SSeval is not implemented yet.')
63
+ end
64
+
65
+ # This method returns the bounding box of the element, or `null` if the element is not visible. The bounding box is calculated relative to the main frame viewport - which is usually the same as the browser window.
66
+ # Scrolling affects the returned bonding box, similarly to Element.getBoundingClientRect. That means `x` and/or `y` may be negative.
67
+ # Elements from child frames return the bounding box relative to the main frame, unlike the Element.getBoundingClientRect.
68
+ # Assuming the page is static, it is safe to use bounding box coordinates to perform input. For example, the following snippet should click the center of the element.
69
+ #
70
+ # ```js
71
+ # const box = await elementHandle.boundingBox();
72
+ # await page.mouse.click(box.x + box.width / 2, box.y + box.height / 2);
73
+ # ```
74
+ def bounding_box
75
+ raise NotImplementedError.new('bounding_box is not implemented yet.')
76
+ end
77
+
78
+ # This method checks the element by performing the following steps:
79
+ #
80
+ # Ensure that element is a checkbox or a radio input. If not, this method rejects. If the element is already checked, this method returns immediately.
81
+ # Wait for actionability checks on the element, unless `force` option is set.
82
+ # Scroll the element into view if needed.
83
+ # Use page.mouse to click in the center of the element.
84
+ # Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
85
+ # Ensure that the element is now checked. If not, this method rejects.
86
+ #
87
+ # If the element is detached from the DOM at any moment during the action, this method rejects.
88
+ # When all steps combined have not finished during the specified `timeout`, this method rejects with a TimeoutError. Passing zero timeout disables this.
89
+ def check(force: nil, noWaitAfter: nil, timeout: nil)
90
+ raise NotImplementedError.new('check is not implemented yet.')
91
+ end
92
+
93
+ # This method clicks the element by performing the following steps:
94
+ #
95
+ # Wait for actionability checks on the element, unless `force` option is set.
96
+ # Scroll the element into view if needed.
97
+ # Use page.mouse to click in the center of the element, or the specified `position`.
98
+ # Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
99
+ #
100
+ # If the element is detached from the DOM at any moment during the action, this method rejects.
101
+ # When all steps combined have not finished during the specified `timeout`, this method rejects with a TimeoutError. Passing zero timeout disables this.
102
+ def click(
103
+ button: nil,
104
+ clickCount: nil,
105
+ delay: nil,
106
+ position: nil,
107
+ modifiers: nil,
108
+ force: nil,
109
+ noWaitAfter: nil,
110
+ timeout: nil)
111
+ raise NotImplementedError.new('click is not implemented yet.')
112
+ end
113
+
114
+ # Returns the content frame for element handles referencing iframe nodes, or `null` otherwise
115
+ def content_frame
116
+ raise NotImplementedError.new('content_frame is not implemented yet.')
117
+ end
118
+
119
+ # This method double clicks the element by performing the following steps:
120
+ #
121
+ # Wait for actionability checks on the element, unless `force` option is set.
122
+ # Scroll the element into view if needed.
123
+ # Use page.mouse to double click in the center of the element, or the specified `position`.
124
+ # Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set. Note that if the first click of the `dblclick()` triggers a navigation event, this method will reject.
125
+ #
126
+ # If the element is detached from the DOM at any moment during the action, this method rejects.
127
+ # When all steps combined have not finished during the specified `timeout`, this method rejects with a TimeoutError. Passing zero timeout disables this.
128
+ #
129
+ # **NOTE** `elementHandle.dblclick()` dispatches two `click` events and a single `dblclick` event.
130
+ def dblclick(
131
+ button: nil,
132
+ delay: nil,
133
+ position: nil,
134
+ modifiers: nil,
135
+ force: nil,
136
+ noWaitAfter: nil,
137
+ timeout: nil)
138
+ raise NotImplementedError.new('dblclick is not implemented yet.')
139
+ end
140
+
141
+ # The snippet below dispatches the `click` event on the element. Regardless of the visibility state of the elment, `click` is dispatched. This is equivalend to calling element.click().
142
+ #
143
+ # ```js
144
+ # await elementHandle.dispatchEvent('click');
145
+ # ```
146
+ # Under the hood, it creates an instance of an event based on the given `type`, initializes it with `eventInit` properties and dispatches it on the element. Events are `composed`, `cancelable` and bubble by default.
147
+ # Since `eventInit` is event-specific, please refer to the events documentation for the lists of initial properties:
148
+ #
149
+ # DragEvent
150
+ # FocusEvent
151
+ # KeyboardEvent
152
+ # MouseEvent
153
+ # PointerEvent
154
+ # TouchEvent
155
+ # Event
156
+ #
157
+ # You can also specify `JSHandle` as the property value if you want live objects to be passed into the event:
158
+ #
159
+ # ```js
160
+ # // Note you can only create DataTransfer in Chromium and Firefox
161
+ # const dataTransfer = await page.evaluateHandle(() => new DataTransfer());
162
+ # await elementHandle.dispatchEvent('dragstart', { dataTransfer });
163
+ # ```
164
+ def dispatch_event(type, eventInit: nil)
165
+ raise NotImplementedError.new('dispatch_event is not implemented yet.')
166
+ end
167
+
168
+ # This method waits for actionability checks, focuses the element, fills it and triggers an `input` event after filling. If the element is not an `<input>`, `<textarea>` or `[contenteditable]` element, this method throws an error. Note that you can pass an empty string to clear the input field.
169
+ def fill(value, noWaitAfter: nil, timeout: nil)
170
+ raise NotImplementedError.new('fill is not implemented yet.')
171
+ end
172
+
173
+ # Calls focus on the element.
174
+ def focus
175
+ raise NotImplementedError.new('focus is not implemented yet.')
176
+ end
177
+
178
+ # Returns element attribute value.
179
+ def get_attribute(name)
180
+ raise NotImplementedError.new('get_attribute is not implemented yet.')
181
+ end
182
+
183
+ # This method hovers over the element by performing the following steps:
184
+ #
185
+ # Wait for actionability checks on the element, unless `force` option is set.
186
+ # Scroll the element into view if needed.
187
+ # Use page.mouse to hover over the center of the element, or the specified `position`.
188
+ # Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
189
+ #
190
+ # If the element is detached from the DOM at any moment during the action, this method rejects.
191
+ # When all steps combined have not finished during the specified `timeout`, this method rejects with a TimeoutError. Passing zero timeout disables this.
192
+ def hover(position: nil, modifiers: nil, force: nil, timeout: nil)
193
+ raise NotImplementedError.new('hover is not implemented yet.')
194
+ end
195
+
196
+ # Returns the `element.innerHTML`.
197
+ def inner_html
198
+ raise NotImplementedError.new('inner_html is not implemented yet.')
199
+ end
200
+
201
+ # Returns the `element.innerText`.
202
+ def inner_text
203
+ raise NotImplementedError.new('inner_text is not implemented yet.')
204
+ end
205
+
206
+ # Returns the frame containing the given element.
207
+ def owner_frame
208
+ raise NotImplementedError.new('owner_frame is not implemented yet.')
209
+ end
210
+
211
+ # Focuses the element, and then uses `keyboard.down(key)` and `keyboard.up(key)`.
212
+ # `key` can specify the intended keyboardEvent.key value or a single character to generate the text for. A superset of the `key` values can be found here. Examples of the keys are:
213
+ # `F1` - `F12`, `Digit0`- `Digit9`, `KeyA`- `KeyZ`, `Backquote`, `Minus`, `Equal`, `Backslash`, `Backspace`, `Tab`, `Delete`, `Escape`, `ArrowDown`, `End`, `Enter`, `Home`, `Insert`, `PageDown`, `PageUp`, `ArrowRight`, `ArrowUp`, etc.
214
+ # Following modification shortcuts are also suported: `Shift`, `Control`, `Alt`, `Meta`, `ShiftLeft`.
215
+ # Holding down `Shift` will type the text that corresponds to the `key` in the upper case.
216
+ # If `key` is a single character, it is case-sensitive, so the values `a` and `A` will generate different respective texts.
217
+ # Shortcuts such as `key: "Control+o"` or `key: "Control+Shift+T"` are supported as well. When speficied with the modifier, modifier is pressed and being held while the subsequent key is being pressed.
218
+ def press(key, delay: nil, noWaitAfter: nil, timeout: nil)
219
+ raise NotImplementedError.new('press is not implemented yet.')
220
+ end
221
+
222
+ # Returns the buffer with the captured screenshot.
223
+ # This method waits for the actionability checks, then scrolls element into view before taking a screenshot. If the element is detached from DOM, the method throws an error.
224
+ def screenshot(
225
+ path: nil,
226
+ type: nil,
227
+ quality: nil,
228
+ omitBackground: nil,
229
+ timeout: nil)
230
+ raise NotImplementedError.new('screenshot is not implemented yet.')
231
+ end
232
+
233
+ # This method waits for actionability checks, then tries to scroll element into view, unless it is completely visible as defined by IntersectionObserver's `ratio`.
234
+ # Throws when `elementHandle` does not point to an element connected to a Document or a ShadowRoot.
235
+ def scroll_into_view_if_needed(timeout: nil)
236
+ raise NotImplementedError.new('scroll_into_view_if_needed is not implemented yet.')
237
+ end
238
+
239
+ # Returns the array of option values that have been successfully selected.
240
+ # Triggers a `change` and `input` event once all the provided options have been selected. If element is not a `<select>` element, the method throws an error.
241
+ #
242
+ # ```js
243
+ # // single selection matching the value
244
+ # handle.selectOption('blue');
245
+ #
246
+ # // single selection matching both the value and the label
247
+ # handle.selectOption({ label: 'Blue' });
248
+ #
249
+ # // multiple selection
250
+ # handle.selectOption('red', 'green', 'blue');
251
+ #
252
+ # // multiple selection for blue, red and second option
253
+ # handle.selectOption({ value: 'blue' }, { index: 2 }, 'red');
254
+ # ```
255
+ def select_option(values, noWaitAfter: nil, timeout: nil)
256
+ raise NotImplementedError.new('select_option is not implemented yet.')
257
+ end
258
+
259
+ # This method waits for actionability checks, then focuses the element and selects all its text content.
260
+ def select_text(timeout: nil)
261
+ raise NotImplementedError.new('select_text is not implemented yet.')
262
+ end
263
+
264
+ # This method expects `elementHandle` to point to an input element.
265
+ # Sets the value of the file input to these file paths or files. If some of the `filePaths` are relative paths, then they are resolved relative to the the current working directory. For empty array, clears the selected files.
266
+ def set_input_files(files, noWaitAfter: nil, timeout: nil)
267
+ raise NotImplementedError.new('set_input_files is not implemented yet.')
268
+ end
269
+
270
+ # This method taps the element by performing the following steps:
271
+ #
272
+ # Wait for actionability checks on the element, unless `force` option is set.
273
+ # Scroll the element into view if needed.
274
+ # Use page.touchscreen to tap in the center of the element, or the specified `position`.
275
+ # Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
276
+ #
277
+ # If the element is detached from the DOM at any moment during the action, this method rejects.
278
+ # When all steps combined have not finished during the specified `timeout`, this method rejects with a TimeoutError. Passing zero timeout disables this.
279
+ #
280
+ # **NOTE** `elementHandle.tap()` requires that the `hasTouch` option of the browser context be set to true.
281
+ def tap_point(
282
+ position: nil,
283
+ modifiers: nil,
284
+ force: nil,
285
+ noWaitAfter: nil,
286
+ timeout: nil)
287
+ raise NotImplementedError.new('tap_point is not implemented yet.')
288
+ end
289
+
290
+ # Returns the `node.textContent`.
291
+ def text_content
292
+ raise NotImplementedError.new('text_content is not implemented yet.')
293
+ end
294
+
295
+ def to_string
296
+ raise NotImplementedError.new('to_string is not implemented yet.')
297
+ end
298
+
299
+ # Focuses the element, and then sends a `keydown`, `keypress`/`input`, and `keyup` event for each character in the text.
300
+ # To press a special key, like `Control` or `ArrowDown`, use `elementHandle.press(key[, options])`.
301
+ #
302
+ # ```js
303
+ # await elementHandle.type('Hello'); // Types instantly
304
+ # await elementHandle.type('World', {delay: 100}); // Types slower, like a user
305
+ # ```
306
+ # An example of typing into a text field and then submitting the form:
307
+ #
308
+ # ```js
309
+ # const elementHandle = await page.$('input');
310
+ # await elementHandle.type('some text');
311
+ # await elementHandle.press('Enter');
312
+ # ```
313
+ def type_text(text, delay: nil, noWaitAfter: nil, timeout: nil)
314
+ raise NotImplementedError.new('type_text is not implemented yet.')
315
+ end
316
+
317
+ # This method checks the element by performing the following steps:
318
+ #
319
+ # Ensure that element is a checkbox or a radio input. If not, this method rejects. If the element is already unchecked, this method returns immediately.
320
+ # Wait for actionability checks on the element, unless `force` option is set.
321
+ # Scroll the element into view if needed.
322
+ # Use page.mouse to click in the center of the element.
323
+ # Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
324
+ # Ensure that the element is now unchecked. If not, this method rejects.
325
+ #
326
+ # If the element is detached from the DOM at any moment during the action, this method rejects.
327
+ # When all steps combined have not finished during the specified `timeout`, this method rejects with a TimeoutError. Passing zero timeout disables this.
328
+ def uncheck(force: nil, noWaitAfter: nil, timeout: nil)
329
+ raise NotImplementedError.new('uncheck is not implemented yet.')
330
+ end
331
+
332
+ # Returns the element satisfies the `state`.
333
+ # Depending on the `state` parameter, this method waits for one of the actionability checks to pass. This method throws when the element is detached while waiting, unless waiting for the `"hidden"` state.
334
+ #
335
+ # `"visible"` Wait until the element is visible.
336
+ # `"hidden"` Wait until the element is not visible or not attached. Note that waiting for hidden does not throw when the element detaches.
337
+ # `"stable"` Wait until the element is both visible and stable.
338
+ # `"enabled"` Wait until the element is enabled.
339
+ # `"disabled"` Wait until the element is not enabled.
340
+ #
341
+ # If the element does not satisfy the condition for the `timeout` milliseconds, this method will throw.
342
+ def wait_for_element_state(state, timeout: nil)
343
+ raise NotImplementedError.new('wait_for_element_state is not implemented yet.')
344
+ end
345
+
346
+ # Returns element specified by selector satisfies `state` option. Returns `null` if waiting for `hidden` or `detached`.
347
+ # Wait for the `selector` relative to the element handle to satisfy `state` option (either appear/disappear from dom, or become visible/hidden). If at the moment of calling the method `selector` already satisfies the condition, the method will return immediately. If the selector doesn't satisfy the condition for the `timeout` milliseconds, the function will throw.
348
+ #
349
+ # ```js
350
+ # await page.setContent(`<div><span></span></div>`);
351
+ # const div = await page.$('div');
352
+ # // Waiting for the 'span' selector relative to the div.
353
+ # const span = await div.waitForSelector('span', { state: 'attached' });
354
+ # ```
355
+ #
356
+ # **NOTE** This method does not work across navigations, use `page.waitForSelector(selector[, options])` instead.
357
+ def wait_for_selector(selector, state: nil, timeout: nil)
358
+ raise NotImplementedError.new('wait_for_selector is not implemented yet.')
359
+ end
360
+ end
361
+ end