playwright-ruby-client 1.28.1 → 1.29.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/documentation/docs/api/accessibility.md +9 -14
  3. data/documentation/docs/api/api_request_context.md +44 -41
  4. data/documentation/docs/api/api_response.md +13 -3
  5. data/documentation/docs/api/browser.md +24 -23
  6. data/documentation/docs/api/browser_context.md +71 -45
  7. data/documentation/docs/api/browser_type.md +21 -14
  8. data/documentation/docs/api/cdp_session.md +3 -5
  9. data/documentation/docs/api/console_message.md +7 -4
  10. data/documentation/docs/api/dialog.md +9 -5
  11. data/documentation/docs/api/download.md +19 -11
  12. data/documentation/docs/api/element_handle.md +125 -116
  13. data/documentation/docs/api/experimental/android.md +4 -5
  14. data/documentation/docs/api/experimental/android_device.md +11 -2
  15. data/documentation/docs/api/experimental/android_input.md +5 -0
  16. data/documentation/docs/api/file_chooser.md +6 -3
  17. data/documentation/docs/api/frame.md +182 -171
  18. data/documentation/docs/api/frame_locator.md +27 -38
  19. data/documentation/docs/api/js_handle.md +16 -10
  20. data/documentation/docs/api/keyboard.md +29 -16
  21. data/documentation/docs/api/locator.md +189 -140
  22. data/documentation/docs/api/mouse.md +9 -4
  23. data/documentation/docs/api/page.md +304 -289
  24. data/documentation/docs/api/playwright.md +8 -5
  25. data/documentation/docs/api/request.md +34 -15
  26. data/documentation/docs/api/response.md +27 -10
  27. data/documentation/docs/api/route.md +44 -12
  28. data/documentation/docs/api/selectors.md +5 -3
  29. data/documentation/docs/api/touchscreen.md +2 -0
  30. data/documentation/docs/api/tracing.md +11 -11
  31. data/documentation/docs/api/web_socket.md +9 -4
  32. data/documentation/docs/api/worker.md +12 -11
  33. data/documentation/docs/include/api_coverage.md +2 -0
  34. data/lib/playwright/channel_owners/api_request_context.rb +37 -2
  35. data/lib/playwright/channel_owners/browser_context.rb +22 -26
  36. data/lib/playwright/channel_owners/page.rb +35 -25
  37. data/lib/playwright/channel_owners/route.rb +28 -8
  38. data/lib/playwright/event_emitter.rb +6 -1
  39. data/lib/playwright/locator_impl.rb +8 -0
  40. data/lib/playwright/select_option_values.rb +2 -0
  41. data/lib/playwright/version.rb +2 -2
  42. data/lib/playwright_api/accessibility.rb +9 -13
  43. data/lib/playwright_api/android.rb +8 -6
  44. data/lib/playwright_api/android_device.rb +32 -7
  45. data/lib/playwright_api/android_input.rb +5 -0
  46. data/lib/playwright_api/android_socket.rb +4 -2
  47. data/lib/playwright_api/android_web_view.rb +5 -2
  48. data/lib/playwright_api/api_request.rb +6 -3
  49. data/lib/playwright_api/api_request_context.rb +46 -36
  50. data/lib/playwright_api/api_response.rb +13 -2
  51. data/lib/playwright_api/browser.rb +24 -16
  52. data/lib/playwright_api/browser_context.rb +76 -39
  53. data/lib/playwright_api/browser_type.rb +23 -13
  54. data/lib/playwright_api/cdp_session.rb +3 -4
  55. data/lib/playwright_api/console_message.rb +7 -2
  56. data/lib/playwright_api/dialog.rb +8 -4
  57. data/lib/playwright_api/download.rb +19 -9
  58. data/lib/playwright_api/element_handle.rb +116 -93
  59. data/lib/playwright_api/file_chooser.rb +6 -1
  60. data/lib/playwright_api/frame.rb +180 -135
  61. data/lib/playwright_api/frame_locator.rb +29 -32
  62. data/lib/playwright_api/js_handle.rb +16 -6
  63. data/lib/playwright_api/keyboard.rb +29 -14
  64. data/lib/playwright_api/locator.rb +183 -112
  65. data/lib/playwright_api/mouse.rb +9 -2
  66. data/lib/playwright_api/page.rb +301 -253
  67. data/lib/playwright_api/playwright.rb +11 -4
  68. data/lib/playwright_api/request.rb +34 -7
  69. data/lib/playwright_api/response.rb +27 -10
  70. data/lib/playwright_api/route.rb +44 -11
  71. data/lib/playwright_api/selectors.rb +6 -1
  72. data/lib/playwright_api/touchscreen.rb +2 -0
  73. data/lib/playwright_api/tracing.rb +11 -5
  74. data/lib/playwright_api/web_socket.rb +9 -4
  75. data/lib/playwright_api/worker.rb +16 -13
  76. data/playwright.gemspec +1 -1
  77. metadata +7 -7
@@ -4,6 +4,7 @@ sidebar_position: 10
4
4
 
5
5
  # WebSocket
6
6
 
7
+
7
8
  The [WebSocket](./web_socket) class represents websocket connections in the page.
8
9
 
9
10
  ## closed?
@@ -12,6 +13,7 @@ The [WebSocket](./web_socket) class represents websocket connections in the page
12
13
  def closed?
13
14
  ```
14
15
 
16
+
15
17
  Indicates that the web socket has been closed.
16
18
 
17
19
  ## url
@@ -20,6 +22,7 @@ Indicates that the web socket has been closed.
20
22
  def url
21
23
  ```
22
24
 
25
+
23
26
  Contains the URL of the WebSocket.
24
27
 
25
28
  ## expect_event
@@ -28,6 +31,7 @@ Contains the URL of the WebSocket.
28
31
  def expect_event(event, predicate: nil, timeout: nil, &block)
29
32
  ```
30
33
 
34
+
31
35
  Waits for event to fire and passes its value into the predicate function. Returns when the predicate returns truthy
32
36
  value. Will throw an error if the webSocket is closed before the event is fired. Returns the event data value.
33
37
 
@@ -37,8 +41,9 @@ value. Will throw an error if the webSocket is closed before the event is fired.
37
41
  def wait_for_event(event, predicate: nil, timeout: nil, &block)
38
42
  ```
39
43
 
40
- > NOTE: In most cases, you should use [WebSocket#wait_for_event](./web_socket#wait_for_event).
41
44
 
42
- Waits for given `event` to fire. If predicate is provided, it passes event's value into the `predicate` function and
43
- waits for `predicate(event)` to return a truthy value. Will throw an error if the socket is closed before the `event` is
44
- fired.
45
+ **NOTE**: In most cases, you should use [WebSocket#wait_for_event](./web_socket#wait_for_event).
46
+
47
+ Waits for given `event` to fire. If predicate is provided, it passes
48
+ event's value into the `predicate` function and waits for `predicate(event)` to return a truthy value.
49
+ Will throw an error if the socket is closed before the `event` is fired.
@@ -4,6 +4,7 @@ sidebar_position: 10
4
4
 
5
5
  # Worker
6
6
 
7
+
7
8
  The Worker class represents a [WebWorker](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API). `worker`
8
9
  event is emitted on the page object to signal a worker creation. `close` event is emitted on the worker object when the
9
10
  worker is gone.
@@ -22,22 +23,20 @@ page.workers.each do |worker|
22
23
  end
23
24
  ```
24
25
 
25
-
26
-
27
26
  ## evaluate
28
27
 
29
28
  ```
30
29
  def evaluate(expression, arg: nil)
31
30
  ```
32
31
 
32
+
33
33
  Returns the return value of `expression`.
34
34
 
35
- If the function passed to the [Worker#evaluate](./worker#evaluate) returns a [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise), then [Worker#evaluate](./worker#evaluate) would
36
- wait for the promise to resolve and return its value.
35
+ If the function passed to the [Worker#evaluate](./worker#evaluate) returns a [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise), then [Worker#evaluate](./worker#evaluate) would wait for the promise
36
+ to resolve and return its value.
37
37
 
38
- If the function passed to the [Worker#evaluate](./worker#evaluate) returns a non-[Serializable](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#description) value, then
39
- [Worker#evaluate](./worker#evaluate) returns `undefined`. Playwright also supports transferring some additional values that are
40
- not serializable by `JSON`: `-0`, `NaN`, `Infinity`, `-Infinity`.
38
+ If the function passed to the [Worker#evaluate](./worker#evaluate) returns a non-[Serializable](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#description) value, then [Worker#evaluate](./worker#evaluate) returns `undefined`. Playwright also supports transferring some
39
+ additional values that are not serializable by `JSON`: `-0`, `NaN`, `Infinity`, `-Infinity`.
41
40
 
42
41
  ## evaluate_handle
43
42
 
@@ -45,13 +44,15 @@ not serializable by `JSON`: `-0`, `NaN`, `Infinity`, `-Infinity`.
45
44
  def evaluate_handle(expression, arg: nil)
46
45
  ```
47
46
 
47
+
48
48
  Returns the return value of `expression` as a [JSHandle](./js_handle).
49
49
 
50
- The only difference between [Worker#evaluate](./worker#evaluate) and [Worker#evaluate_handle](./worker#evaluate_handle) is that
51
- [Worker#evaluate_handle](./worker#evaluate_handle) returns [JSHandle](./js_handle).
50
+ The only difference between [Worker#evaluate](./worker#evaluate) and
51
+ [Worker#evaluate_handle](./worker#evaluate_handle) is that [Worker#evaluate_handle](./worker#evaluate_handle)
52
+ returns [JSHandle](./js_handle).
52
53
 
53
- If the function passed to the [Worker#evaluate_handle](./worker#evaluate_handle) returns a [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise), then
54
- [Worker#evaluate_handle](./worker#evaluate_handle) would wait for the promise to resolve and return its value.
54
+ If the function passed to the [Worker#evaluate_handle](./worker#evaluate_handle) returns a [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise), then [Worker#evaluate_handle](./worker#evaluate_handle) would wait for
55
+ the promise to resolve and return its value.
55
56
 
56
57
  ## url
57
58
 
@@ -47,6 +47,7 @@
47
47
  * abort
48
48
  * continue
49
49
  * fallback
50
+ * fetch
50
51
  * fulfill
51
52
  * request
52
53
 
@@ -418,6 +419,7 @@
418
419
 
419
420
  ## Locator
420
421
 
422
+ * all
421
423
  * all_inner_texts
422
424
  * all_text_contents
423
425
  * blur
@@ -56,6 +56,42 @@ module Playwright
56
56
  if [ChannelOwners::Request, String].none? { |type| urlOrRequest.is_a?(type) }
57
57
  raise ArgumentError.new("First argument must be either URL string or Request")
58
58
  end
59
+ if urlOrRequest.is_a?(ChannelOwners::Request)
60
+ request = urlOrRequest
61
+ url = nil
62
+ else
63
+ url = urlOrRequest
64
+ request = nil
65
+ end
66
+ _inner_fetch(
67
+ request,
68
+ url,
69
+ data: data,
70
+ failOnStatusCode: failOnStatusCode,
71
+ form: form,
72
+ headers: headers,
73
+ ignoreHTTPSErrors: ignoreHTTPSErrors,
74
+ maxRedirects: maxRedirects,
75
+ method: method,
76
+ multipart: multipart,
77
+ params: params,
78
+ timeout: timeout,
79
+ )
80
+ end
81
+
82
+ private def _inner_fetch(
83
+ request,
84
+ url,
85
+ data: nil,
86
+ failOnStatusCode: nil,
87
+ form: nil,
88
+ headers: nil,
89
+ ignoreHTTPSErrors: nil,
90
+ maxRedirects: nil,
91
+ method: nil,
92
+ multipart: nil,
93
+ params: nil,
94
+ timeout: nil)
59
95
  if [data, form, multipart].compact.count > 1
60
96
  raise ArgumentError.new("Only one of 'data', 'form' or 'multipart' can be specified")
61
97
  end
@@ -63,10 +99,9 @@ module Playwright
63
99
  raise ArgumentError.new("'maxRedirects' should be greater than or equal to '0'")
64
100
  end
65
101
 
66
- request = urlOrRequest.is_a?(ChannelOwners::Request) ? urlOrRequest : nil
67
102
  headers_obj = headers || request&.headers
68
103
  fetch_params = {
69
- url: request&.url || urlOrRequest,
104
+ url: url || request.url,
70
105
  params: object_to_array(params),
71
106
  method: method || request&.method || 'GET',
72
107
  headers: headers_obj ? HttpHeaders.new(headers_obj).as_serialized : nil,
@@ -24,13 +24,7 @@ module Playwright
24
24
  @channel.on('bindingCall', ->(params) { on_binding(ChannelOwners::BindingCall.from(params['binding'])) })
25
25
  @channel.once('close', ->(_) { on_close })
26
26
  @channel.on('page', ->(params) { on_page(ChannelOwners::Page.from(params['page']) )})
27
- @channel.on('route', ->(params) {
28
- Concurrent::Promises.future {
29
- on_route(ChannelOwners::Route.from(params['route']))
30
- }.rescue do |err|
31
- puts err, err.backtrace
32
- end
33
- })
27
+ @channel.on('route', ->(params) { on_route(ChannelOwners::Route.from(params['route'])) })
34
28
  @channel.on('backgroundPage', ->(params) {
35
29
  on_background_page(ChannelOwners::Page.from(params['page']))
36
30
  })
@@ -93,31 +87,33 @@ module Playwright
93
87
  # It is not desired to use PlaywrightApi.wrap directly.
94
88
  # However it is a little difficult to define wrapper for `handler` parameter in generate_api.
95
89
  # Just a workaround...
96
- wrapped_route = PlaywrightApi.wrap(route)
97
-
98
- handled = @routes.any? do |handler_entry|
99
- next false unless handler_entry.match?(route.request.url)
90
+ Concurrent::Promises.future(PlaywrightApi.wrap(route)) do |wrapped_route|
91
+ handled = @routes.any? do |handler_entry|
92
+ next false unless handler_entry.match?(route.request.url)
100
93
 
101
- promise = Concurrent::Promises.resolvable_future
102
- route.send(:set_handling_future, promise)
94
+ promise = Concurrent::Promises.resolvable_future
95
+ route.send(:set_handling_future, promise)
103
96
 
104
- promise_handled = Concurrent::Promises.zip(
105
- promise,
106
- handler_entry.async_handle(wrapped_route)
107
- ).value!.first
97
+ promise_handled = Concurrent::Promises.zip(
98
+ promise,
99
+ handler_entry.async_handle(wrapped_route)
100
+ ).value!.first
108
101
 
109
- promise_handled
110
- end
102
+ promise_handled
103
+ end
111
104
 
112
- @routes.reject!(&:expired?)
113
- if @routes.count == 0
114
- @channel.async_send_message_to_server('setNetworkInterceptionEnabled', enabled: false)
115
- end
105
+ @routes.reject!(&:expired?)
106
+ if @routes.count == 0
107
+ @channel.async_send_message_to_server('setNetworkInterceptionEnabled', enabled: false)
108
+ end
116
109
 
117
- unless handled
118
- route.send(:async_continue_route).rescue do |err|
119
- puts err, err.backtrace
110
+ unless handled
111
+ route.send(:async_continue_route).rescue do |err|
112
+ puts err, err.backtrace
113
+ end
120
114
  end
115
+ end.rescue do |err|
116
+ puts err, err.backtrace
121
117
  end
122
118
  end
123
119
 
@@ -59,13 +59,7 @@ module Playwright
59
59
  @channel.on('pageError', ->(params) {
60
60
  emit(Events::Page::PageError, Error.parse(params['error']['error']))
61
61
  })
62
- @channel.on('route', ->(params) {
63
- Concurrent::Promises.future {
64
- on_route(ChannelOwners::Route.from(params['route']))
65
- }.rescue do |err|
66
- puts err, err.backtrace
67
- end
68
- })
62
+ @channel.on('route', ->(params) { on_route(ChannelOwners::Route.from(params['route'])) })
69
63
  @channel.on('video', method(:on_video))
70
64
  @channel.on('webSocket', ->(params) {
71
65
  emit(Events::Page::WebSocket, ChannelOwners::WebSocket.from(params['webSocket']))
@@ -108,29 +102,31 @@ module Playwright
108
102
  # It is not desired to use PlaywrightApi.wrap directly.
109
103
  # However it is a little difficult to define wrapper for `handler` parameter in generate_api.
110
104
  # Just a workaround...
111
- wrapped_route = PlaywrightApi.wrap(route)
105
+ Concurrent::Promises.future(PlaywrightApi.wrap(route)) do |wrapped_route|
106
+ handled = @routes.any? do |handler_entry|
107
+ next false unless handler_entry.match?(route.request.url)
112
108
 
113
- handled = @routes.any? do |handler_entry|
114
- next false unless handler_entry.match?(route.request.url)
109
+ promise = Concurrent::Promises.resolvable_future
110
+ route.send(:set_handling_future, promise)
115
111
 
116
- promise = Concurrent::Promises.resolvable_future
117
- route.send(:set_handling_future, promise)
112
+ promise_handled = Concurrent::Promises.zip(
113
+ promise,
114
+ handler_entry.async_handle(wrapped_route)
115
+ ).value!.first
118
116
 
119
- promise_handled = Concurrent::Promises.zip(
120
- promise,
121
- handler_entry.async_handle(wrapped_route)
122
- ).value!.first
123
-
124
- promise_handled
125
- end
117
+ promise_handled
118
+ end
126
119
 
127
- @routes.reject!(&:expired?)
128
- if @routes.count == 0
129
- @channel.async_send_message_to_server('setNetworkInterceptionEnabled', enabled: false)
130
- end
120
+ @routes.reject!(&:expired?)
121
+ if @routes.count == 0
122
+ @channel.async_send_message_to_server('setNetworkInterceptionEnabled', enabled: false)
123
+ end
131
124
 
132
- unless handled
133
- @browser_context.send(:on_route, route)
125
+ unless handled
126
+ @browser_context.send(:on_route, route)
127
+ end
128
+ end.rescue do |err|
129
+ puts err, err.backtrace
134
130
  end
135
131
  end
136
132
 
@@ -178,6 +174,20 @@ module Playwright
178
174
  video.send(:set_artifact, artifact)
179
175
  end
180
176
 
177
+ # @override
178
+ private def perform_event_emitter_callback(event, callback, args)
179
+ should_callback_async = [
180
+ Events::Page::Dialog,
181
+ Events::Page::Response,
182
+ ].freeze
183
+
184
+ if should_callback_async.include?(event)
185
+ Concurrent::Promises.future { super }
186
+ else
187
+ super
188
+ end
189
+ end
190
+
181
191
  def context
182
192
  @browser_context
183
193
  end
@@ -31,21 +31,27 @@ module Playwright
31
31
  body: nil,
32
32
  contentType: nil,
33
33
  headers: nil,
34
+ json: nil,
34
35
  path: nil,
35
36
  status: nil,
36
37
  response: nil)
37
38
  handling_with_result(true) do
38
- params = {
39
- contentType: contentType,
40
- status: status,
41
- }.compact
39
+ option_status = status
40
+ option_headers = headers
42
41
  option_body = body
43
42
 
43
+ if json
44
+ raise ArgumentError.new('Can specify either body or json parameters') if body
45
+ option_body = JSON.generate(json)
46
+ end
47
+
48
+ params = {}
49
+
44
50
  if response
45
- params[:status] ||= response.status
46
- params[:headers] ||= response.headers
51
+ option_status ||= response.status
52
+ option_headers ||= response.headers
47
53
 
48
- if !body && !path && response.is_a?(APIResponse)
54
+ if !body && !path && response.is_a?(APIResponseImpl)
49
55
  if response.send(:_request).send(:same_connection?, self)
50
56
  params[:fetchResponseUid] = response.send(:fetch_uid)
51
57
  else
@@ -63,9 +69,11 @@ module Playwright
63
69
  nil
64
70
  end
65
71
 
66
- param_headers = headers || {}
72
+ param_headers = option_headers || {}
67
73
  if contentType
68
74
  param_headers['content-type'] = contentType
75
+ elsif json
76
+ param_headers['content-type'] = 'application/json'
69
77
  elsif path
70
78
  param_headers['content-type'] = mime_type_for(path)
71
79
  end
@@ -81,6 +89,7 @@ module Playwright
81
89
  param_headers['content-length'] ||= content.length.to_s
82
90
  end
83
91
 
92
+ params[:status] = option_status || 200
84
93
  params[:headers] = HttpHeaders.new(param_headers).as_serialized
85
94
 
86
95
  @channel.async_send_message_to_server('fulfill', params)
@@ -100,6 +109,17 @@ module Playwright
100
109
  end
101
110
  end
102
111
 
112
+ def fetch(headers: nil, method: nil, postData: nil, url: nil)
113
+ api_request_context = request.frame.page.context.request
114
+ api_request_context.send(:_inner_fetch,
115
+ request,
116
+ url,
117
+ headers: headers,
118
+ method: method,
119
+ data: postData,
120
+ )
121
+ end
122
+
103
123
  def continue(headers: nil, method: nil, postData: nil, url: nil)
104
124
  overrides = {
105
125
  headers: headers,
@@ -38,7 +38,7 @@ module Playwright
38
38
  def emit(event, *args)
39
39
  handled = false
40
40
  (@__event_emitter ||= {})[event.to_s]&.each do |callback|
41
- callback.call(*args)
41
+ perform_event_emitter_callback(event, callback, args)
42
42
  handled = true
43
43
  end
44
44
  handled
@@ -48,6 +48,11 @@ module Playwright
48
48
  ((@__event_emitter ||= {})[event.to_s] ||= Set.new).count
49
49
  end
50
50
 
51
+ # can be overriden
52
+ private def perform_event_emitter_callback(event, callback, args)
53
+ callback.call(*args)
54
+ end
55
+
51
56
  # @param event [String]
52
57
  # @param callback [Proc]
53
58
  def on(event, callback)
@@ -263,6 +263,14 @@ module Playwright
263
263
  @frame.channel.send_message_to_server('blur', params)
264
264
  end
265
265
 
266
+ def all
267
+ Enumerator.new do |out|
268
+ count.times do |i|
269
+ out << nth(i)
270
+ end
271
+ end
272
+ end
273
+
266
274
  def count
267
275
  @frame.eval_on_selector_all(@selector, 'ee => ee.length')
268
276
  end
@@ -43,6 +43,8 @@ module Playwright
43
43
 
44
44
  if key == :element
45
45
  values.map(&:channel)
46
+ elsif key == :value
47
+ values.map { |value| { valueOrLabel: value } }
46
48
  else
47
49
  values.map { |value| { key => value } }
48
50
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Playwright
4
- VERSION = '1.28.1'
5
- COMPATIBLE_PLAYWRIGHT_VERSION = '1.28.1'
4
+ VERSION = '1.29.0'
5
+ COMPATIBLE_PLAYWRIGHT_VERSION = '1.29.1'
6
6
  end
@@ -1,7 +1,4 @@
1
1
  module Playwright
2
- # **DEPRECATED** This class is deprecated. Please use other libraries such as [Axe](https://www.deque.com/axe/) if you
3
- # need to test page accessibility. See our Node.js [guide](https://playwright.dev/docs/accessibility-testing) for
4
- # integration with Axe.
5
2
  #
6
3
  # The Accessibility class provides methods for inspecting Chromium's accessibility tree. The accessibility tree is used by
7
4
  # assistive technology such as [screen readers](https://en.wikipedia.org/wiki/Screen_reader) or
@@ -10,23 +7,22 @@ module Playwright
10
7
  # Accessibility is a very platform-specific thing. On different platforms, there are different screen readers that might
11
8
  # have wildly different output.
12
9
  #
13
- # Rendering engines of Chromium, Firefox and WebKit have a concept of "accessibility tree", which is then translated into
14
- # different platform-specific APIs. Accessibility namespace gives access to this Accessibility Tree.
10
+ # Rendering engines of Chromium, Firefox and WebKit have a concept of "accessibility tree", which is then translated into different
11
+ # platform-specific APIs. Accessibility namespace gives access to this Accessibility Tree.
15
12
  #
16
- # Most of the accessibility tree gets filtered out when converting from internal browser AX Tree to Platform-specific
17
- # AX-Tree or by assistive technologies themselves. By default, Playwright tries to approximate this filtering, exposing
18
- # only the "interesting" nodes of the tree.
13
+ # Most of the accessibility tree gets filtered out when converting from internal browser AX Tree to Platform-specific AX-Tree or by
14
+ # assistive technologies themselves. By default, Playwright tries to approximate this filtering, exposing only the
15
+ # "interesting" nodes of the tree.
19
16
  class Accessibility < PlaywrightApi
20
17
 
21
- # **DEPRECATED** This method is deprecated. Please use other libraries such as [Axe](https://www.deque.com/axe/) if you
22
- # need to test page accessibility. See our Node.js [guide](https://playwright.dev/docs/accessibility-testing) for
23
- # integration with Axe.
24
18
  #
25
19
  # Captures the current state of the accessibility tree. The returned object represents the root accessible node of the
26
20
  # page.
27
21
  #
28
- # > NOTE: The Chromium accessibility tree contains nodes that go unused on most platforms and by most screen readers.
29
- # Playwright will discard them as well for an easier to process tree, unless `interestingOnly` is set to `false`.
22
+ # **NOTE**: The Chromium accessibility tree contains nodes that go unused on most platforms and by most screen readers. Playwright
23
+ # will discard them as well for an easier to process tree, unless `interestingOnly` is set to `false`.
24
+ #
25
+ # **Usage**
30
26
  #
31
27
  # An example of dumping the entire accessibility tree:
32
28
  #
@@ -1,10 +1,10 @@
1
1
  module Playwright
2
+ #
2
3
  # Playwright has **experimental** support for Android automation. This includes Chrome for Android and Android WebView.
3
4
  #
4
5
  # *Requirements*
5
6
  # - Android device or AVD Emulator.
6
- # - [ADB daemon](https://developer.android.com/studio/command-line/adb) running and authenticated with your device.
7
- # Typically running `adb devices` is all you need to do.
7
+ # - [ADB daemon](https://developer.android.com/studio/command-line/adb) running and authenticated with your device. Typically running `adb devices` is all you need to do.
8
8
  # - [`Chrome 87`](https://play.google.com/store/apps/details?id=com.android.chrome) or newer installed on the device
9
9
  # - "Enable command line on non-rooted devices" enabled in `chrome://flags`.
10
10
  #
@@ -17,25 +17,27 @@ module Playwright
17
17
  #
18
18
  # An example of the Android automation script would be:
19
19
  #
20
- # Note that since you don't need Playwright to install web browsers when testing Android, you can omit browser download
21
- # via setting the following environment variable when installing Playwright:
20
+ # Note that since you don't need Playwright to install web browsers when testing Android, you can omit browser download via setting the following environment variable when installing Playwright:
22
21
  #
23
22
  # ```bash js
24
23
  # PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm i -D playwright
25
24
  # ```
26
25
  class Android < PlaywrightApi
27
26
 
28
- # This methods attaches Playwright to an existing Android device. Use [`method: Android.launchServer`] to launch a new
29
- # Android server instance.
27
+ #
28
+ # This methods attaches Playwright to an existing Android device.
29
+ # Use [`method: Android.launchServer`] to launch a new Android server instance.
30
30
  def connect(wsEndpoint, headers: nil, slowMo: nil, timeout: nil)
31
31
  raise NotImplementedError.new('connect is not implemented yet.')
32
32
  end
33
33
 
34
+ #
34
35
  # Returns the list of detected Android devices.
35
36
  def devices(host: nil, omitDriverInstall: nil, port: nil)
36
37
  wrap_impl(@impl.devices(host: unwrap_impl(host), omitDriverInstall: unwrap_impl(omitDriverInstall), port: unwrap_impl(port)))
37
38
  end
38
39
 
40
+ #
39
41
  # This setting will change the default maximum time for all the methods accepting `timeout` option.
40
42
  def set_default_timeout(timeout)
41
43
  raise NotImplementedError.new('set_default_timeout is not implemented yet.')