webdriver 0.1.0 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 14751a785a595237843902b9dcb59bf205fa340685d8835d82549a5c723bfb78
4
- data.tar.gz: 2c9f9fd4579a3f4aa1284e6ce03e1cad83f8deb86348f4cc8f7a7acd550d0da0
3
+ metadata.gz: 61cfba050ed92032d471d90e33bc6ba3954816acbf92d479a3acd1298bd21db5
4
+ data.tar.gz: 930847b38708a2eea2ec45d7f4692b3d145f1f7a0807c161c15ff069231f18c1
5
5
  SHA512:
6
- metadata.gz: c14faa7596b8c158ff367b8c6272e9c0b8dcd6a70477b52adcd7768eb63e6f134d9d76f869d2882a751ff1a1a908b220cbe3cbcd67f47a0edca3fe928f3195b5
7
- data.tar.gz: 49174bbdd6e3de6105058f42eac77dd7b13aa61fce319273ea10549756a8f2bc04d8d96d8e9e0e0bfbf77d5424177e47d937d4a937adbf816547b0154a6bef8e
6
+ metadata.gz: 9e6bab7e2bebcf1d89ac97ca65c6e4d293a787827049ddc04e5089a828b1b27636c2c351cd194bdb429c26d5ad6a28a1414c6d33133a1f4627cc8bf5fa650643
7
+ data.tar.gz: 6f241238e456bac4eb1bc871ebf7338496adb5cebc0a14e2ccda48563b9babdb27530483ea1a14357aa2fa029d8ad4d04248fef78475fdd3ef6154dbbf626b1d
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ webdriver
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.6.3
data/Gemfile.lock CHANGED
@@ -1,13 +1,60 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- webdriver (0.1.0)
4
+ webdriver (0.1.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
+ binding_of_caller (0.8.0)
10
+ debug_inspector (>= 0.0.1)
11
+ byebug (11.0.0)
12
+ coderay (1.1.2)
13
+ debug_inspector (0.0.3)
9
14
  diff-lcs (1.3)
15
+ ffi (1.10.0)
16
+ formatador (0.2.5)
17
+ guard (2.15.0)
18
+ formatador (>= 0.2.4)
19
+ listen (>= 2.7, < 4.0)
20
+ lumberjack (>= 1.0.12, < 2.0)
21
+ nenv (~> 0.1)
22
+ notiffany (~> 0.0)
23
+ pry (>= 0.9.12)
24
+ shellany (~> 0.0)
25
+ thor (>= 0.18.1)
26
+ guard-compat (1.2.1)
27
+ guard-rspec (4.7.3)
28
+ guard (~> 2.1)
29
+ guard-compat (~> 1.1)
30
+ rspec (>= 2.99.0, < 4.0)
31
+ interception (0.5)
32
+ listen (3.1.5)
33
+ rb-fsevent (~> 0.9, >= 0.9.4)
34
+ rb-inotify (~> 0.9, >= 0.9.7)
35
+ ruby_dep (~> 1.2)
36
+ lumberjack (1.0.13)
37
+ method_source (0.9.2)
38
+ nenv (0.3.0)
39
+ notiffany (0.1.1)
40
+ nenv (~> 0.1)
41
+ shellany (~> 0.0)
42
+ pry (0.12.2)
43
+ coderay (~> 1.1.0)
44
+ method_source (~> 0.9.0)
45
+ pry-byebug (3.7.0)
46
+ byebug (~> 11.0)
47
+ pry (~> 0.10)
48
+ pry-rescue (1.5.0)
49
+ interception (>= 0.5)
50
+ pry (>= 0.12.0)
51
+ pry-stack_explorer (0.4.9.3)
52
+ binding_of_caller (>= 0.7)
53
+ pry (>= 0.9.11)
10
54
  rake (10.5.0)
55
+ rb-fsevent (0.10.3)
56
+ rb-inotify (0.10.0)
57
+ ffi (~> 1.0)
11
58
  rspec (3.8.0)
12
59
  rspec-core (~> 3.8.0)
13
60
  rspec-expectations (~> 3.8.0)
@@ -21,15 +68,23 @@ GEM
21
68
  diff-lcs (>= 1.2.0, < 2.0)
22
69
  rspec-support (~> 3.8.0)
23
70
  rspec-support (3.8.0)
71
+ ruby_dep (1.5.0)
72
+ shellany (0.0.1)
73
+ thor (0.20.3)
24
74
 
25
75
  PLATFORMS
26
76
  ruby
27
77
 
28
78
  DEPENDENCIES
29
79
  bundler (~> 1.16)
80
+ guard
81
+ guard-rspec
82
+ pry-byebug
83
+ pry-rescue
84
+ pry-stack_explorer
30
85
  rake (~> 10.0)
31
86
  rspec (~> 3.0)
32
87
  webdriver!
33
88
 
34
89
  BUNDLED WITH
35
- 1.16.6
90
+ 1.17.3
data/Guardfile ADDED
@@ -0,0 +1,40 @@
1
+ guard :rspec, {
2
+ cmd: "bundle exec rspec",
3
+ all_on_start: true,
4
+ all_after_pass: true,
5
+ failed_mode: :focus
6
+ } do
7
+ require "guard/rspec/dsl"
8
+ dsl = Guard::RSpec::Dsl.new(self)
9
+
10
+ rspec = dsl.rspec
11
+ watch(rspec.spec_helper) { rspec.spec_dir }
12
+ watch(rspec.spec_support) { rspec.spec_dir }
13
+ watch(rspec.spec_files)
14
+
15
+ ruby = dsl.ruby
16
+ dsl.watch_spec_files_for(ruby.lib_files)
17
+
18
+ watch(/.+\.rb$/) { |m| puts m }
19
+ watch(/.+\.rb$/) { "spec" }
20
+ end
21
+
22
+ require_relative "lib/webdriver"
23
+
24
+ Process.spawn "chromedriver"
25
+
26
+ begin
27
+ Net::HTTP.get URI("http://localhost:9515/status")
28
+ rescue Errno::ECONNREFUSED
29
+ print "."
30
+ sleep 0.1
31
+ retry
32
+ end
33
+
34
+
35
+ $client = Webdriver::Client.new "http://localhost:9515"
36
+
37
+ at_exit do
38
+ puts "killing chromedriver"
39
+ Process.kill "TERM", $__chromedriver_pid
40
+ end
data/bin/console CHANGED
@@ -7,8 +7,7 @@ require "webdriver"
7
7
  # with your gem easier. You can also use a different console, if you like.
8
8
 
9
9
  # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
10
+ require "pry"
12
11
 
13
- require "irb"
14
- IRB.start(__FILE__)
12
+ c = Webdriver::Client.new "http://localhost:9515"
13
+ Pry.start
data/e2e/all.rb ADDED
@@ -0,0 +1,10 @@
1
+ require "webdriver"
2
+ $client = Webdriver::Client.new "http://localhost:9515"
3
+ $client.sessions.map(&:delete)
4
+
5
+ require_relative "status"
6
+ require_relative "sessions"
7
+ require_relative "session"
8
+ require_relative "windows"
9
+ require_relative "window"
10
+ puts "OK"
data/e2e/session.rb ADDED
@@ -0,0 +1,4 @@
1
+ session = $client.session
2
+ raise unless session.id
3
+
4
+ session.delete
data/e2e/sessions.rb ADDED
@@ -0,0 +1 @@
1
+ raise "sessions not []" unless $client.sessions == []
data/e2e/status.rb ADDED
@@ -0,0 +1 @@
1
+ raise "status not ready" unless $client.status["ready"] == true
data/e2e/window.rb ADDED
@@ -0,0 +1,6 @@
1
+ session = $client.session
2
+ w = session.windows.first
3
+ w.maximize.minimize
4
+
5
+ raise "x not 0" unless w.rect["x"] == 0
6
+ session.delete
data/e2e/windows.rb ADDED
@@ -0,0 +1,4 @@
1
+ session = $client.session
2
+ raise "windows not 1" unless session.windows.size == 1
3
+
4
+ session.delete
@@ -0,0 +1,27 @@
1
+ module Webdriver
2
+ class Client
3
+ def initialize(endpoint, desired_capabilities={})
4
+ uri = URI(endpoint)
5
+ @connection = Webdriver::Connection.new endpoint
6
+ @desired_capabilities = desired_capabilities
7
+ end
8
+
9
+ def status
10
+ @connection.get "status"
11
+ end
12
+
13
+ def sessions
14
+ value = @connection.get "sessions"
15
+ value.map { |json| Webdriver::Session.new json, @connection }
16
+ end
17
+
18
+ def session
19
+ json = @connection.post "session", {}, {
20
+ desiredCapabilities: @desired_capabilities
21
+ }
22
+
23
+ Webdriver::Session.new json, @connection
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,57 @@
1
+ module Webdriver
2
+ class Connection
3
+ def initialize(endpoint)
4
+ uri = URI(endpoint)
5
+ @http = Net::HTTP.new uri.hostname, uri.port
6
+ end
7
+
8
+ def get(path, headers={})
9
+ call :get, path, headers
10
+ end
11
+ def post(path, headers={}, body=nil)
12
+ call :post, path, headers, body
13
+ end
14
+ def post(path, headers={}, body=nil)
15
+ call :post, path, headers, body
16
+ end
17
+
18
+ def call(method, path, headers={}, body={})
19
+ path = "/#{path}"
20
+ body_json = body.to_json if body
21
+
22
+ response = case method
23
+ when :get
24
+ @http.get path
25
+ when :post
26
+ @http.post path, body_json
27
+ when :delete
28
+ @http.delete path, body_json
29
+ else
30
+ raise "err"
31
+ end
32
+
33
+ response_body = JSON.parse response.body
34
+
35
+ status = response_body.dig "status"
36
+ session_id = response_body.dig "sessionId"
37
+ value = response_body.dig "value"
38
+
39
+ case status
40
+ when 0
41
+ # POST /session has different response structure than other calls
42
+ if method == :post && path == "/session"
43
+ value.merge("id" => session_id)
44
+ else # everything else works like this
45
+ value
46
+ end
47
+ else
48
+ if method == :get && path == "/status"
49
+ value
50
+ else
51
+ pp [status, response_body]
52
+ raise "err"
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,28 @@
1
+ module Webdriver
2
+ class PrefixConnection
3
+ def initialize(prefix, connection)
4
+ @prefix = prefix
5
+ @connection = connection
6
+ end
7
+
8
+ def get(path, headers={})
9
+ call :get, path, headers
10
+ end
11
+ def post(path=nil, headers={}, body=nil)
12
+ call :post, path, headers, body
13
+ end
14
+ def delete(path=nil, headers={}, body=nil)
15
+ call :delete, path, headers, body
16
+ end
17
+
18
+ def call(method, path=nil, headers={}, body=nil)
19
+ prefixed_path = if path
20
+ "#{@prefix}/#{path}"
21
+ else
22
+ "#{@prefix}"
23
+ end
24
+
25
+ @connection.call method, prefixed_path, headers, body
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,19 @@
1
+ module Webdriver
2
+ class Session
3
+ attr_reader :id
4
+
5
+ def initialize(json, connection)
6
+ @id = json.dig "id"
7
+ @connection = Webdriver::PrefixConnection.new "session/#{@id}", connection
8
+ end
9
+
10
+ def delete
11
+ @connection.delete
12
+ end
13
+
14
+ def windows
15
+ value = @connection.get "window/handles"
16
+ value.map { |id| Webdriver::Window.new id, @connection }
17
+ end
18
+ end
19
+ end
@@ -1,3 +1,3 @@
1
1
  module Webdriver
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -0,0 +1,23 @@
1
+ module Webdriver
2
+ class Window
3
+ attr_reader :id
4
+ def initialize(id, connection)
5
+ @id = id
6
+ @connection = Webdriver::PrefixConnection.new "window", connection
7
+ end
8
+
9
+ def maximize
10
+ @connection.post "maximize"
11
+ self
12
+ end
13
+
14
+ def minimize
15
+ @connection.post "minimize"
16
+ self
17
+ end
18
+
19
+ def rect
20
+ @connection.get "rect"
21
+ end
22
+ end
23
+ end
data/lib/webdriver.rb CHANGED
@@ -1,5 +1,15 @@
1
- require "webdriver/version"
1
+ $stdout.sync = true
2
+
3
+ require "net/http"
4
+ require "json"
2
5
 
3
6
  module Webdriver
4
- # Your code goes here...
5
7
  end
8
+
9
+ require_relative "webdriver/version"
10
+ require_relative "webdriver/connection"
11
+ require_relative "webdriver/prefix_connection"
12
+
13
+ require_relative "webdriver/window"
14
+ require_relative "webdriver/session"
15
+ require_relative "webdriver/client"
data/webdriver.gemspec CHANGED
@@ -26,4 +26,11 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency "bundler", "~> 1.16"
27
27
  spec.add_development_dependency "rake", "~> 10.0"
28
28
  spec.add_development_dependency "rspec", "~> 3.0"
29
+
30
+ spec.add_development_dependency "guard"
31
+ spec.add_development_dependency "guard-rspec"
32
+ spec.add_development_dependency "pry-byebug"
33
+ spec.add_development_dependency "pry-rescue"
34
+ spec.add_development_dependency "pry-stack_explorer"
35
+
29
36
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webdriver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matti Paksula
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-03-02 00:00:00.000000000 Z
11
+ date: 2019-08-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,76 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: guard
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: guard-rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pry-byebug
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: pry-rescue
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: pry-stack_explorer
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
55
125
  description: ''
56
126
  email:
57
127
  - matti.paksula@iki.fi
@@ -61,16 +131,30 @@ extra_rdoc_files: []
61
131
  files:
62
132
  - ".gitignore"
63
133
  - ".rspec"
134
+ - ".ruby-gemset"
135
+ - ".ruby-version"
64
136
  - ".travis.yml"
65
137
  - Gemfile
66
138
  - Gemfile.lock
139
+ - Guardfile
67
140
  - LICENSE.txt
68
141
  - README.md
69
142
  - Rakefile
70
143
  - bin/console
71
144
  - bin/setup
145
+ - e2e/all.rb
146
+ - e2e/session.rb
147
+ - e2e/sessions.rb
148
+ - e2e/status.rb
149
+ - e2e/window.rb
150
+ - e2e/windows.rb
72
151
  - lib/webdriver.rb
152
+ - lib/webdriver/client.rb
153
+ - lib/webdriver/connection.rb
154
+ - lib/webdriver/prefix_connection.rb
155
+ - lib/webdriver/session.rb
73
156
  - lib/webdriver/version.rb
157
+ - lib/webdriver/window.rb
74
158
  - webdriver.gemspec
75
159
  homepage: https://www.github.com/matti/webdriver
76
160
  licenses:
@@ -91,8 +175,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
175
  - !ruby/object:Gem::Version
92
176
  version: '0'
93
177
  requirements: []
94
- rubyforge_project:
95
- rubygems_version: 2.7.8
178
+ rubygems_version: 3.0.4
96
179
  signing_key:
97
180
  specification_version: 4
98
181
  summary: webdriver