webdriver 0.5.0 → 0.6.0

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: 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