playwright-ruby-client 0.6.2 → 0.6.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|