webdriver 0.5.0 → 0.6.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
  SHA256:
3
- metadata.gz: c3f6a656b20690e475178f82ce162fdf50d3832d6b61c7c96010baf4a89eb920
4
- data.tar.gz: d415081d653084bc5a2e6a1c3da9123dfc7eb4d078bc16aff8c504cd633fa4ed
3
+ metadata.gz: 80278385c728ce0a053617fee79944dffaee727c10f5ae1df7b86ac0379c8391
4
+ data.tar.gz: 84e2890d9bbb1f942656b4678caf41fbaaf85ef45ad0ca11973b1b22ca7f74c7
5
5
  SHA512:
6
- metadata.gz: 151900f17d60f7a545455bdcfb757425a2eaee7f0eb96edd6b620334101123494c4f3d8eed7cc9439322073f8b20fe8f8653040c1010546050198af4eb38abc8
7
- data.tar.gz: 9587106a957c5039aaed13cbeaa7c21a8e75558aa4fb997302a91d686b4e5703d480a7d3bb23d07232187b6152380b646a39f7f60b83b1b2723954090c4477d6
6
+ metadata.gz: 0e0ee164e79d453e9d636b642bdc957536d214e22dd9e2fa0b6d9958989439a25ecda6733c2c226159ede39b57a13ed59ab4aac6b9e144d9b00d89fbac4d1ca0
7
+ data.tar.gz: 740e79f4d76ef3183208a20a5802ac67e7f0eee6c1e460611b553892aff38aebdb3f196f9528279a55ccaffbf2b96c811df545b02fa0b7413f5a8dfa3f72691d
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- webdriver (0.5.0)
4
+ webdriver (0.6.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -0,0 +1,13 @@
1
+ require_relative "../lib/webdriver"
2
+
3
+ s = (Webdriver::Client.new "http://localhost:9515/").session!
4
+
5
+ s.url! "https://example.com"
6
+
7
+ 3.times do |i|
8
+ all_a_els = s.elements "css selector", "a"
9
+ all_a_els&.first.click!
10
+ sleep 1
11
+ end
12
+
13
+ s.delete!
@@ -1,21 +1,23 @@
1
1
  module Webdriver
2
2
  class Connection
3
- def initialize(endpoint)
3
+ def initialize endpoint
4
4
  uri = URI(endpoint)
5
5
  @http = Net::HTTP.new uri.hostname, uri.port
6
6
  end
7
7
 
8
- def get(path, headers={})
8
+ def get path, headers={}
9
9
  call :get, path, headers
10
10
  end
11
- def post(path, headers={}, body=nil)
11
+
12
+ def post path, headers={}, body=nil
12
13
  call :post, path, headers, body
13
14
  end
14
- def post(path, headers={}, body=nil)
15
+
16
+ def post path, headers={}, body=nil
15
17
  call :post, path, headers, body
16
18
  end
17
19
 
18
- def call(method, path, headers={}, body={})
20
+ def call method, path, headers={}, body={}
19
21
  path = "/#{path}"
20
22
  body_json = body.to_json if body
21
23
  Webdriver.debug [method, path, headers, body_json]
@@ -45,12 +47,15 @@ module Webdriver
45
47
  else # everything else works like this
46
48
  value
47
49
  end
50
+ when 1..nil
51
+ error_message = value.dig("message")
52
+ pp [:err, value.dig("message")]
53
+ raise error_message
48
54
  else
49
55
  if method == :get && path == "/status"
50
56
  value
51
57
  else
52
- pp [status, response_body]
53
- raise "err"
58
+ raise value.dig("message")
54
59
  end
55
60
  end
56
61
  end
@@ -0,0 +1,50 @@
1
+ module Webdriver
2
+ class Cookie
3
+ attr_reader :name
4
+
5
+ def initialize(name, connection)
6
+ @name = name
7
+ @session_connection = connection
8
+ @connection = Webdriver::PrefixConnection.new "cookie/#{@name}", connection
9
+ end
10
+
11
+ def delete!
12
+ @connection.delete
13
+ self
14
+ end
15
+
16
+ def domain
17
+ __refresh["domain"]
18
+ end
19
+
20
+ def expiry
21
+ __refresh["expiry"]
22
+ end
23
+
24
+ def http_only
25
+ __refresh["httpOnly"]
26
+ end
27
+
28
+ def path
29
+ __refresh["path"]
30
+ end
31
+
32
+ def same_site
33
+ __refresh["sameSite"]
34
+ end
35
+
36
+ def secure
37
+ __refresh["secure"]
38
+ end
39
+
40
+ def value
41
+ __refresh["value"]
42
+ end
43
+
44
+ private
45
+
46
+ def __refresh
47
+ @connection.get
48
+ end
49
+ end
50
+ end
@@ -9,6 +9,36 @@ module Webdriver
9
9
  @connection = Webdriver::PrefixConnection.new "element/#{@id}", connection
10
10
  end
11
11
 
12
+ def screenshot
13
+ @connection.get "screenshot"
14
+ end
15
+
16
+ # checkbox
17
+ def selected?
18
+ @connection.get "selected"
19
+ end
20
+
21
+ # form control enabled
22
+ def enabled?
23
+ @connection.get "enabled"
24
+ end
25
+
26
+ def clear!
27
+ @connection.post "clear"
28
+ click!
29
+ end
30
+
31
+ def value! value
32
+ value_string = value.to_s
33
+ if value_string == ""
34
+ clear!
35
+ else
36
+ @connection.post "value", {}, {
37
+ value: [value_string]
38
+ }
39
+ end
40
+ end
41
+
12
42
  def text
13
43
  @connection.get "text"
14
44
  end
@@ -21,6 +51,10 @@ module Webdriver
21
51
  @connection.get "name"
22
52
  end
23
53
 
54
+ def css name
55
+ @connection.get File.join("css", name)
56
+ end
57
+
24
58
  def property name
25
59
  @connection.get File.join("property", name)
26
60
  end
@@ -33,7 +67,7 @@ module Webdriver
33
67
  @connection.post "click"
34
68
  end
35
69
 
36
- def element(using, value)
70
+ def element using, value
37
71
  el = @connection.post "element", {}, {
38
72
  using: using,
39
73
  value: value
@@ -41,7 +75,7 @@ module Webdriver
41
75
  Webdriver::Element.new el["ELEMENT"], @session_connection
42
76
  end
43
77
 
44
- def elements(using, value)
78
+ def elements using, value
45
79
  resp = @connection.post "elements", {}, {
46
80
  using: using,
47
81
  value: value
@@ -5,17 +5,19 @@ module Webdriver
5
5
  @connection = connection
6
6
  end
7
7
 
8
- def get(path, headers={})
8
+ def get path=nil, headers={}
9
9
  call :get, path, headers
10
10
  end
11
- def post(path=nil, headers={}, body=nil)
11
+
12
+ def post path=nil, headers={}, body=nil
12
13
  call :post, path, headers, body
13
14
  end
14
- def delete(path=nil, headers={}, body=nil)
15
+
16
+ def delete path=nil, headers={}, body=nil
15
17
  call :delete, path, headers, body
16
18
  end
17
19
 
18
- def call(method, path=nil, headers={}, body=nil)
20
+ def call method, path=nil, headers={}, body=nil
19
21
  prefixed_path = if path
20
22
  "#{@prefix}/#{path}"
21
23
  else
@@ -9,6 +9,7 @@ module Webdriver
9
9
 
10
10
  def delete!
11
11
  @connection.delete
12
+ session
12
13
  end
13
14
 
14
15
  def windows
@@ -16,10 +17,50 @@ module Webdriver
16
17
  value.map { |id| Webdriver::Window.new id, @connection }
17
18
  end
18
19
 
20
+ # not implemented in chromedriver
21
+ # def source
22
+ # @connection.post "source"
23
+ # end
24
+
25
+ def dismiss_alert!
26
+ @connection.post "alert/dismiss"
27
+ self
28
+ end
29
+
30
+ def accept_alert!
31
+ @connection.post "alert/accept"
32
+ self
33
+ end
34
+
35
+ def alert_text
36
+ @connection.get "alert/text"
37
+ end
38
+
39
+ # TODO: Does not work with prompt
40
+ # def alert_text! text
41
+ # @connection.post "alert/text", {}, {
42
+ # text: text
43
+ # }
44
+ # end
45
+
46
+ # iframe id
47
+ def frame! name
48
+ @connection.post "frame", {}, {
49
+ id: name
50
+ }
51
+ self
52
+ end
53
+
54
+ def parent_frame!
55
+ @connection.post "frame/parent", {}, {}
56
+ self
57
+ end
58
+
19
59
  def url! url
20
60
  @connection.post "url", {}, {
21
61
  url: url
22
62
  }
63
+ self
23
64
  end
24
65
 
25
66
  def url
@@ -28,32 +69,102 @@ module Webdriver
28
69
 
29
70
  def back!
30
71
  @connection.post "back"
72
+ self
31
73
  end
32
74
 
33
75
  def forward!
34
76
  @connection.post "forward"
77
+ self
35
78
  end
36
79
 
37
80
  def refresh!
38
81
  @connection.post "refresh"
82
+ self
39
83
  end
40
84
 
41
85
  def title
42
86
  @connection.get "title"
43
87
  end
44
88
 
89
+ def cookies
90
+ resp = @connection.get "cookie"
91
+
92
+ resp.map { |el| Webdriver::Cookie.new el["name"], @connection }
93
+ end
94
+
95
+ def cookies_delete!
96
+ @connection.delete "cookie"
97
+ self
98
+ end
99
+
100
+ def cookie name
101
+ resp = @connection.get File.join("cookie",name)
102
+ Webdriver::Element.new resp["name"], @connection
103
+ end
104
+
105
+ #TODO: ??
106
+ # def cookie_add(name, value)
107
+ # @connection.post "cookie", {}, {
108
+ # name: name,
109
+ # args: {
110
+ # cookie: value,
111
+ # },
112
+ # }
113
+ # end
114
+
115
+ # TODO: hangs
116
+ # def execute_async! script, args=[]
117
+ # @connection.post "execute/async", {}, {
118
+ # script: script,
119
+ # args: args
120
+ # }
121
+ # end
122
+
45
123
  def execute_sync! script, args=[]
46
- @connection.post "execute/sync", {}, {
124
+ resp = @connection.post "execute/sync", {}, {
47
125
  script: script,
48
126
  args: args
49
127
  }
128
+
129
+ value = if resp.is_a?(Hash) && resp["ELEMENT"]
130
+ begin
131
+ el = Webdriver::Element.new resp["ELEMENT"], @connection
132
+ el.tag
133
+ el
134
+ rescue
135
+ resp
136
+ end
137
+ elsif resp.is_a?(Array)
138
+ begin
139
+ resp.map do |r|
140
+ el = Webdriver::Element.new r["ELEMENT"], @connection
141
+ el.tag
142
+ el
143
+ end
144
+ rescue
145
+ resp
146
+ end
147
+ else
148
+ resp
149
+ end
50
150
  end
51
151
 
152
+ # not implemented in chromedriver
153
+ # def print!
154
+ # @connection.post "print"
155
+ # end
156
+
52
157
  def screenshot
53
158
  @connection.get "screenshot"
54
159
  end
55
160
 
56
- def element(using, value)
161
+ # when moving with tab, or clicked
162
+ def active_element
163
+ el = @connection.get "element/active"
164
+ Webdriver::Element.new el["ELEMENT"], @connection
165
+ end
166
+
167
+ def element using, value
57
168
  el = @connection.post "element", {}, {
58
169
  using: using,
59
170
  value: value
@@ -61,7 +172,7 @@ module Webdriver
61
172
  Webdriver::Element.new el["ELEMENT"], @connection
62
173
  end
63
174
 
64
- def elements(using, value)
175
+ def elements using, value
65
176
  resp = @connection.post "elements", {}, {
66
177
  using: using,
67
178
  value: value
@@ -1,3 +1,3 @@
1
1
  module Webdriver
2
- VERSION = "0.5.0"
2
+ VERSION = "0.6.0"
3
3
  end
@@ -23,7 +23,7 @@ module Webdriver
23
23
  x: x,
24
24
  y: y
25
25
  })
26
- rect
26
+ self
27
27
  end
28
28
 
29
29
  def rect
@@ -32,10 +32,12 @@ module Webdriver
32
32
 
33
33
  def fullscreen!
34
34
  @connection.post "fullscreen"
35
+ self
35
36
  end
36
37
 
37
38
  def close!
38
39
  @connection.delete
40
+ self
39
41
  end
40
42
  end
41
43
  end
data/lib/webdriver.rb CHANGED
@@ -18,3 +18,4 @@ require_relative "webdriver/window"
18
18
  require_relative "webdriver/session"
19
19
  require_relative "webdriver/element"
20
20
  require_relative "webdriver/client"
21
+ require_relative "webdriver/cookie"
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.5.0
4
+ version: 0.6.0
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-12-09 00:00:00.000000000 Z
11
+ date: 2020-05-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -150,10 +150,12 @@ files:
150
150
  - e2e/window.rb
151
151
  - e2e/windows.rb
152
152
  - examples/args.rb
153
+ - examples/find_and_click.rb
153
154
  - examples/text_and_html.rb
154
155
  - lib/webdriver.rb
155
156
  - lib/webdriver/client.rb
156
157
  - lib/webdriver/connection.rb
158
+ - lib/webdriver/cookie.rb
157
159
  - lib/webdriver/element.rb
158
160
  - lib/webdriver/prefix_connection.rb
159
161
  - lib/webdriver/session.rb