capybara-chrome_dev_tools 0.1.0 → 0.2.0
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b2a0b532302f3f1b2e4c6c654893ef551c801d45
|
4
|
+
data.tar.gz: d3dbd664cef2aaf7970ac0c10a31dc4bdec1d147
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a7886d9a272805a7c06a700deaa5db7fe05f591f81adb94af2205f8ed197fee9f8c9c49f8e5f1bcb91b04a237a32b90484e572a9b21717d4fb9afb3ec2254039
|
7
|
+
data.tar.gz: 55c00a25215425d2bcbc483f5b015c0a4768739d82cc9b49f06f1261b7d97ce6fc5281d8d113014eed12ebf97f6e3a0d07f2b88ffb022c827c8d0bf98103a2b9
|
data/Readme.md
CHANGED
@@ -3,9 +3,24 @@
|
|
3
3
|
Integrates [chrome_remote](https://github.com/cavalle/chrome_remote) (a Chrome DevTools Protocol
|
4
4
|
client) with Capybara, letting you access Chrome DevTools via `driver.dev_tools`.
|
5
5
|
|
6
|
+
## What it does for you
|
7
|
+
|
8
|
+
- Finds a free port and sets Chrome's --remote-debugging-port to this known port
|
9
|
+
- Starts [`crmux`](https://github.com/sidorares/crmux) so that you can make additional connections
|
10
|
+
to the Chrome DevTools/debugging port even while `chromedriver` continues to connect to the
|
11
|
+
`--remote-debugging-port` (Chrome normally only allows one debugging session to be connected to a
|
12
|
+
tab)
|
13
|
+
- Lets you inspect the browser window your tests are running in — even if they are running in a
|
14
|
+
headless Chrome browser!
|
15
|
+
- Exposes a `dev_tools` method that provides access to a `ChromeRemote` instance (see
|
16
|
+
[capybara-chrome_response_headers](https://github.com/TylerRick/capybara-chrome_response_headers),
|
17
|
+
for one possible use for that)
|
18
|
+
|
19
|
+
Inspired by: https://stackoverflow.com/a/50876153/47185
|
20
|
+
|
6
21
|
## Installation
|
7
22
|
|
8
|
-
Install crmux by running, for example:
|
23
|
+
Install [`crmux`](https://github.com/sidorares/crmux) by running, for example:
|
9
24
|
```
|
10
25
|
npm install crmux -g
|
11
26
|
```
|
@@ -27,6 +42,33 @@ gem 'capybara-chrome_dev_tools'
|
|
27
42
|
|
28
43
|
## Usage
|
29
44
|
|
45
|
+
Enable this extension like so:
|
46
|
+
```
|
47
|
+
Capybara::ChromeDevTools.enabled = true
|
48
|
+
```
|
49
|
+
|
50
|
+
... before you do any action with Capybara that triggers it to use the Chrome driver/browser.
|
51
|
+
|
52
|
+
### Accessing DevTools from another Chrome window
|
53
|
+
|
54
|
+
Add some code to your test to make it _pause_ at the point where you want to inspect the state of
|
55
|
+
the browser window. Otherwise, when the test finishes, it will close the window that you are
|
56
|
+
inspecting and disconnect the DevTools frontend that you were using to view it.
|
57
|
+
|
58
|
+
Look for the output which teels you which port it's listening to:
|
59
|
+
|
60
|
+
```
|
61
|
+
Started crmux [pid 56630], listening at http://localhost:35720, connected to localhost:35719
|
62
|
+
```
|
63
|
+
|
64
|
+
Now you can go to http://localhost:35720, choose which window to inspect, and inspect the Chrome
|
65
|
+
window that your tests are running in — all from this other Chrome browser instance!
|
66
|
+
|
67
|
+
You can also get the listen port from `driver.crmux_listen_port` if you want to
|
68
|
+
automate things.
|
69
|
+
|
70
|
+
### Accessing DevTools from Ruby
|
71
|
+
|
30
72
|
Access a ChromeRemote instance with `dev_tools`.
|
31
73
|
|
32
74
|
See [chrome_remote](https://github.com/cavalle/chrome_remote) for API documentation.
|
@@ -36,6 +78,16 @@ Example:
|
|
36
78
|
dev_tools.send_cmd "Page.enable"
|
37
79
|
```
|
38
80
|
|
81
|
+
## Status
|
82
|
+
|
83
|
+
This project should be considered a proof of concept.
|
84
|
+
|
85
|
+
It generally works, but isn't exceptionally resilient or stable.
|
86
|
+
|
87
|
+
Sometimes you may get intermittent errors from `chrome_remote` or the WebSocket connection. There
|
88
|
+
should probably be some handling of these errors (or better yet, figure out what's causing the
|
89
|
+
errors).
|
90
|
+
|
39
91
|
## See also
|
40
92
|
|
41
93
|
To get access to HTTP response status code, response headers, etc. from your tests, check out https://github.com/TylerRick/capybara-chrome_response_headers, which uses this gem.
|
@@ -5,9 +5,13 @@ module Capybara::ChromeDevTools
|
|
5
5
|
autoload :DSL, 'capybara/chrome_dev_tools/dsl'
|
6
6
|
|
7
7
|
class << self
|
8
|
+
attr_accessor :enabled
|
8
9
|
attr_accessor :preferred_port
|
10
|
+
attr_accessor :verbose
|
9
11
|
end
|
12
|
+
self.enabled = false
|
10
13
|
self.preferred_port = 9222
|
14
|
+
self.verbose = 1
|
11
15
|
end
|
12
16
|
|
13
17
|
Capybara::Selenium::Driver.class_eval do
|
@@ -6,9 +6,9 @@ module Capybara::ChromeDevTools
|
|
6
6
|
attr_accessor :crmux_listen_port
|
7
7
|
|
8
8
|
def initialize(app, opts)
|
9
|
-
puts "#{self.class}#initialize"
|
9
|
+
#puts "#{self.class}#initialize"
|
10
10
|
|
11
|
-
if opts[:browser] == :chrome
|
11
|
+
if opts[:browser] == :chrome and Capybara::ChromeDevTools.enabled
|
12
12
|
start_crmux!(opts)
|
13
13
|
end
|
14
14
|
|
@@ -43,7 +43,7 @@ module Capybara::ChromeDevTools
|
|
43
43
|
command = "npx crmux #{'-d' if @debug_crmux} \
|
44
44
|
--port=#{chrome_debugging_port} \
|
45
45
|
--listen=#{crmux_listen_port}"
|
46
|
-
|
46
|
+
puts %(command: #{command}) if Capybara::ChromeDevTools.verbose >= 3
|
47
47
|
if @debug_crmux
|
48
48
|
spawn_opts = {[:out, :err] => 'log/crmux.log'}
|
49
49
|
else
|
@@ -55,20 +55,20 @@ module Capybara::ChromeDevTools
|
|
55
55
|
sleep 0.1
|
56
56
|
|
57
57
|
at_exit do
|
58
|
-
puts "Killing crmux process #{@crmux_pid}..."
|
58
|
+
puts "Killing crmux process #{@crmux_pid}..." if Capybara::ChromeDevTools.verbose >= 1
|
59
59
|
Process.kill 'TERM', @crmux_pid
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
63
|
def browser
|
64
64
|
super.tap do |browser|
|
65
|
-
dev_tools
|
65
|
+
dev_tools if Capybara::ChromeDevTools.enabled
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
69
|
def dev_tools
|
70
70
|
@dev_tools ||= (
|
71
|
-
|
71
|
+
puts "Connecting to #{crmux_listen_port}..." if Capybara::ChromeDevTools.verbose >= 2
|
72
72
|
ChromeRemote.client host: 'localhost', port: crmux_listen_port
|
73
73
|
)
|
74
74
|
end
|