playwright-ruby-client 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.rspec +3 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +8 -0
- data/LICENSE.txt +21 -0
- data/README.md +49 -0
- data/Rakefile +3 -0
- data/bin/console +11 -0
- data/bin/setup +8 -0
- data/lib/playwright.rb +39 -0
- data/lib/playwright/channel.rb +28 -0
- data/lib/playwright/channel_owner.rb +80 -0
- data/lib/playwright/channel_owners/android.rb +3 -0
- data/lib/playwright/channel_owners/binding_call.rb +4 -0
- data/lib/playwright/channel_owners/browser.rb +80 -0
- data/lib/playwright/channel_owners/browser_context.rb +13 -0
- data/lib/playwright/channel_owners/browser_type.rb +26 -0
- data/lib/playwright/channel_owners/chromium_browser.rb +8 -0
- data/lib/playwright/channel_owners/chromium_browser_context.rb +8 -0
- data/lib/playwright/channel_owners/electron.rb +3 -0
- data/lib/playwright/channel_owners/firefox_browser.rb +8 -0
- data/lib/playwright/channel_owners/frame.rb +44 -0
- data/lib/playwright/channel_owners/page.rb +53 -0
- data/lib/playwright/channel_owners/playwright.rb +57 -0
- data/lib/playwright/channel_owners/request.rb +5 -0
- data/lib/playwright/channel_owners/response.rb +5 -0
- data/lib/playwright/channel_owners/selectors.rb +4 -0
- data/lib/playwright/channel_owners/webkit_browser.rb +8 -0
- data/lib/playwright/connection.rb +238 -0
- data/lib/playwright/errors.rb +35 -0
- data/lib/playwright/event_emitter.rb +62 -0
- data/lib/playwright/events.rb +86 -0
- data/lib/playwright/playwright_api.rb +75 -0
- data/lib/playwright/transport.rb +86 -0
- data/lib/playwright/version.rb +5 -0
- data/lib/playwright_api/accessibility.rb +39 -0
- data/lib/playwright_api/binding_call.rb +5 -0
- data/lib/playwright_api/browser.rb +123 -0
- data/lib/playwright_api/browser_context.rb +285 -0
- data/lib/playwright_api/browser_type.rb +144 -0
- data/lib/playwright_api/cdp_session.rb +34 -0
- data/lib/playwright_api/chromium_browser_context.rb +26 -0
- data/lib/playwright_api/console_message.rb +22 -0
- data/lib/playwright_api/dialog.rb +46 -0
- data/lib/playwright_api/download.rb +54 -0
- data/lib/playwright_api/element_handle.rb +361 -0
- data/lib/playwright_api/file_chooser.rb +31 -0
- data/lib/playwright_api/frame.rb +526 -0
- data/lib/playwright_api/js_handle.rb +69 -0
- data/lib/playwright_api/keyboard.rb +101 -0
- data/lib/playwright_api/mouse.rb +47 -0
- data/lib/playwright_api/page.rb +986 -0
- data/lib/playwright_api/playwright.rb +35 -0
- data/lib/playwright_api/request.rb +119 -0
- data/lib/playwright_api/response.rb +61 -0
- data/lib/playwright_api/route.rb +53 -0
- data/lib/playwright_api/selectors.rb +51 -0
- data/lib/playwright_api/touchscreen.rb +10 -0
- data/lib/playwright_api/video.rb +14 -0
- data/lib/playwright_api/web_socket.rb +21 -0
- data/lib/playwright_api/worker.rb +34 -0
- data/playwright.gemspec +35 -0
- metadata +216 -0
@@ -0,0 +1,35 @@
|
|
1
|
+
module Playwright
|
2
|
+
# @nodoc
|
3
|
+
class Playwright < PlaywrightApi
|
4
|
+
|
5
|
+
# @nodoc
|
6
|
+
def android
|
7
|
+
wrap_channel_owner(@channel_owner.android)
|
8
|
+
end
|
9
|
+
|
10
|
+
# @nodoc
|
11
|
+
def chromium
|
12
|
+
wrap_channel_owner(@channel_owner.chromium)
|
13
|
+
end
|
14
|
+
|
15
|
+
# @nodoc
|
16
|
+
def electron
|
17
|
+
wrap_channel_owner(@channel_owner.electron)
|
18
|
+
end
|
19
|
+
|
20
|
+
# @nodoc
|
21
|
+
def firefox
|
22
|
+
wrap_channel_owner(@channel_owner.firefox)
|
23
|
+
end
|
24
|
+
|
25
|
+
# @nodoc
|
26
|
+
def devices
|
27
|
+
wrap_channel_owner(@channel_owner.devices)
|
28
|
+
end
|
29
|
+
|
30
|
+
# @nodoc
|
31
|
+
def webkit
|
32
|
+
wrap_channel_owner(@channel_owner.webkit)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
module Playwright
|
2
|
+
# Whenever the page sends a request for a network resource the following sequence of events are emitted by Page:
|
3
|
+
#
|
4
|
+
# page.on('request') emitted when the request is issued by the page.
|
5
|
+
# page.on('response') emitted when/if the response status and headers are received for the request.
|
6
|
+
# page.on('requestfinished') emitted when the response body is downloaded and the request is complete.
|
7
|
+
#
|
8
|
+
# If request fails at some point, then instead of `'requestfinished'` event (and possibly instead of 'response' event), the page.on('requestfailed') event is emitted.
|
9
|
+
#
|
10
|
+
# **NOTE** HTTP Error responses, such as 404 or 503, are still successful responses from HTTP standpoint, so request will complete with `'requestfinished'` event.
|
11
|
+
#
|
12
|
+
# If request gets a 'redirect' response, the request is successfully finished with the 'requestfinished' event, and a new request is issued to a redirected url.
|
13
|
+
class Request < PlaywrightApi
|
14
|
+
|
15
|
+
# The method returns `null` unless this request has failed, as reported by `requestfailed` event.
|
16
|
+
# Example of logging of all the failed requests:
|
17
|
+
#
|
18
|
+
# ```js
|
19
|
+
# page.on('requestfailed', request => {
|
20
|
+
# console.log(request.url() + ' ' + request.failure().errorText);
|
21
|
+
# });
|
22
|
+
# ```
|
23
|
+
def failure
|
24
|
+
raise NotImplementedError.new('failure is not implemented yet.')
|
25
|
+
end
|
26
|
+
|
27
|
+
# Returns the Frame that initiated this request.
|
28
|
+
def frame
|
29
|
+
raise NotImplementedError.new('frame is not implemented yet.')
|
30
|
+
end
|
31
|
+
|
32
|
+
# An object with HTTP headers associated with the request. All header names are lower-case.
|
33
|
+
def headers
|
34
|
+
raise NotImplementedError.new('headers is not implemented yet.')
|
35
|
+
end
|
36
|
+
|
37
|
+
# Whether this request is driving frame's navigation.
|
38
|
+
def navigation_request?
|
39
|
+
raise NotImplementedError.new('navigation_request? is not implemented yet.')
|
40
|
+
end
|
41
|
+
|
42
|
+
# Request's method (GET, POST, etc.)
|
43
|
+
def method
|
44
|
+
wrap_channel_owner(@channel_owner.method)
|
45
|
+
end
|
46
|
+
|
47
|
+
# Request's post body, if any.
|
48
|
+
def post_data
|
49
|
+
raise NotImplementedError.new('post_data is not implemented yet.')
|
50
|
+
end
|
51
|
+
|
52
|
+
# Request's post body in a binary form, if any.
|
53
|
+
def post_data_buffer
|
54
|
+
raise NotImplementedError.new('post_data_buffer is not implemented yet.')
|
55
|
+
end
|
56
|
+
|
57
|
+
# Returns parsed request's body for `form-urlencoded` and JSON as a fallback if any.
|
58
|
+
# When the response is `application/x-www-form-urlencoded` then a key/value object of the values will be returned. Otherwise it will be parsed as JSON.
|
59
|
+
def post_data_json
|
60
|
+
raise NotImplementedError.new('post_data_json is not implemented yet.')
|
61
|
+
end
|
62
|
+
|
63
|
+
# Request that was redirected by the server to this one, if any.
|
64
|
+
# When the server responds with a redirect, Playwright creates a new Request object. The two requests are connected by `redirectedFrom()` and `redirectedTo()` methods. When multiple server redirects has happened, it is possible to construct the whole redirect chain by repeatedly calling `redirectedFrom()`.
|
65
|
+
# For example, if the website `http://example.com` redirects to `https://example.com`:
|
66
|
+
#
|
67
|
+
# ```js
|
68
|
+
# const response = await page.goto('http://example.com');
|
69
|
+
# console.log(response.request().redirectedFrom().url()); // 'http://example.com'
|
70
|
+
# ```
|
71
|
+
# If the website `https://google.com` has no redirects:
|
72
|
+
#
|
73
|
+
# ```js
|
74
|
+
# const response = await page.goto('https://google.com');
|
75
|
+
# console.log(response.request().redirectedFrom()); // null
|
76
|
+
# ```
|
77
|
+
def redirected_from
|
78
|
+
raise NotImplementedError.new('redirected_from is not implemented yet.')
|
79
|
+
end
|
80
|
+
|
81
|
+
# New request issued by the browser if the server responded with redirect.
|
82
|
+
# This method is the opposite of `request.redirectedFrom()`:
|
83
|
+
#
|
84
|
+
# ```js
|
85
|
+
# console.log(request.redirectedFrom().redirectedTo() === request); // true
|
86
|
+
# ```
|
87
|
+
def redirected_to
|
88
|
+
raise NotImplementedError.new('redirected_to is not implemented yet.')
|
89
|
+
end
|
90
|
+
|
91
|
+
# Contains the request's resource type as it was perceived by the rendering engine. ResourceType will be one of the following: `document`, `stylesheet`, `image`, `media`, `font`, `script`, `texttrack`, `xhr`, `fetch`, `eventsource`, `websocket`, `manifest`, `other`.
|
92
|
+
def resource_type
|
93
|
+
raise NotImplementedError.new('resource_type is not implemented yet.')
|
94
|
+
end
|
95
|
+
|
96
|
+
# Returns the matching Response object, or `null` if the response was not received due to error.
|
97
|
+
def response
|
98
|
+
raise NotImplementedError.new('response is not implemented yet.')
|
99
|
+
end
|
100
|
+
|
101
|
+
# Returns resource timing information for given request. Most of the timing values become available upon the response, `responseEnd` becomes available when request finishes. Find more information at Resource Timing API.
|
102
|
+
#
|
103
|
+
# ```js
|
104
|
+
# const [request] = await Promise.all([
|
105
|
+
# page.waitForEvent('requestfinished'),
|
106
|
+
# page.goto(httpsServer.EMPTY_PAGE)
|
107
|
+
# ]);
|
108
|
+
# console.log(request.timing());
|
109
|
+
# ```
|
110
|
+
def timing
|
111
|
+
raise NotImplementedError.new('timing is not implemented yet.')
|
112
|
+
end
|
113
|
+
|
114
|
+
# URL of the request.
|
115
|
+
def url
|
116
|
+
raise NotImplementedError.new('url is not implemented yet.')
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module Playwright
|
2
|
+
# Response class represents responses which are received by page.
|
3
|
+
class Response < PlaywrightApi
|
4
|
+
|
5
|
+
# Returns the buffer with response body.
|
6
|
+
def body
|
7
|
+
raise NotImplementedError.new('body is not implemented yet.')
|
8
|
+
end
|
9
|
+
|
10
|
+
# Waits for this response to finish, returns failure error if request failed.
|
11
|
+
def finished
|
12
|
+
raise NotImplementedError.new('finished is not implemented yet.')
|
13
|
+
end
|
14
|
+
|
15
|
+
# Returns the Frame that initiated this response.
|
16
|
+
def frame
|
17
|
+
raise NotImplementedError.new('frame is not implemented yet.')
|
18
|
+
end
|
19
|
+
|
20
|
+
# Returns the object with HTTP headers associated with the response. All header names are lower-case.
|
21
|
+
def headers
|
22
|
+
raise NotImplementedError.new('headers is not implemented yet.')
|
23
|
+
end
|
24
|
+
|
25
|
+
# Returns the JSON representation of response body.
|
26
|
+
# This method will throw if the response body is not parsable via `JSON.parse`.
|
27
|
+
def json
|
28
|
+
raise NotImplementedError.new('json is not implemented yet.')
|
29
|
+
end
|
30
|
+
|
31
|
+
# Contains a boolean stating whether the response was successful (status in the range 200-299) or not.
|
32
|
+
def ok
|
33
|
+
raise NotImplementedError.new('ok is not implemented yet.')
|
34
|
+
end
|
35
|
+
|
36
|
+
# Returns the matching Request object.
|
37
|
+
def request
|
38
|
+
raise NotImplementedError.new('request is not implemented yet.')
|
39
|
+
end
|
40
|
+
|
41
|
+
# Contains the status code of the response (e.g., 200 for a success).
|
42
|
+
def status
|
43
|
+
raise NotImplementedError.new('status is not implemented yet.')
|
44
|
+
end
|
45
|
+
|
46
|
+
# Contains the status text of the response (e.g. usually an "OK" for a success).
|
47
|
+
def status_text
|
48
|
+
raise NotImplementedError.new('status_text is not implemented yet.')
|
49
|
+
end
|
50
|
+
|
51
|
+
# Returns the text representation of response body.
|
52
|
+
def text
|
53
|
+
raise NotImplementedError.new('text is not implemented yet.')
|
54
|
+
end
|
55
|
+
|
56
|
+
# Contains the URL of the response.
|
57
|
+
def url
|
58
|
+
raise NotImplementedError.new('url is not implemented yet.')
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Playwright
|
2
|
+
# Whenever a network route is set up with `page.route(url, handler)` or `browserContext.route(url, handler)`, the `Route` object allows to handle the route.
|
3
|
+
class Route < PlaywrightApi
|
4
|
+
|
5
|
+
# Aborts the route's request.
|
6
|
+
def abort(errorCode: nil)
|
7
|
+
raise NotImplementedError.new('abort is not implemented yet.')
|
8
|
+
end
|
9
|
+
|
10
|
+
# Continues route's request with optional overrides.
|
11
|
+
#
|
12
|
+
# ```js
|
13
|
+
# await page.route('**/*', (route, request) => {
|
14
|
+
# // Override headers
|
15
|
+
# const headers = {
|
16
|
+
# ...request.headers(),
|
17
|
+
# foo: 'bar', // set "foo" header
|
18
|
+
# origin: undefined, // remove "origin" header
|
19
|
+
# };
|
20
|
+
# route.continue({headers});
|
21
|
+
# });
|
22
|
+
# ```
|
23
|
+
def continue(overrides: nil)
|
24
|
+
raise NotImplementedError.new('continue is not implemented yet.')
|
25
|
+
end
|
26
|
+
|
27
|
+
# Fulfills route's request with given response.
|
28
|
+
# An example of fulfilling all requests with 404 responses:
|
29
|
+
#
|
30
|
+
# ```js
|
31
|
+
# await page.route('**/*', route => {
|
32
|
+
# route.fulfill({
|
33
|
+
# status: 404,
|
34
|
+
# contentType: 'text/plain',
|
35
|
+
# body: 'Not Found!'
|
36
|
+
# });
|
37
|
+
# });
|
38
|
+
# ```
|
39
|
+
# An example of serving static file:
|
40
|
+
#
|
41
|
+
# ```js
|
42
|
+
# await page.route('**/xhr_endpoint', route => route.fulfill({ path: 'mock_data.json' }));
|
43
|
+
# ```
|
44
|
+
def fulfill(response)
|
45
|
+
raise NotImplementedError.new('fulfill is not implemented yet.')
|
46
|
+
end
|
47
|
+
|
48
|
+
# A request to be routed.
|
49
|
+
def request
|
50
|
+
raise NotImplementedError.new('request is not implemented yet.')
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Playwright
|
2
|
+
# Selectors can be used to install custom selector engines. See Working with selectors for more information.
|
3
|
+
class Selectors < PlaywrightApi
|
4
|
+
|
5
|
+
# An example of registering selector engine that queries elements based on a tag name:
|
6
|
+
#
|
7
|
+
# ```js
|
8
|
+
# const { selectors, firefox } = require('playwright'); // Or 'chromium' or 'webkit'.
|
9
|
+
#
|
10
|
+
# (async () => {
|
11
|
+
# // Must be a function that evaluates to a selector engine instance.
|
12
|
+
# const createTagNameEngine = () => ({
|
13
|
+
# // Creates a selector that matches given target when queried at the root.
|
14
|
+
# // Can return undefined if unable to create one.
|
15
|
+
# create(root, target) {
|
16
|
+
# return root.querySelector(target.tagName) === target ? target.tagName : undefined;
|
17
|
+
# },
|
18
|
+
#
|
19
|
+
# // Returns the first element matching given selector in the root's subtree.
|
20
|
+
# query(root, selector) {
|
21
|
+
# return root.querySelector(selector);
|
22
|
+
# },
|
23
|
+
#
|
24
|
+
# // Returns all elements matching given selector in the root's subtree.
|
25
|
+
# queryAll(root, selector) {
|
26
|
+
# return Array.from(root.querySelectorAll(selector));
|
27
|
+
# }
|
28
|
+
# });
|
29
|
+
#
|
30
|
+
# // Register the engine. Selectors will be prefixed with "tag=".
|
31
|
+
# await selectors.register('tag', createTagNameEngine);
|
32
|
+
#
|
33
|
+
# const browser = await firefox.launch();
|
34
|
+
# const page = await browser.newPage();
|
35
|
+
# await page.setContent(`<div><button>Click me</button></div>`);
|
36
|
+
#
|
37
|
+
# // Use the selector prefixed with its name.
|
38
|
+
# const button = await page.$('tag=button');
|
39
|
+
# // Combine it with other selector engines.
|
40
|
+
# await page.click('tag=div >> text="Click me"');
|
41
|
+
# // Can use it in any methods supporting selectors.
|
42
|
+
# const buttonCount = await page.$$eval('tag=button', buttons => buttons.length);
|
43
|
+
#
|
44
|
+
# await browser.close();
|
45
|
+
# })();
|
46
|
+
# ```
|
47
|
+
def register(name, script, contentScript: nil)
|
48
|
+
raise NotImplementedError.new('register is not implemented yet.')
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module Playwright
|
2
|
+
# The Touchscreen class operates in main-frame CSS pixels relative to the top-left corner of the viewport. Methods on the touchscreen can only be used in browser contexts that have been intialized with `hasTouch` set to true.
|
3
|
+
class Touchscreen < PlaywrightApi
|
4
|
+
|
5
|
+
# Dispatches a `touchstart` and `touchend` event with a single touch at the position (`x`,`y`).
|
6
|
+
def tap_point(x, y)
|
7
|
+
raise NotImplementedError.new('tap_point is not implemented yet.')
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Playwright
|
2
|
+
# When browser context is created with the `videosPath` option, each page has a video object associated with it.
|
3
|
+
#
|
4
|
+
# ```js
|
5
|
+
# console.log(await page.video().path());
|
6
|
+
# ```
|
7
|
+
class Video < PlaywrightApi
|
8
|
+
|
9
|
+
# Returns the file system path this video will be recorded to. The video is guaranteed to be written to the filesystem upon closing the browser context.
|
10
|
+
def path
|
11
|
+
raise NotImplementedError.new('path is not implemented yet.')
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Playwright
|
2
|
+
# The WebSocket class represents websocket connections in the page.
|
3
|
+
class WebSocket < PlaywrightApi
|
4
|
+
|
5
|
+
# Indicates that the web socket has been closed.
|
6
|
+
def closed?
|
7
|
+
raise NotImplementedError.new('closed? is not implemented yet.')
|
8
|
+
end
|
9
|
+
|
10
|
+
# Contains the URL of the WebSocket.
|
11
|
+
def url
|
12
|
+
raise NotImplementedError.new('url is not implemented yet.')
|
13
|
+
end
|
14
|
+
|
15
|
+
# Returns the event data value.
|
16
|
+
# Waits for event to fire and passes its value into the predicate function. Returns when the predicate returns truthy value. Will throw an error if the webSocket is closed before the event is fired.
|
17
|
+
def wait_for_event(event, optionsOrPredicate: nil)
|
18
|
+
raise NotImplementedError.new('wait_for_event is not implemented yet.')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Playwright
|
2
|
+
# The Worker class represents a WebWorker. `worker` event is emitted on the page object to signal a worker creation. `close` event is emitted on the worker object when the worker is gone.
|
3
|
+
#
|
4
|
+
# ```js
|
5
|
+
# page.on('worker', worker => {
|
6
|
+
# console.log('Worker created: ' + worker.url());
|
7
|
+
# worker.on('close', worker => console.log('Worker destroyed: ' + worker.url()));
|
8
|
+
# });
|
9
|
+
#
|
10
|
+
# console.log('Current workers:');
|
11
|
+
# for (const worker of page.workers())
|
12
|
+
# console.log(' ' + worker.url());
|
13
|
+
# ```
|
14
|
+
class Worker < PlaywrightApi
|
15
|
+
|
16
|
+
# Returns the return value of `pageFunction`
|
17
|
+
# If the function passed to the `worker.evaluate` returns a Promise, then `worker.evaluate` would wait for the promise to resolve and return its value.
|
18
|
+
# If the function passed to the `worker.evaluate` returns a non-Serializable value, then `worker.evaluate` returns `undefined`. DevTools Protocol also supports transferring some additional values that are not serializable by `JSON`: `-0`, `NaN`, `Infinity`, `-Infinity`, and bigint literals.
|
19
|
+
def evaluate(pageFunction, arg: nil)
|
20
|
+
raise NotImplementedError.new('evaluate is not implemented yet.')
|
21
|
+
end
|
22
|
+
|
23
|
+
# Returns the return value of `pageFunction` as in-page object (JSHandle).
|
24
|
+
# The only difference between `worker.evaluate` and `worker.evaluateHandle` is that `worker.evaluateHandle` returns in-page object (JSHandle).
|
25
|
+
# If the function passed to the `worker.evaluateHandle` returns a Promise, then `worker.evaluateHandle` would wait for the promise to resolve and return its value.
|
26
|
+
def evaluate_handle(pageFunction, arg: nil)
|
27
|
+
raise NotImplementedError.new('evaluate_handle is not implemented yet.')
|
28
|
+
end
|
29
|
+
|
30
|
+
def url
|
31
|
+
raise NotImplementedError.new('url is not implemented yet.')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/playwright.gemspec
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
require 'playwright/version'
|
6
|
+
|
7
|
+
Gem::Specification.new do |spec|
|
8
|
+
spec.name = 'playwright-ruby-client'
|
9
|
+
spec.version = Playwright::VERSION
|
10
|
+
|
11
|
+
spec.authors = ['YusukeIwaki']
|
12
|
+
spec.email = ['q7w8e9w8q7w8e9@yahoo.co.jp']
|
13
|
+
|
14
|
+
spec.summary = 'The Ruby binding of playwright driver'
|
15
|
+
spec.homepage = 'https://github.com/YusukeIwaki/playwright-ruby-client'
|
16
|
+
spec.license = 'MIT'
|
17
|
+
|
18
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
19
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
20
|
+
f.match(%r{^(test|spec|features)/}) || f.include?(".git") || f.start_with?("development/")
|
21
|
+
end
|
22
|
+
end + `find lib/playwright_api -name *.rb -type f`.split("\n")
|
23
|
+
spec.bindir = 'exe'
|
24
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
25
|
+
spec.require_paths = ['lib']
|
26
|
+
|
27
|
+
spec.add_dependency 'concurrent-ruby'
|
28
|
+
spec.add_development_dependency 'bundler', '~> 2.2.3'
|
29
|
+
spec.add_development_dependency 'dry-inflector'
|
30
|
+
spec.add_development_dependency 'pry-byebug'
|
31
|
+
spec.add_development_dependency 'rake', '~> 13.0.3'
|
32
|
+
spec.add_development_dependency 'rspec', '~> 3.10.0 '
|
33
|
+
spec.add_development_dependency 'rubocop', '~> 1.7.0'
|
34
|
+
spec.add_development_dependency 'rubocop-rspec'
|
35
|
+
end
|
metadata
ADDED
@@ -0,0 +1,216 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: playwright-ruby-client
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- YusukeIwaki
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-01-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: concurrent-ruby
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.2.3
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 2.2.3
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: dry-inflector
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry-byebug
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 13.0.3
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 13.0.3
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 3.10.0
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 3.10.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubocop
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 1.7.0
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 1.7.0
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rubocop-rspec
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
description:
|
126
|
+
email:
|
127
|
+
- q7w8e9w8q7w8e9@yahoo.co.jp
|
128
|
+
executables: []
|
129
|
+
extensions: []
|
130
|
+
extra_rdoc_files: []
|
131
|
+
files:
|
132
|
+
- ".rspec"
|
133
|
+
- CODE_OF_CONDUCT.md
|
134
|
+
- Gemfile
|
135
|
+
- LICENSE.txt
|
136
|
+
- README.md
|
137
|
+
- Rakefile
|
138
|
+
- bin/console
|
139
|
+
- bin/setup
|
140
|
+
- lib/playwright.rb
|
141
|
+
- lib/playwright/channel.rb
|
142
|
+
- lib/playwright/channel_owner.rb
|
143
|
+
- lib/playwright/channel_owners/android.rb
|
144
|
+
- lib/playwright/channel_owners/binding_call.rb
|
145
|
+
- lib/playwright/channel_owners/browser.rb
|
146
|
+
- lib/playwright/channel_owners/browser_context.rb
|
147
|
+
- lib/playwright/channel_owners/browser_type.rb
|
148
|
+
- lib/playwright/channel_owners/chromium_browser.rb
|
149
|
+
- lib/playwright/channel_owners/chromium_browser_context.rb
|
150
|
+
- lib/playwright/channel_owners/electron.rb
|
151
|
+
- lib/playwright/channel_owners/firefox_browser.rb
|
152
|
+
- lib/playwright/channel_owners/frame.rb
|
153
|
+
- lib/playwright/channel_owners/page.rb
|
154
|
+
- lib/playwright/channel_owners/playwright.rb
|
155
|
+
- lib/playwright/channel_owners/request.rb
|
156
|
+
- lib/playwright/channel_owners/response.rb
|
157
|
+
- lib/playwright/channel_owners/selectors.rb
|
158
|
+
- lib/playwright/channel_owners/webkit_browser.rb
|
159
|
+
- lib/playwright/connection.rb
|
160
|
+
- lib/playwright/errors.rb
|
161
|
+
- lib/playwright/event_emitter.rb
|
162
|
+
- lib/playwright/events.rb
|
163
|
+
- lib/playwright/playwright_api.rb
|
164
|
+
- lib/playwright/transport.rb
|
165
|
+
- lib/playwright/version.rb
|
166
|
+
- lib/playwright_api/accessibility.rb
|
167
|
+
- lib/playwright_api/binding_call.rb
|
168
|
+
- lib/playwright_api/browser.rb
|
169
|
+
- lib/playwright_api/browser_context.rb
|
170
|
+
- lib/playwright_api/browser_type.rb
|
171
|
+
- lib/playwright_api/cdp_session.rb
|
172
|
+
- lib/playwright_api/chromium_browser_context.rb
|
173
|
+
- lib/playwright_api/console_message.rb
|
174
|
+
- lib/playwright_api/dialog.rb
|
175
|
+
- lib/playwright_api/download.rb
|
176
|
+
- lib/playwright_api/element_handle.rb
|
177
|
+
- lib/playwright_api/file_chooser.rb
|
178
|
+
- lib/playwright_api/frame.rb
|
179
|
+
- lib/playwright_api/js_handle.rb
|
180
|
+
- lib/playwright_api/keyboard.rb
|
181
|
+
- lib/playwright_api/mouse.rb
|
182
|
+
- lib/playwright_api/page.rb
|
183
|
+
- lib/playwright_api/playwright.rb
|
184
|
+
- lib/playwright_api/request.rb
|
185
|
+
- lib/playwright_api/response.rb
|
186
|
+
- lib/playwright_api/route.rb
|
187
|
+
- lib/playwright_api/selectors.rb
|
188
|
+
- lib/playwright_api/touchscreen.rb
|
189
|
+
- lib/playwright_api/video.rb
|
190
|
+
- lib/playwright_api/web_socket.rb
|
191
|
+
- lib/playwright_api/worker.rb
|
192
|
+
- playwright.gemspec
|
193
|
+
homepage: https://github.com/YusukeIwaki/playwright-ruby-client
|
194
|
+
licenses:
|
195
|
+
- MIT
|
196
|
+
metadata: {}
|
197
|
+
post_install_message:
|
198
|
+
rdoc_options: []
|
199
|
+
require_paths:
|
200
|
+
- lib
|
201
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
202
|
+
requirements:
|
203
|
+
- - ">="
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: '0'
|
206
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
207
|
+
requirements:
|
208
|
+
- - ">="
|
209
|
+
- !ruby/object:Gem::Version
|
210
|
+
version: '0'
|
211
|
+
requirements: []
|
212
|
+
rubygems_version: 3.2.3
|
213
|
+
signing_key:
|
214
|
+
specification_version: 4
|
215
|
+
summary: The Ruby binding of playwright driver
|
216
|
+
test_files: []
|