playwright-ruby-client 1.15.beta1 → 1.15.1
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/README.md +10 -14
- data/documentation/docs/api/browser.md +2 -0
- data/documentation/docs/api/browser_context.md +5 -1
- data/documentation/docs/api/browser_type.md +1 -0
- data/documentation/docs/api/element_handle.md +27 -1
- data/documentation/docs/api/experimental/android_device.md +1 -0
- data/documentation/docs/api/fetch_request.md +10 -0
- data/documentation/docs/api/frame.md +28 -0
- data/documentation/docs/api/locator.md +29 -0
- data/documentation/docs/api/mouse.md +11 -0
- data/documentation/docs/api/page.md +35 -2
- data/documentation/docs/api/request.md +34 -1
- data/documentation/docs/api/response.md +37 -2
- data/documentation/docs/api/tracing.md +42 -8
- data/documentation/docs/article/getting_started.md +10 -1
- data/documentation/docs/article/guides/download_playwright_driver.md +9 -0
- data/documentation/docs/article/guides/inspector.md +1 -1
- data/documentation/docs/article/guides/playwright_on_alpine_linux.md +56 -3
- data/documentation/docs/article/guides/rails_integration.md +4 -2
- data/documentation/docs/article/guides/rails_integration_with_null_driver.md +86 -0
- data/documentation/docs/article/guides/recording_video.md +1 -1
- data/documentation/docs/article/guides/semi_automation.md +1 -1
- data/documentation/docs/article/guides/use_storage_state.md +1 -1
- data/documentation/docs/include/api_coverage.md +22 -0
- data/documentation/docusaurus.config.js +1 -0
- data/documentation/package.json +2 -2
- data/documentation/src/pages/index.js +0 -1
- data/documentation/static/img/playwright-ruby-client.png +0 -0
- data/documentation/yarn.lock +625 -549
- data/lib/playwright/channel.rb +36 -2
- data/lib/playwright/channel_owners/artifact.rb +6 -2
- data/lib/playwright/channel_owners/browser.rb +4 -0
- data/lib/playwright/channel_owners/browser_context.rb +21 -14
- data/lib/playwright/channel_owners/element_handle.rb +10 -2
- data/lib/playwright/channel_owners/fetch_request.rb +4 -0
- data/lib/playwright/channel_owners/frame.rb +8 -0
- data/lib/playwright/channel_owners/page.rb +20 -4
- data/lib/playwright/channel_owners/request.rb +53 -17
- data/lib/playwright/channel_owners/response.rb +48 -5
- data/lib/playwright/connection.rb +5 -3
- data/lib/playwright/http_headers.rb +0 -6
- data/lib/playwright/locator_impl.rb +8 -0
- data/lib/playwright/mouse_impl.rb +9 -0
- data/lib/playwright/raw_headers.rb +61 -0
- data/lib/playwright/{route_handler_entry.rb → route_handler.rb} +30 -2
- data/lib/playwright/tracing_impl.rb +18 -7
- data/lib/playwright/transport.rb +2 -0
- data/lib/playwright/utils.rb +8 -0
- data/lib/playwright/version.rb +2 -2
- data/lib/playwright/web_socket_transport.rb +2 -0
- data/lib/playwright.rb +2 -1
- data/lib/playwright_api/android.rb +6 -6
- data/lib/playwright_api/android_device.rb +10 -9
- data/lib/playwright_api/browser.rb +10 -8
- data/lib/playwright_api/browser_context.rb +12 -8
- data/lib/playwright_api/browser_type.rb +8 -7
- data/lib/playwright_api/cdp_session.rb +7 -7
- data/lib/playwright_api/console_message.rb +6 -6
- data/lib/playwright_api/dialog.rb +6 -6
- data/lib/playwright_api/element_handle.rb +31 -8
- data/lib/playwright_api/fetch_request.rb +74 -0
- data/lib/playwright_api/frame.rb +31 -6
- data/lib/playwright_api/js_handle.rb +6 -6
- data/lib/playwright_api/locator.rb +26 -0
- data/lib/playwright_api/mouse.rb +8 -0
- data/lib/playwright_api/page.rb +40 -10
- data/lib/playwright_api/playwright.rb +6 -6
- data/lib/playwright_api/request.rb +30 -4
- data/lib/playwright_api/response.rb +31 -8
- data/lib/playwright_api/route.rb +6 -6
- data/lib/playwright_api/selectors.rb +6 -6
- data/lib/playwright_api/tracing.rb +33 -4
- data/lib/playwright_api/web_socket.rb +6 -6
- data/lib/playwright_api/worker.rb +6 -6
- metadata +12 -6
@@ -2,9 +2,11 @@
|
|
2
2
|
sidebar_position: 3
|
3
3
|
---
|
4
4
|
|
5
|
-
#
|
5
|
+
# Capybara driver for Ruby on Rails application
|
6
6
|
|
7
|
-
`playwright-ruby-client` is a client library just for browser automation
|
7
|
+
`playwright-ruby-client` is a client library just for browser automation, while Rails uses [Capybara](https://github.com/teamcapybara/capybara) for system testing.
|
8
|
+
|
9
|
+
`capybara-playwright-driver` provides a [Capybara](https://github.com/teamcapybara/capybara) driver based on playwright-ruby-client and makes it easy to integrate into Ruby on Rails applications.
|
8
10
|
|
9
11
|
## Installation
|
10
12
|
|
@@ -0,0 +1,86 @@
|
|
1
|
+
---
|
2
|
+
sidebar_position: 4
|
3
|
+
---
|
4
|
+
|
5
|
+
# Use Capybara without DSL
|
6
|
+
|
7
|
+
:::note
|
8
|
+
|
9
|
+
This article shows advanced-level configuration of Capybara and RSpec for more accurate automation/testing.
|
10
|
+
If you want to just integrate Playwright into Rails application, refer the basic [configuration guide](./rails_integration)
|
11
|
+
:::
|
12
|
+
|
13
|
+
## Background
|
14
|
+
|
15
|
+
[capybara-playwright-driver](./rails_integration) is easy to configure and migrate from Selenium or another Capybara driver, however it is a little **inaccurate** and would sometimes cause 'flaky test' problem originated from the internal implementation of Capybara DSL.
|
16
|
+
|
17
|
+
Also **we cannot use most of useful Playwright features in Capybara driver**, such as auto-waiting, various kind of selectors, and some users would want to use Playwright features as it is without Capybara DSL.
|
18
|
+
|
19
|
+
This article shows how to use playwright-ruby-client without Capybara DSL in Rails and RSpec.
|
20
|
+
|
21
|
+
## Configure Capybara driver just for launching Rails server
|
22
|
+
|
23
|
+
Capybara prepares the test server only when the configured driver returns true on `needs_server?` method. So we have to implement minimum driver like this:
|
24
|
+
|
25
|
+
```ruby {5-7} title=spec/support/capybara_null_driver.rb
|
26
|
+
RSpec.configure do |config|
|
27
|
+
require 'capybara'
|
28
|
+
|
29
|
+
class CapybaraNullDriver < Capybara::Driver::Base
|
30
|
+
def needs_server?
|
31
|
+
true
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
Capybara.register_driver(:null) { CapybaraNullDriver.new }
|
36
|
+
|
37
|
+
...
|
38
|
+
end
|
39
|
+
```
|
40
|
+
|
41
|
+
## Launch browser on each test
|
42
|
+
|
43
|
+
Now Capybara DSL is unavailable with CapybaraNullDriver, we have to manually launch browsers using playwright-ruby-client.
|
44
|
+
|
45
|
+
```rb
|
46
|
+
RSpec.configure do |config|
|
47
|
+
require 'capybara'
|
48
|
+
|
49
|
+
...
|
50
|
+
|
51
|
+
require 'playwright'
|
52
|
+
|
53
|
+
config.around(driver: :null) do |example|
|
54
|
+
Capybara.current_driver = :null
|
55
|
+
|
56
|
+
# Rails server is launched here, at the first time of accessing Capybara.current_session.server
|
57
|
+
base_url = Capybara.current_session.server.base_url
|
58
|
+
|
59
|
+
Playwright.create(playwright_cli_executable_path: './node_modules/.bin/playwright') do |playwright|
|
60
|
+
# pass any option for Playwright#launch and Browser#new_page as you prefer.
|
61
|
+
playwright.chromium.launch(headless: false) do |browser|
|
62
|
+
@playwright_page = browser.new_page(baseURL: base_url)
|
63
|
+
example.run
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
```
|
69
|
+
|
70
|
+
With the configuration above, we can describe system-test codes with native Playwright methods like below:
|
71
|
+
|
72
|
+
```rb
|
73
|
+
require 'rails_helper'
|
74
|
+
|
75
|
+
describe 'example', driver: :null do
|
76
|
+
let!(:user) { FactoryBot.create(:user) }
|
77
|
+
let(:page) { @playwright_page }
|
78
|
+
|
79
|
+
it 'can browse' do
|
80
|
+
page.goto("/tests/#{user.id}")
|
81
|
+
page.wait_for_selector('input').type('hoge')
|
82
|
+
page.keyboard.press('Enter')
|
83
|
+
expect(page.text_content('#content')).to include('hoge')
|
84
|
+
end
|
85
|
+
end
|
86
|
+
```
|
@@ -2,9 +2,12 @@
|
|
2
2
|
|
3
3
|
## Request
|
4
4
|
|
5
|
+
* all_headers
|
5
6
|
* failure
|
6
7
|
* frame
|
7
8
|
* headers
|
9
|
+
* headers_array
|
10
|
+
* header_value
|
8
11
|
* navigation_request?
|
9
12
|
* method
|
10
13
|
* post_data
|
@@ -14,15 +17,20 @@
|
|
14
17
|
* redirected_to
|
15
18
|
* resource_type
|
16
19
|
* response
|
20
|
+
* sizes
|
17
21
|
* timing
|
18
22
|
* url
|
19
23
|
|
20
24
|
## Response
|
21
25
|
|
26
|
+
* all_headers
|
22
27
|
* body
|
23
28
|
* finished
|
24
29
|
* frame
|
25
30
|
* headers
|
31
|
+
* headers_array
|
32
|
+
* header_value
|
33
|
+
* header_values
|
26
34
|
* json
|
27
35
|
* ok
|
28
36
|
* request
|
@@ -40,6 +48,13 @@
|
|
40
48
|
* fulfill
|
41
49
|
* request
|
42
50
|
|
51
|
+
## FetchRequest
|
52
|
+
|
53
|
+
* ~~dispose~~
|
54
|
+
* ~~fetch~~
|
55
|
+
* ~~get~~
|
56
|
+
* ~~post~~
|
57
|
+
|
43
58
|
## WebSocket
|
44
59
|
|
45
60
|
* closed?
|
@@ -62,6 +77,7 @@
|
|
62
77
|
* down
|
63
78
|
* move
|
64
79
|
* up
|
80
|
+
* wheel
|
65
81
|
|
66
82
|
## Touchscreen
|
67
83
|
|
@@ -108,6 +124,7 @@
|
|
108
124
|
* scroll_into_view_if_needed
|
109
125
|
* select_option
|
110
126
|
* select_text
|
127
|
+
* set_checked
|
111
128
|
* set_input_files
|
112
129
|
* tap_point
|
113
130
|
* text_content
|
@@ -166,6 +183,7 @@
|
|
166
183
|
* query_selector
|
167
184
|
* query_selector_all
|
168
185
|
* select_option
|
186
|
+
* set_checked
|
169
187
|
* set_content
|
170
188
|
* set_input_files
|
171
189
|
* tap_point
|
@@ -269,6 +287,7 @@
|
|
269
287
|
* route
|
270
288
|
* screenshot
|
271
289
|
* select_option
|
290
|
+
* set_checked
|
272
291
|
* set_content
|
273
292
|
* set_default_navigation_timeout
|
274
293
|
* set_default_timeout
|
@@ -375,7 +394,9 @@
|
|
375
394
|
## Tracing
|
376
395
|
|
377
396
|
* start
|
397
|
+
* start_chunk
|
378
398
|
* stop
|
399
|
+
* stop_chunk
|
379
400
|
|
380
401
|
## Locator
|
381
402
|
|
@@ -414,6 +435,7 @@
|
|
414
435
|
* scroll_into_view_if_needed
|
415
436
|
* select_option
|
416
437
|
* select_text
|
438
|
+
* set_checked
|
417
439
|
* set_input_files
|
418
440
|
* tap_point
|
419
441
|
* text_content
|
@@ -10,6 +10,7 @@ module.exports = {
|
|
10
10
|
organizationName: 'YusukeIwaki', // Usually your GitHub org/user name.
|
11
11
|
projectName: 'playwright-ruby-client', // Usually your repo name.
|
12
12
|
themeConfig: {
|
13
|
+
image: 'img/playwright-ruby-client.png',
|
13
14
|
navbar: {
|
14
15
|
title: 'playwright-ruby-client',
|
15
16
|
logo: {
|
data/documentation/package.json
CHANGED
@@ -14,8 +14,8 @@
|
|
14
14
|
"write-heading-ids": "docusaurus write-heading-ids"
|
15
15
|
},
|
16
16
|
"dependencies": {
|
17
|
-
"@docusaurus/core": "2.0.0-beta.
|
18
|
-
"@docusaurus/preset-classic": "2.0.0-beta.
|
17
|
+
"@docusaurus/core": "^2.0.0-beta.5",
|
18
|
+
"@docusaurus/preset-classic": "^2.0.0-beta.5",
|
19
19
|
"@mdx-js/react": "^1.6.21",
|
20
20
|
"@svgr/webpack": "^5.5.0",
|
21
21
|
"clsx": "^1.1.1",
|
Binary file
|