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.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +10 -14
  3. data/documentation/docs/api/browser.md +2 -0
  4. data/documentation/docs/api/browser_context.md +5 -1
  5. data/documentation/docs/api/browser_type.md +1 -0
  6. data/documentation/docs/api/element_handle.md +27 -1
  7. data/documentation/docs/api/experimental/android_device.md +1 -0
  8. data/documentation/docs/api/fetch_request.md +10 -0
  9. data/documentation/docs/api/frame.md +28 -0
  10. data/documentation/docs/api/locator.md +29 -0
  11. data/documentation/docs/api/mouse.md +11 -0
  12. data/documentation/docs/api/page.md +35 -2
  13. data/documentation/docs/api/request.md +34 -1
  14. data/documentation/docs/api/response.md +37 -2
  15. data/documentation/docs/api/tracing.md +42 -8
  16. data/documentation/docs/article/getting_started.md +10 -1
  17. data/documentation/docs/article/guides/download_playwright_driver.md +9 -0
  18. data/documentation/docs/article/guides/inspector.md +1 -1
  19. data/documentation/docs/article/guides/playwright_on_alpine_linux.md +56 -3
  20. data/documentation/docs/article/guides/rails_integration.md +4 -2
  21. data/documentation/docs/article/guides/rails_integration_with_null_driver.md +86 -0
  22. data/documentation/docs/article/guides/recording_video.md +1 -1
  23. data/documentation/docs/article/guides/semi_automation.md +1 -1
  24. data/documentation/docs/article/guides/use_storage_state.md +1 -1
  25. data/documentation/docs/include/api_coverage.md +22 -0
  26. data/documentation/docusaurus.config.js +1 -0
  27. data/documentation/package.json +2 -2
  28. data/documentation/src/pages/index.js +0 -1
  29. data/documentation/static/img/playwright-ruby-client.png +0 -0
  30. data/documentation/yarn.lock +625 -549
  31. data/lib/playwright/channel.rb +36 -2
  32. data/lib/playwright/channel_owners/artifact.rb +6 -2
  33. data/lib/playwright/channel_owners/browser.rb +4 -0
  34. data/lib/playwright/channel_owners/browser_context.rb +21 -14
  35. data/lib/playwright/channel_owners/element_handle.rb +10 -2
  36. data/lib/playwright/channel_owners/fetch_request.rb +4 -0
  37. data/lib/playwright/channel_owners/frame.rb +8 -0
  38. data/lib/playwright/channel_owners/page.rb +20 -4
  39. data/lib/playwright/channel_owners/request.rb +53 -17
  40. data/lib/playwright/channel_owners/response.rb +48 -5
  41. data/lib/playwright/connection.rb +5 -3
  42. data/lib/playwright/http_headers.rb +0 -6
  43. data/lib/playwright/locator_impl.rb +8 -0
  44. data/lib/playwright/mouse_impl.rb +9 -0
  45. data/lib/playwright/raw_headers.rb +61 -0
  46. data/lib/playwright/{route_handler_entry.rb → route_handler.rb} +30 -2
  47. data/lib/playwright/tracing_impl.rb +18 -7
  48. data/lib/playwright/transport.rb +2 -0
  49. data/lib/playwright/utils.rb +8 -0
  50. data/lib/playwright/version.rb +2 -2
  51. data/lib/playwright/web_socket_transport.rb +2 -0
  52. data/lib/playwright.rb +2 -1
  53. data/lib/playwright_api/android.rb +6 -6
  54. data/lib/playwright_api/android_device.rb +10 -9
  55. data/lib/playwright_api/browser.rb +10 -8
  56. data/lib/playwright_api/browser_context.rb +12 -8
  57. data/lib/playwright_api/browser_type.rb +8 -7
  58. data/lib/playwright_api/cdp_session.rb +7 -7
  59. data/lib/playwright_api/console_message.rb +6 -6
  60. data/lib/playwright_api/dialog.rb +6 -6
  61. data/lib/playwright_api/element_handle.rb +31 -8
  62. data/lib/playwright_api/fetch_request.rb +74 -0
  63. data/lib/playwright_api/frame.rb +31 -6
  64. data/lib/playwright_api/js_handle.rb +6 -6
  65. data/lib/playwright_api/locator.rb +26 -0
  66. data/lib/playwright_api/mouse.rb +8 -0
  67. data/lib/playwright_api/page.rb +40 -10
  68. data/lib/playwright_api/playwright.rb +6 -6
  69. data/lib/playwright_api/request.rb +30 -4
  70. data/lib/playwright_api/response.rb +31 -8
  71. data/lib/playwright_api/route.rb +6 -6
  72. data/lib/playwright_api/selectors.rb +6 -6
  73. data/lib/playwright_api/tracing.rb +33 -4
  74. data/lib/playwright_api/web_socket.rb +6 -6
  75. data/lib/playwright_api/worker.rb +6 -6
  76. metadata +12 -6
@@ -2,9 +2,11 @@
2
2
  sidebar_position: 3
3
3
  ---
4
4
 
5
- # Integration into Ruby on Rails application
5
+ # Capybara driver for Ruby on Rails application
6
6
 
7
- `playwright-ruby-client` is a client library just for browser automation. `capybara-playwright-driver` provides the [Capybara](https://github.com/teamcapybara/capybara) driver based on playwright-ruby-client and makes it easy to integrate into Ruby on Rails applications.
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
+ ```
@@ -1,5 +1,5 @@
1
1
  ---
2
- sidebar_position: 4
2
+ sidebar_position: 10
3
3
  ---
4
4
 
5
5
  # Recording video
@@ -1,5 +1,5 @@
1
1
  ---
2
- sidebar_position: 5
2
+ sidebar_position: 20
3
3
  ---
4
4
 
5
5
  # Semi-automation
@@ -1,5 +1,5 @@
1
1
  ---
2
- sidebar_position: 6
2
+ sidebar_position: 21
3
3
  ---
4
4
 
5
5
  # Reuse Cookie and LocalStorage
@@ -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: {
@@ -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.0",
18
- "@docusaurus/preset-classic": "2.0.0-beta.0",
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",
@@ -39,7 +39,6 @@ export default function Home() {
39
39
  const { siteConfig } = useDocusaurusContext();
40
40
  return (
41
41
  <Layout
42
- title={siteConfig.title}
43
42
  description="Cross-browser end-to-end testing for modern web apps">
44
43
  <HomepageHeader />
45
44
  <main>