playwright-ruby-client 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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,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
@@ -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: []