playwright-ruby-client 1.15.beta2 → 1.15.beta3
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/documentation/docs/api/mouse.md +11 -0
- data/documentation/docs/api/request.md +10 -3
- data/documentation/docs/api/response.md +20 -2
- data/documentation/docs/include/api_coverage.md +4 -0
- data/lib/playwright/channel_owners/request.rb +27 -12
- data/lib/playwright/channel_owners/response.rb +17 -10
- data/lib/playwright/http_headers.rb +0 -11
- data/lib/playwright/mouse_impl.rb +9 -0
- data/lib/playwright/raw_headers.rb +61 -0
- data/lib/playwright/version.rb +1 -1
- data/lib/playwright.rb +1 -0
- data/lib/playwright_api/cdp_session.rb +1 -1
- data/lib/playwright_api/mouse.rb +8 -0
- data/lib/playwright_api/request.rb +9 -5
- data/lib/playwright_api/response.rb +14 -7
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '028909fb1fc1321105a1172d46c02ccafbb071e5e630b5c5b616a9e76a695a91'
|
4
|
+
data.tar.gz: cadf29fb85714aac062c481b0c677709dc620141af57b0641d065a379210e93b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: efe23218fd7aa8a5eee431af6fac5046420b222f67e196cd46cf44127bafe6a4db88f3ae56f71b1fe74d874fd385f1600009335e59be9c2a5bbca0ad4eacd13a
|
7
|
+
data.tar.gz: d0c78be5d3f3c662cd4b68bbbbf5624ce9febdf4be39740812f26573f14e68c5111fef7777b7ae2a5839c1723d3d20b91d680a2d691c791afcec01efe3630de2
|
@@ -66,3 +66,14 @@ def up(button: nil, clickCount: nil)
|
|
66
66
|
```
|
67
67
|
|
68
68
|
Dispatches a `mouseup` event.
|
69
|
+
|
70
|
+
## wheel
|
71
|
+
|
72
|
+
```
|
73
|
+
def wheel(deltaX, deltaY)
|
74
|
+
```
|
75
|
+
|
76
|
+
Dispatches a `wheel` event.
|
77
|
+
|
78
|
+
> NOTE: Wheel events may cause scrolling if they are not handled, and this method does not wait for the scrolling to
|
79
|
+
finish before returning.
|
@@ -65,7 +65,15 @@ def headers_array
|
|
65
65
|
```
|
66
66
|
|
67
67
|
An array with all the request HTTP headers associated with this request. Unlike [Request#all_headers](./request#all_headers), header
|
68
|
-
names are
|
68
|
+
names are NOT lower-cased. Headers with multiple entries, such as `Set-Cookie`, appear in the array multiple times.
|
69
|
+
|
70
|
+
## header_value
|
71
|
+
|
72
|
+
```
|
73
|
+
def header_value(name)
|
74
|
+
```
|
75
|
+
|
76
|
+
Returns the value of the header matching the name. The name is case insensitive.
|
69
77
|
|
70
78
|
## navigation_request?
|
71
79
|
|
@@ -179,8 +187,7 @@ Returns the matching [Response](./response) object, or `null` if the response wa
|
|
179
187
|
def sizes
|
180
188
|
```
|
181
189
|
|
182
|
-
Returns resource size information for given request.
|
183
|
-
[Response#finished](./response#finished) to ensure the info is available.
|
190
|
+
Returns resource size information for given request.
|
184
191
|
|
185
192
|
## timing
|
186
193
|
|
@@ -28,7 +28,7 @@ Returns the buffer with response body.
|
|
28
28
|
def finished
|
29
29
|
```
|
30
30
|
|
31
|
-
Waits for this response to finish, returns
|
31
|
+
Waits for this response to finish, returns always `null`.
|
32
32
|
|
33
33
|
## frame
|
34
34
|
|
@@ -53,7 +53,25 @@ def headers_array
|
|
53
53
|
```
|
54
54
|
|
55
55
|
An array with all the request HTTP headers associated with this response. Unlike [Response#all_headers](./response#all_headers), header
|
56
|
-
names are
|
56
|
+
names are NOT lower-cased. Headers with multiple entries, such as `Set-Cookie`, appear in the array multiple times.
|
57
|
+
|
58
|
+
## header_value
|
59
|
+
|
60
|
+
```
|
61
|
+
def header_value(name)
|
62
|
+
```
|
63
|
+
|
64
|
+
Returns the value of the header matching the name. The name is case insensitive. If multiple headers have the same name
|
65
|
+
(except `set-cookie`), they are returned as a list separated by `, `. For `set-cookie`, the `\n` separator is used. If
|
66
|
+
no headers are found, `null` is returned.
|
67
|
+
|
68
|
+
## header_values
|
69
|
+
|
70
|
+
```
|
71
|
+
def header_values(name)
|
72
|
+
```
|
73
|
+
|
74
|
+
Returns all values of the headers matching the name, for example `set-cookie`. The name is case insensitive.
|
57
75
|
|
58
76
|
## json
|
59
77
|
|
@@ -7,6 +7,7 @@
|
|
7
7
|
* frame
|
8
8
|
* headers
|
9
9
|
* headers_array
|
10
|
+
* header_value
|
10
11
|
* navigation_request?
|
11
12
|
* method
|
12
13
|
* post_data
|
@@ -28,6 +29,8 @@
|
|
28
29
|
* frame
|
29
30
|
* headers
|
30
31
|
* headers_array
|
32
|
+
* header_value
|
33
|
+
* header_values
|
31
34
|
* json
|
32
35
|
* ok
|
33
36
|
* request
|
@@ -67,6 +70,7 @@
|
|
67
70
|
* down
|
68
71
|
* move
|
69
72
|
* up
|
73
|
+
* wheel
|
70
74
|
|
71
75
|
## Touchscreen
|
72
76
|
|
@@ -1,14 +1,12 @@
|
|
1
1
|
require 'base64'
|
2
|
-
require_relative '../http_headers'
|
3
2
|
|
4
3
|
module Playwright
|
5
4
|
# @ref https://github.com/microsoft/playwright-python/blob/master/playwright/_impl/_network.py
|
6
5
|
define_channel_owner :Request do
|
7
|
-
include HttpHeaders::Parser
|
8
|
-
|
9
6
|
private def after_initialize
|
10
7
|
@redirected_from = ChannelOwners::Request.from_nullable(@initializer['redirectedFrom'])
|
11
8
|
@redirected_from&.send(:update_redirected_to, self)
|
9
|
+
@provisional_headers = RawHeaders.new(@initializer['headers'])
|
12
10
|
@timing = {
|
13
11
|
startTime: 0,
|
14
12
|
domainLookupStart: -1,
|
@@ -81,26 +79,43 @@ module Playwright
|
|
81
79
|
attr_reader :redirected_from, :redirected_to, :timing
|
82
80
|
|
83
81
|
def headers
|
84
|
-
|
82
|
+
@provisional_headers.headers
|
85
83
|
end
|
86
84
|
|
87
|
-
|
88
|
-
|
85
|
+
# @return [RawHeaders|nil]
|
86
|
+
private def actual_headers
|
87
|
+
@actual_headers ||= response&.send(:raw_request_headers)
|
89
88
|
end
|
90
89
|
|
91
90
|
def all_headers
|
92
|
-
if
|
93
|
-
|
91
|
+
if actual_headers
|
92
|
+
actual_headers.headers
|
94
93
|
else
|
95
|
-
|
94
|
+
@provisional_headers.headers
|
96
95
|
end
|
97
96
|
end
|
98
97
|
|
99
98
|
def headers_array
|
100
|
-
if
|
101
|
-
|
99
|
+
if actual_headers
|
100
|
+
actual_headers.headers_array
|
101
|
+
else
|
102
|
+
@provisional_headers.headers_array
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def header_value(name)
|
107
|
+
if actual_headers
|
108
|
+
actual_headers.get(name)
|
109
|
+
else
|
110
|
+
@provisional_headers.get(name)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def header_values(name)
|
115
|
+
if actual_headers
|
116
|
+
actual_headers.get_all(name)
|
102
117
|
else
|
103
|
-
|
118
|
+
@provisional_headers.get_all(name)
|
104
119
|
end
|
105
120
|
end
|
106
121
|
|
@@ -1,13 +1,11 @@
|
|
1
1
|
require 'base64'
|
2
2
|
require 'json'
|
3
|
-
require_relative '../http_headers'
|
4
3
|
|
5
4
|
module Playwright
|
6
5
|
# @ref https://github.com/microsoft/playwright-python/blob/master/playwright/_impl/_network.py
|
7
6
|
define_channel_owner :Response do
|
8
|
-
include HttpHeaders::Parser
|
9
|
-
|
10
7
|
private def after_initialize
|
8
|
+
@provisional_headers = RawHeaders.new(@initializer['headers'])
|
11
9
|
@request = ChannelOwners::Request.from(@initializer['request'])
|
12
10
|
timing = @initializer['timing']
|
13
11
|
@request.send(:update_timings,
|
@@ -42,27 +40,36 @@ module Playwright
|
|
42
40
|
end
|
43
41
|
|
44
42
|
def headers
|
45
|
-
|
43
|
+
@provisional_headers.headers
|
46
44
|
end
|
47
45
|
|
48
|
-
|
49
|
-
|
46
|
+
# @return [RawHeaders]
|
47
|
+
private def actual_headers
|
48
|
+
@actual_headers ||= raw_response_headers
|
50
49
|
end
|
51
50
|
|
52
51
|
private def raw_request_headers
|
53
|
-
@channel.send_message_to_server('rawRequestHeaders')
|
52
|
+
RawHeaders.new(@channel.send_message_to_server('rawRequestHeaders'))
|
54
53
|
end
|
55
54
|
|
56
55
|
private def raw_response_headers
|
57
|
-
@channel.send_message_to_server('rawResponseHeaders')
|
56
|
+
RawHeaders.new(@channel.send_message_to_server('rawResponseHeaders'))
|
58
57
|
end
|
59
58
|
|
60
59
|
def all_headers
|
61
|
-
|
60
|
+
actual_headers.headers
|
62
61
|
end
|
63
62
|
|
64
63
|
def headers_array
|
65
|
-
|
64
|
+
actual_headers.headers_array
|
65
|
+
end
|
66
|
+
|
67
|
+
def header_value(name)
|
68
|
+
actual_headers.get(name)
|
69
|
+
end
|
70
|
+
|
71
|
+
def header_values(name)
|
72
|
+
actual_headers.get_all(name)
|
66
73
|
end
|
67
74
|
|
68
75
|
def server_addr
|
@@ -10,16 +10,5 @@ module Playwright
|
|
10
10
|
{ name: key, value: value }
|
11
11
|
end
|
12
12
|
end
|
13
|
-
|
14
|
-
module Parser
|
15
|
-
def parse_headers_as_array(serialized_headers, downcase)
|
16
|
-
serialized_headers.map do |header|
|
17
|
-
name = downcase ? header['name'].downcase : header['name']
|
18
|
-
value = header['value']
|
19
|
-
|
20
|
-
[name, value]
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
13
|
end
|
25
14
|
end
|
@@ -44,5 +44,14 @@ module Playwright
|
|
44
44
|
def dblclick(x, y, button: nil, delay: nil)
|
45
45
|
click(x, y, button: button, clickCount: 2, delay: delay)
|
46
46
|
end
|
47
|
+
|
48
|
+
def wheel(deltaX, deltaY)
|
49
|
+
params = {
|
50
|
+
deltaX: deltaX,
|
51
|
+
deltaY: deltaY,
|
52
|
+
}
|
53
|
+
@channel.send_message_to_server('mouseWheel', params)
|
54
|
+
nil
|
55
|
+
end
|
47
56
|
end
|
48
57
|
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module Playwright
|
2
|
+
class RawHeaders
|
3
|
+
def initialize(headers_array)
|
4
|
+
h_array = []
|
5
|
+
h_map = {}
|
6
|
+
headers_array.each do |header|
|
7
|
+
name = header['name']
|
8
|
+
key = name.downcase
|
9
|
+
value = header['value']
|
10
|
+
|
11
|
+
h_array << [name, value]
|
12
|
+
h_map[key] ||= []
|
13
|
+
h_map[key] << value
|
14
|
+
end
|
15
|
+
|
16
|
+
@headers_array = h_array
|
17
|
+
@headers_map = h_map
|
18
|
+
end
|
19
|
+
|
20
|
+
# @return [String|nil]
|
21
|
+
def get(name)
|
22
|
+
key = name.downcase
|
23
|
+
values = @headers_map[key]
|
24
|
+
if values
|
25
|
+
join(key, values)
|
26
|
+
else
|
27
|
+
nil
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# @return [Array<String>]
|
32
|
+
def get_all(name)
|
33
|
+
values = @headers_map[name.downcase]
|
34
|
+
if values
|
35
|
+
values.dup
|
36
|
+
else
|
37
|
+
[]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def headers
|
42
|
+
@headers_map.map do |key, values|
|
43
|
+
[key, join(key, values)]
|
44
|
+
end.to_h
|
45
|
+
end
|
46
|
+
|
47
|
+
def headers_array
|
48
|
+
@headers_array.map do |name, value|
|
49
|
+
{ name: name, value: value }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
private def join(key, values)
|
54
|
+
if key == 'set-cookie'
|
55
|
+
values.join("\n")
|
56
|
+
else
|
57
|
+
values.join(", ")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
data/lib/playwright/version.rb
CHANGED
data/lib/playwright.rb
CHANGED
@@ -20,6 +20,7 @@ require 'playwright/channel_owner'
|
|
20
20
|
require 'playwright/http_headers'
|
21
21
|
require 'playwright/input_files'
|
22
22
|
require 'playwright/connection'
|
23
|
+
require 'playwright/raw_headers'
|
23
24
|
require 'playwright/route_handler'
|
24
25
|
require 'playwright/select_option_values'
|
25
26
|
require 'playwright/timeout_settings'
|
@@ -12,7 +12,7 @@ module Playwright
|
|
12
12
|
# https://github.com/aslushnikov/getting-started-with-cdp/blob/master/README.md
|
13
13
|
#
|
14
14
|
# ```python sync
|
15
|
-
# client = page.context
|
15
|
+
# client = page.context.new_cdp_session(page)
|
16
16
|
# client.send("Animation.enable")
|
17
17
|
# client.on("Animation.animationCreated", lambda: print("animation created!"))
|
18
18
|
# response = client.send("Animation.getPlaybackRate")
|
data/lib/playwright_api/mouse.rb
CHANGED
@@ -45,5 +45,13 @@ module Playwright
|
|
45
45
|
def up(button: nil, clickCount: nil)
|
46
46
|
wrap_impl(@impl.up(button: unwrap_impl(button), clickCount: unwrap_impl(clickCount)))
|
47
47
|
end
|
48
|
+
|
49
|
+
# Dispatches a `wheel` event.
|
50
|
+
#
|
51
|
+
# > NOTE: Wheel events may cause scrolling if they are not handled, and this method does not wait for the scrolling to
|
52
|
+
# finish before returning.
|
53
|
+
def wheel(deltaX, deltaY)
|
54
|
+
wrap_impl(@impl.wheel(unwrap_impl(deltaX), unwrap_impl(deltaY)))
|
55
|
+
end
|
48
56
|
end
|
49
57
|
end
|
@@ -41,11 +41,16 @@ module Playwright
|
|
41
41
|
end
|
42
42
|
|
43
43
|
# An array with all the request HTTP headers associated with this request. Unlike [`method: Request.allHeaders`], header
|
44
|
-
# names are
|
44
|
+
# names are NOT lower-cased. Headers with multiple entries, such as `Set-Cookie`, appear in the array multiple times.
|
45
45
|
def headers_array
|
46
46
|
wrap_impl(@impl.headers_array)
|
47
47
|
end
|
48
48
|
|
49
|
+
# Returns the value of the header matching the name. The name is case insensitive.
|
50
|
+
def header_value(name)
|
51
|
+
wrap_impl(@impl.header_value(unwrap_impl(name)))
|
52
|
+
end
|
53
|
+
|
49
54
|
# Whether this request is driving frame's navigation.
|
50
55
|
def navigation_request?
|
51
56
|
wrap_impl(@impl.navigation_request?)
|
@@ -120,8 +125,7 @@ module Playwright
|
|
120
125
|
wrap_impl(@impl.response)
|
121
126
|
end
|
122
127
|
|
123
|
-
# Returns resource size information for given request.
|
124
|
-
# [`method: Response.finished`] to ensure the info is available.
|
128
|
+
# Returns resource size information for given request.
|
125
129
|
def sizes
|
126
130
|
wrap_impl(@impl.sizes)
|
127
131
|
end
|
@@ -146,8 +150,8 @@ module Playwright
|
|
146
150
|
end
|
147
151
|
|
148
152
|
# @nodoc
|
149
|
-
def
|
150
|
-
wrap_impl(@impl.
|
153
|
+
def header_values(name)
|
154
|
+
wrap_impl(@impl.header_values(unwrap_impl(name)))
|
151
155
|
end
|
152
156
|
|
153
157
|
# -- inherited from EventEmitter --
|
@@ -12,7 +12,7 @@ module Playwright
|
|
12
12
|
wrap_impl(@impl.body)
|
13
13
|
end
|
14
14
|
|
15
|
-
# Waits for this response to finish, returns
|
15
|
+
# Waits for this response to finish, returns always `null`.
|
16
16
|
def finished
|
17
17
|
wrap_impl(@impl.finished)
|
18
18
|
end
|
@@ -28,11 +28,23 @@ module Playwright
|
|
28
28
|
end
|
29
29
|
|
30
30
|
# An array with all the request HTTP headers associated with this response. Unlike [`method: Response.allHeaders`], header
|
31
|
-
# names are
|
31
|
+
# names are NOT lower-cased. Headers with multiple entries, such as `Set-Cookie`, appear in the array multiple times.
|
32
32
|
def headers_array
|
33
33
|
wrap_impl(@impl.headers_array)
|
34
34
|
end
|
35
35
|
|
36
|
+
# Returns the value of the header matching the name. The name is case insensitive. If multiple headers have the same name
|
37
|
+
# (except `set-cookie`), they are returned as a list separated by `, `. For `set-cookie`, the `\n` separator is used. If
|
38
|
+
# no headers are found, `null` is returned.
|
39
|
+
def header_value(name)
|
40
|
+
wrap_impl(@impl.header_value(unwrap_impl(name)))
|
41
|
+
end
|
42
|
+
|
43
|
+
# Returns all values of the headers matching the name, for example `set-cookie`. The name is case insensitive.
|
44
|
+
def header_values(name)
|
45
|
+
wrap_impl(@impl.header_values(unwrap_impl(name)))
|
46
|
+
end
|
47
|
+
|
36
48
|
# Returns the JSON representation of response body.
|
37
49
|
#
|
38
50
|
# This method will throw if the response body is not parsable via `JSON.parse`.
|
@@ -85,11 +97,6 @@ module Playwright
|
|
85
97
|
wrap_impl(@impl.ok?)
|
86
98
|
end
|
87
99
|
|
88
|
-
# @nodoc
|
89
|
-
def parse_headers_as_array(serialized_headers, downcase)
|
90
|
-
wrap_impl(@impl.parse_headers_as_array(unwrap_impl(serialized_headers), unwrap_impl(downcase)))
|
91
|
-
end
|
92
|
-
|
93
100
|
# -- inherited from EventEmitter --
|
94
101
|
# @nodoc
|
95
102
|
def off(event, callback)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: playwright-ruby-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.15.
|
4
|
+
version: 1.15.beta3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- YusukeIwaki
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-09-
|
11
|
+
date: 2021-09-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -315,6 +315,7 @@ files:
|
|
315
315
|
- lib/playwright/locator_impl.rb
|
316
316
|
- lib/playwright/mouse_impl.rb
|
317
317
|
- lib/playwright/playwright_api.rb
|
318
|
+
- lib/playwright/raw_headers.rb
|
318
319
|
- lib/playwright/route_handler.rb
|
319
320
|
- lib/playwright/select_option_values.rb
|
320
321
|
- lib/playwright/timeout_settings.rb
|