webdriver 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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