playwright-ruby-client 0.6.2 → 0.6.3
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/article/guides/rails_integration.md +112 -1
- data/lib/playwright/channel_owners/browser.rb +1 -17
- data/lib/playwright/channel_owners/browser_context.rb +4 -3
- data/lib/playwright/channel_owners/page.rb +2 -1
- data/lib/playwright/version.rb +1 -1
- data/lib/playwright_api/page.rb +4 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 77f49d82e8b6b94210f79ee9e031dcfb73072a11da4c366626ad3bcf3e18bfa9
|
4
|
+
data.tar.gz: '098cbff788ed38a7647de0271d6f3c38a757e3c750ebf8aaa3f96dccbb626921'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 46997fb7eff8b747560a6f8658bc2b50cbeb2a489f75ed716ccfb84fc8dfddea171bbd4812dc897840507c7d9267e1c81e9f79ae05679ccece322dff7c8adc8b
|
7
|
+
data.tar.gz: 134a0003575cbe1501af23dad3a2f706cf9a961a8c067a858ecd25e61fe7a20f018d382d8d38be40c5aaa0c603dd0b1d02bd62b674405bfa5b5e130cf8593196
|
@@ -48,4 +48,115 @@ Capybara.default_driver = :playwright
|
|
48
48
|
Capybara.javascript_driver = :playwright
|
49
49
|
```
|
50
50
|
|
51
|
-
It is not mandatry. Without changing the default driver, you can still use Playwright driver by specifying `Capybara.current_driver = :
|
51
|
+
It is not mandatry. Without changing the default driver, you can still use Playwright driver by specifying `Capybara.current_driver = :playwright` (or `driven_by :playwright` in system spec) explicitly.
|
52
|
+
|
53
|
+
### (reference) Available driver options
|
54
|
+
|
55
|
+
These parameters can be passed into `Capybara::Playwright::Driver.new`
|
56
|
+
|
57
|
+
* `playwright_cli_executable_path`
|
58
|
+
* Refer [this article](./download_playwright_driver) to understand what to specify.
|
59
|
+
* `browser_type`
|
60
|
+
* `:chromium` (default), `:firefox`, or `:webkit`
|
61
|
+
* Parameters for [Playwright::BrowserType#launch](/docs/api/browser_type#launch)
|
62
|
+
* args
|
63
|
+
* channel
|
64
|
+
* `chrome`, `msedge`, `chrome-beta`, `chrome-dev`, `chrome-canary`, `msedge-beta`, `msedge-dev` Browser distribution channel. Read more about using [Google Chrome & Microsoft Edge](https://playwright.dev/docs/browsers#google-chrome--microsoft-edge)
|
65
|
+
* devtools
|
66
|
+
* downloadsPath
|
67
|
+
* env
|
68
|
+
* executablePath
|
69
|
+
* firefoxUserPrefs
|
70
|
+
* headless
|
71
|
+
* ignoreDefaultArgs
|
72
|
+
* proxy
|
73
|
+
* slowMo
|
74
|
+
* timeout
|
75
|
+
* Parameters for [Playwright::Browser#new_context](/docs/api/browser#new_context)
|
76
|
+
* bypassCSP
|
77
|
+
* colorScheme
|
78
|
+
* deviceScaleFactor
|
79
|
+
* extraHTTPHeaders
|
80
|
+
* geolocation
|
81
|
+
* hasTouch
|
82
|
+
* httpCredentials
|
83
|
+
* ignoreHTTPSErrors
|
84
|
+
* isMobile
|
85
|
+
* javaScriptEnabled
|
86
|
+
* locale
|
87
|
+
* noViewport
|
88
|
+
* offline
|
89
|
+
* permissions
|
90
|
+
* proxy
|
91
|
+
* record_har_omit_content
|
92
|
+
* record_har_path
|
93
|
+
* record_video_dir
|
94
|
+
* record_video_size
|
95
|
+
* screen
|
96
|
+
* storageState
|
97
|
+
* timezoneId
|
98
|
+
* userAgent
|
99
|
+
* viewport
|
100
|
+
|
101
|
+
```ruby
|
102
|
+
driver_opts = {
|
103
|
+
# `playwright` command path.
|
104
|
+
playwright_cli_executable_path: './node_modules/.bin/playwright',
|
105
|
+
|
106
|
+
# Use firefox for testing.
|
107
|
+
browser_type: :firefox,
|
108
|
+
|
109
|
+
# Headful mode.
|
110
|
+
headless: false,
|
111
|
+
|
112
|
+
# Slower operation
|
113
|
+
slowMo: 50, # integer. (50-100 would be good for most cases)
|
114
|
+
}
|
115
|
+
|
116
|
+
Capybara::Playwright::Driver.new(app, driver_opts)
|
117
|
+
```
|
118
|
+
|
119
|
+
|
120
|
+
## Available functions and Limitations
|
121
|
+
|
122
|
+
### Capybara DSL
|
123
|
+
|
124
|
+
Most of the methods of `Capybara::Session` and `Capybara::Node::Element` are available. However the following method is not yet implemented.
|
125
|
+
|
126
|
+
* `Capybara::Node::Element#drop`
|
127
|
+
|
128
|
+
### Playwright-native scripting
|
129
|
+
|
130
|
+
We can also describe Playwright-native automation script using `with_playwright_page` and `with_playwright_element_handle`.
|
131
|
+
|
132
|
+
```ruby
|
133
|
+
# With Capybara DSL
|
134
|
+
find('a[data-item-type="global_search"]').click
|
135
|
+
|
136
|
+
# With Playwright-native Page
|
137
|
+
Capybara.current_session.driver.with_playwright_page do |page|
|
138
|
+
# `page` is an instance of Playwright::Page.
|
139
|
+
page.click('a[data-item-type="global_search"]')
|
140
|
+
end
|
141
|
+
```
|
142
|
+
|
143
|
+
```ruby
|
144
|
+
all('.list-item').each do |li|
|
145
|
+
# With Capybara::Node::Element method
|
146
|
+
puts li.all('a').first.text
|
147
|
+
|
148
|
+
# With Playwright-native ElementHandle
|
149
|
+
puts li.with_playwright_element_handle do |handle|
|
150
|
+
# `handle` is an instance of Playwright::ElementHandle
|
151
|
+
handle.query_selector('a').text_content
|
152
|
+
end
|
153
|
+
end
|
154
|
+
```
|
155
|
+
|
156
|
+
Generally, Capybara DSL seems simple, but Playwright-native scripting are more precise and efficient. Also `waitForNavigation`, `waitForSelector`, and many other Playwright functions are available with Playwright-native scripting.
|
157
|
+
|
158
|
+
### Limitations
|
159
|
+
|
160
|
+
* Playwright doesn't allow clicking invisible DOM elements or moving elements. `click` sometimes doesn't work as Selenium does. See the detail in https://playwright.dev/docs/actionability/
|
161
|
+
* `current_window.maximize` and `current_window.fullscreen` work only on headful (non-headless) mode, as selenium driver does.
|
162
|
+
* `Capybara::Node::Element#drag_to` does not accept `html5` parameter, since [Playwright doesn't implement the feature yet](https://github.com/microsoft/playwright/pull/6207).
|
@@ -7,7 +7,7 @@ module Playwright
|
|
7
7
|
private def after_initialize
|
8
8
|
@connected = true
|
9
9
|
@closed_or_closing = false
|
10
|
-
@remote =
|
10
|
+
@remote = false
|
11
11
|
|
12
12
|
@contexts = Set.new
|
13
13
|
@channel.on('close', method(:on_close))
|
@@ -52,14 +52,6 @@ module Playwright
|
|
52
52
|
|
53
53
|
def close
|
54
54
|
return if @closed_or_closing
|
55
|
-
if @remote
|
56
|
-
@contexts.each do |context|
|
57
|
-
context.pages.each do |page|
|
58
|
-
page.send(:on_close)
|
59
|
-
end
|
60
|
-
context.send(:on_close)
|
61
|
-
end
|
62
|
-
end
|
63
55
|
@closed_or_closing = true
|
64
56
|
@channel.send_message_to_server('close')
|
65
57
|
nil
|
@@ -89,14 +81,6 @@ module Playwright
|
|
89
81
|
|
90
82
|
private def on_close(_ = {})
|
91
83
|
@connected = false
|
92
|
-
if @remote
|
93
|
-
@contexts.each do |context|
|
94
|
-
context.pages.each do |page|
|
95
|
-
page.send(:on_close)
|
96
|
-
end
|
97
|
-
context.send(:on_close)
|
98
|
-
end
|
99
|
-
end
|
100
84
|
emit(Events::Browser::Disconnected, self)
|
101
85
|
@closed_or_closing = true
|
102
86
|
end
|
@@ -46,6 +46,8 @@ module Playwright
|
|
46
46
|
ChannelOwners::Request.from_nullable(params['page']),
|
47
47
|
)
|
48
48
|
})
|
49
|
+
|
50
|
+
@closed_promise = Concurrent::Promises.resolvable_future
|
49
51
|
end
|
50
52
|
|
51
53
|
private def on_page(page)
|
@@ -223,15 +225,14 @@ module Playwright
|
|
223
225
|
end
|
224
226
|
|
225
227
|
private def on_close
|
226
|
-
@closed_or_closing = true
|
227
228
|
@browser&.send(:remove_context, self)
|
228
229
|
emit(Events::BrowserContext::Close)
|
230
|
+
@closed_promise.fulfill(true)
|
229
231
|
end
|
230
232
|
|
231
233
|
def close
|
232
|
-
return if @closed_or_closing
|
233
|
-
@closed_or_closing = true
|
234
234
|
@channel.send_message_to_server('close')
|
235
|
+
@closed_promise.value!
|
235
236
|
nil
|
236
237
|
rescue => err
|
237
238
|
raise unless safe_close_error?(err)
|
@@ -65,7 +65,8 @@ module Playwright
|
|
65
65
|
emit(Events::Page::WebSocket, ChannelOwners::WebSocket.from(params['webSocket']))
|
66
66
|
})
|
67
67
|
@channel.on('worker', ->(params) {
|
68
|
-
|
68
|
+
worker = ChannelOwners::Worker.from(params['worker'])
|
69
|
+
# on_worker(worker)
|
69
70
|
})
|
70
71
|
end
|
71
72
|
|
data/lib/playwright/version.rb
CHANGED
data/lib/playwright_api/page.rb
CHANGED
@@ -1278,8 +1278,8 @@ module Playwright
|
|
1278
1278
|
end
|
1279
1279
|
|
1280
1280
|
# @nodoc
|
1281
|
-
def
|
1282
|
-
wrap_impl(@impl.
|
1281
|
+
def start_css_coverage(resetOnNavigation: nil, reportAnonymousScripts: nil)
|
1282
|
+
wrap_impl(@impl.start_css_coverage(resetOnNavigation: unwrap_impl(resetOnNavigation), reportAnonymousScripts: unwrap_impl(reportAnonymousScripts)))
|
1283
1283
|
end
|
1284
1284
|
|
1285
1285
|
# @nodoc
|
@@ -1288,8 +1288,8 @@ module Playwright
|
|
1288
1288
|
end
|
1289
1289
|
|
1290
1290
|
# @nodoc
|
1291
|
-
def
|
1292
|
-
wrap_impl(@impl.
|
1291
|
+
def stop_js_coverage
|
1292
|
+
wrap_impl(@impl.stop_js_coverage)
|
1293
1293
|
end
|
1294
1294
|
|
1295
1295
|
# @nodoc
|
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: 0.6.
|
4
|
+
version: 0.6.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- YusukeIwaki
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-06-
|
11
|
+
date: 2021-06-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|