webdriver 0.7.0 → 0.11.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: 8cfe50048aac54274b8fbd7fe797f2931d45124fa00cfa95c6f9635a496b5a2e
4
- data.tar.gz: 23353ed4026830201e883161ddcabe49bc3411096c2ec756025b989766912932
3
+ metadata.gz: e2cedf06258ad35e58eebf1a51682fae8eb58ab42a782e3f71fd8333bb87b350
4
+ data.tar.gz: 44583f74accd0d09c7ea419eaf373b61bf4e5ce2423ef628eecffe98f0cbd47b
5
5
  SHA512:
6
- metadata.gz: cd8217679a3381d6000221677636ab809bf121babdcf2b212ab9977c6ce00fee2cb7014a1e50270b706787d6835e69957e84ba099713a35bacb3e4a01559712f
7
- data.tar.gz: 1b0fff33057e04f4e8a92db86eae53fe3416f283891f36fdfa36aa777a79eb2c8c3a1f68bc8d3b961dbfea6fd4bf3b935319175fdb0f603a0e4988628d817f54
6
+ metadata.gz: 8833fa8e7a38d4e80cdebd3dd314d5fb006c8b8f27f3366114654a4c26616dcce96e25056f2b86da6130a6703d86a77c442618762ff129c66391805643c895c5
7
+ data.tar.gz: efe90801a943b65bf9aca63ed8de6d6ccef273ce8c271a76bc2333aeb6db17cd2ec3d3d1f4ab35739cf06c47ff779fde74b8f75a4ac1af17adcd5168f8fcf022
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- webdriver (0.7.0)
4
+ webdriver (0.11.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -1,39 +1,11 @@
1
- # Webdriver
1
+ # webdriver
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/webdriver`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ A Ruby https://www.w3.org/TR/webdriver/ driver
4
4
 
5
- TODO: Delete this and the text above, and describe your gem
5
+ ## Notes for implementators
6
6
 
7
- ## Installation
8
-
9
- Add this line to your application's Gemfile:
10
-
11
- ```ruby
12
- gem 'webdriver'
13
- ```
14
-
15
- And then execute:
16
-
17
- $ bundle
18
-
19
- Or install it yourself as:
20
-
21
- $ gem install webdriver
22
-
23
- ## Usage
24
-
25
- TODO: Write usage instructions here
26
-
27
- ## Development
28
-
29
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
-
31
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
-
33
- ## Contributing
34
-
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/webdriver.
36
-
37
- ## License
38
-
39
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
7
+ - `element.value!` is slow when compared to JavaScript `el.value = ...`
8
+ - element visibility helper `element.displayed?`
9
+ hitrate.
10
+ - Remember to use JavaScript multiline strings \` \` in `session.async_exec`
11
+ - looks like delaying 0.5s between element find and click improves
@@ -11,6 +11,8 @@ module Webdriver
11
11
  end
12
12
 
13
13
  require_relative "webdriver/version"
14
+ require_relative "webdriver/errors"
15
+
14
16
  require_relative "webdriver/connection"
15
17
  require_relative "webdriver/prefix_connection"
16
18
 
@@ -3,6 +3,7 @@ module Webdriver
3
3
  def initialize endpoint
4
4
  uri = URI(endpoint)
5
5
  @http = Net::HTTP.new uri.hostname, uri.port
6
+ @mutex = Mutex.new
6
7
  end
7
8
 
8
9
  def get path, headers={}
@@ -22,15 +23,17 @@ module Webdriver
22
23
  body_json = body.to_json if body
23
24
  Webdriver.debug [method, path, headers, body_json]
24
25
 
25
- response = case method
26
- when :get
27
- @http.get path
28
- when :post
29
- @http.post path, body_json
30
- when :delete
31
- @http.delete path, body_json
32
- else
33
- raise "err"
26
+ response = @mutex.synchronize do
27
+ case method
28
+ when :get
29
+ @http.get path
30
+ when :post
31
+ @http.post path, body_json
32
+ when :delete
33
+ @http.delete path, body_json
34
+ else
35
+ raise "err"
36
+ end
34
37
  end
35
38
 
36
39
  response_body = JSON.parse response.body
@@ -39,7 +42,11 @@ module Webdriver
39
42
  session_id = response_body.dig "sessionId"
40
43
  value = response_body.dig "value"
41
44
 
45
+
42
46
  case status
47
+ when nil
48
+ # application_status_cache
49
+ value
43
50
  when 0
44
51
  # POST /session has different response structure than other calls
45
52
  if method == :post && path == "/session"
@@ -47,16 +54,18 @@ module Webdriver
47
54
  else # everything else works like this
48
55
  value
49
56
  end
57
+ when 10
58
+ raise Webdriver::StaleElementReferenceError
59
+ when 11
60
+ raise Webdriver::ElementNotInteractableError
50
61
  when 1..nil
51
- # 10: stale element reference: element is not attached to the page document
52
- # 11: element not interactable
53
62
  error_message = value.dig("message")
54
63
  raise "#{status}: #{error_message}"
55
64
  else
56
65
  if method == :get && path == "/status"
57
66
  value
58
67
  else
59
- raise [:unknown, response_body]
68
+ raise "unknown status: #{status}"
60
69
  end
61
70
  end
62
71
  end
@@ -14,10 +14,22 @@ module Webdriver
14
14
  @id == other.id
15
15
  end
16
16
 
17
+ def location_in_view
18
+ @connection.get "location_in_view"
19
+ end
20
+
21
+ def size
22
+ @connection.get "size"
23
+ end
24
+
17
25
  def screenshot
18
26
  @connection.get "screenshot"
19
27
  end
20
28
 
29
+ def displayed?
30
+ @connection.get "displayed"
31
+ end
32
+
21
33
  # checkbox
22
34
  def selected?
23
35
  @connection.get "selected"
@@ -0,0 +1,6 @@
1
+ module Webdriver
2
+ # 10
3
+ class StaleElementReferenceError < StandardError; end
4
+ # 11
5
+ class ElementNotInteractableError < StandardError; end
6
+ end
@@ -17,10 +17,97 @@ module Webdriver
17
17
  value.map { |id| Webdriver::Window.new id, @connection }
18
18
  end
19
19
 
20
+ def chromium_send_command_and_get_result! opts
21
+ # cmd: "Browser.getVersion", params: {}
22
+ @connection.post "chromium/send_command_and_get_result", {}, opts
23
+ end
24
+
25
+ def is_loading?
26
+ @connection.get "is_loading"
27
+ end
28
+
29
+ def page_freeze!
30
+ @connection.post "goog/page/freeze"
31
+ end
32
+
33
+ def page_resume!
34
+ # needs window min/max / timeout to resume
35
+ @connection.post "goog/page/resume"
36
+ end
37
+
38
+ # https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Keys
39
+ # enter "\ue007"
40
+ def keys= opts
41
+ @connection.post "keys", {}, opts
42
+ end
43
+
44
+ def moveto! opts
45
+ # xoffset, yoffset, element
46
+ @connection.post "moveto", {}, opts
47
+ end
48
+
49
+ def location
50
+ @connection.get "location"
51
+ end
52
+
53
+ def location! opts
54
+ #{location: {latitude: 20, longitude:20}}
55
+ @connection.post "location", {}, opts
56
+ end
57
+
58
+ def reporting_generate_test_report! opts
59
+ @connection.post "reporting/generate_test_report", {}, opts
60
+ end
61
+
62
+ def timeouts
63
+ @connection.get "timeouts"
64
+ end
65
+
66
+ def timeouts! opts
67
+ @connection.post "timeouts", {}, opts
68
+ self
69
+ end
70
+
71
+ def timeouts_async_script! opts
72
+ @connection.post "timeouts/async_script", {}, opts
73
+ end
74
+
75
+ def log_types
76
+ @connection.get "log/types"
77
+ end
78
+
79
+ def log type
80
+ @connection.post "log", {}, {
81
+ type: type
82
+ }
83
+ end
84
+
85
+ def application_cache_status
86
+ @connection.get "application_cache/status"
87
+ end
88
+
20
89
  # not implemented in chromedriver
21
- # def source
22
- # @connection.post "source"
23
- # end
90
+ def source
91
+ @connection.get "source"
92
+ end
93
+
94
+ def chromium_heap_snapshot
95
+ @connection.get "chromium/heap_snapshot"
96
+ end
97
+
98
+ def chromium_network_conditions
99
+ @connection.get "chromium/network_conditions"
100
+ end
101
+
102
+ def chromium_network_conditions! conditions
103
+ @connection.post "chromium/network_conditions", {}, conditions
104
+ self
105
+ end
106
+
107
+ def chromium_network_conditions_delete!
108
+ @connection.delete "chromium/network_conditions"
109
+ self
110
+ end
24
111
 
25
112
  def dismiss_alert!
26
113
  @connection.post "alert/dismiss"
@@ -149,15 +236,18 @@ module Webdriver
149
236
  end
150
237
  end
151
238
 
152
- # not implemented in chromedriver
153
- # def print!
154
- # @connection.post "print"
155
- # end
239
+ def print! opts
240
+ @connection.post "print", {} opts
241
+ end
156
242
 
157
243
  def screenshot
158
244
  @connection.get "screenshot"
159
245
  end
160
246
 
247
+ def screenshot_full
248
+ @connection.get "screenshot/full"
249
+ end
250
+
161
251
  # when moving with tab, or clicked
162
252
  def active_element
163
253
  el = @connection.get "element/active"
@@ -1,3 +1,3 @@
1
1
  module Webdriver
2
- VERSION = "0.7.0"
2
+ VERSION = "0.11.0"
3
3
  end
@@ -3,7 +3,20 @@ module Webdriver
3
3
  attr_reader :id
4
4
  def initialize(id, connection)
5
5
  @id = id
6
- @connection = Webdriver::PrefixConnection.new "window", connection
6
+ @session_connection = connection
7
+ @connection = Webdriver::PrefixConnection.new "window/#{@id}", connection
8
+ end
9
+
10
+ def size
11
+ @connection.get "size"
12
+ end
13
+
14
+ def position
15
+ @connection.get "position"
16
+ end
17
+
18
+ def position! opts
19
+ @connection.post "position", {}, opts
7
20
  end
8
21
 
9
22
  def maximize!
@@ -12,22 +25,22 @@ module Webdriver
12
25
  end
13
26
 
14
27
  def minimize!
15
- @connection.post "minimize"
28
+ @session_connection.post "window/minimize"
16
29
  self
17
30
  end
18
31
 
19
32
  def rect! width: nil, height: nil, x: nil, y:nil
20
- @connection.post("rect", {}, {
33
+ @session_connection.post "window/rect", {}, {
21
34
  width: width,
22
35
  height: height,
23
36
  x: x,
24
37
  y: y
25
- })
38
+ }
26
39
  self
27
40
  end
28
41
 
29
42
  def rect
30
- @connection.get "rect"
43
+ @session_connection.get "window/rect"
31
44
  end
32
45
 
33
46
  def fullscreen!
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.7.0
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matti Paksula
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-25 00:00:00.000000000 Z
11
+ date: 2020-08-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -157,6 +157,7 @@ files:
157
157
  - lib/webdriver/connection.rb
158
158
  - lib/webdriver/cookie.rb
159
159
  - lib/webdriver/element.rb
160
+ - lib/webdriver/errors.rb
160
161
  - lib/webdriver/prefix_connection.rb
161
162
  - lib/webdriver/session.rb
162
163
  - lib/webdriver/version.rb
@@ -166,7 +167,7 @@ homepage: https://www.github.com/matti/webdriver
166
167
  licenses:
167
168
  - MIT
168
169
  metadata: {}
169
- post_install_message:
170
+ post_install_message:
170
171
  rdoc_options: []
171
172
  require_paths:
172
173
  - lib
@@ -182,7 +183,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
182
183
  version: '0'
183
184
  requirements: []
184
185
  rubygems_version: 3.0.6
185
- signing_key:
186
+ signing_key:
186
187
  specification_version: 4
187
188
  summary: webdriver
188
189
  test_files: []