eyes_selenium 2.37.0 → 2.38.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
  SHA1:
3
- metadata.gz: 5a7377ec805fb8d992f0d4a5824df099c88399b2
4
- data.tar.gz: 75b9eda1e1c09e56c0cec6c4a0edb34b6e345db4
3
+ metadata.gz: 3f99be729477dfe4620d7e5a34ac8bdf7c72b0d0
4
+ data.tar.gz: 960476bb8f22adb7348a2ff3c17b9785bb9c3bf7
5
5
  SHA512:
6
- metadata.gz: 9aeb2f24c873ace1cca6f056eaf77a17baab4191cf1f73f98d3955341d67f4e2dccd691c827cfdc2681872458a8c21e27a6819b39ae07a307c84b42bd97a3c49
7
- data.tar.gz: 4bf4801f534f014e3dd13d3a1293938e9ef61a8020a3431472889c26aba56345091b8550521a248decfd0ead95360ef11c860c40adc6bd096f5a2171df9e405c
6
+ metadata.gz: 479fedebff785cec3a5bcc440fc9bb700713ecc70c84e2e5eef786ff9e4cb3306753ffef4766534fa7f5df95ef1f4d89a56028dd8760bb16b2b958ae2b760868
7
+ data.tar.gz: 2001fcb0b69a988b981bd3952e85121e968ab210d8c969593439d36d2b75351a318f3ac2f46e8c22725951f68bdda113816b0ff740d458328f3d3010b339cda9
data/.travis.yml CHANGED
@@ -3,8 +3,7 @@ rvm:
3
3
  - 1.9.3
4
4
  - 2.0.0
5
5
  - 2.1.6
6
- - 2.2.2
7
- - ruby-head
6
+ - 2.3.1
8
7
  - rbx-2
9
8
  matrix:
10
9
  allow_failures:
@@ -1,8 +1,8 @@
1
- require_relative '../lib/eyes_selenium'
2
-
3
1
  require 'logger'
4
2
  require 'appium_lib'
5
3
 
4
+ require 'eyes_selenium'
5
+
6
6
  # Based on Appium example: https://github.com/appium/appium/blob/master/sample-code/examples/ruby/
7
7
 
8
8
  def android_caps
@@ -0,0 +1,82 @@
1
+ require 'rspec'
2
+ require 'capybara/rspec'
3
+ require 'eyes_selenium'
4
+ require 'applitools/capybara'
5
+
6
+ ##
7
+ # This will register capybara driver :eyes by performing
8
+ #
9
+ # Capybara.register_driver :eyes do |app|
10
+ # Capybara::Selenium::Driver.new(options)
11
+ # end
12
+ #
13
+ # (options are passed to Applitools.register_capybara_driver method) and set it as a default driver.
14
+ # The page.driver.browser method will return Applitools::Selenium::Driver instance,
15
+ # based on standard Selenium::Webdriver driver, when eyes have opened.
16
+ # The page.driver.browser method will contain Selenium::Webdriver
17
+ # instance (without applitools wrapper), after eyes have closed
18
+ #
19
+ Applitools.register_capybara_driver :browser => :chrome
20
+
21
+ # Register another driver if needed
22
+ Capybara.register_driver :selenium_chrome do |app|
23
+ Capybara::Selenium::Driver.new(app, :browser => :chrome)
24
+ end
25
+
26
+ # And even one more
27
+ Capybara.register_driver :selenium_firefox do |app|
28
+ Capybara::Selenium::Driver.new(app, :browser => :firefox)
29
+ end
30
+
31
+ describe 'Capybara Example', :type => :feature, :js => true do
32
+ let(:eyes) do
33
+ Applitools::Eyes.new.tap do |eyes|
34
+ eyes.api_key = ENV['APPLITOOLS_API_KEY']
35
+ eyes.log_handler = Logger.new(STDOUT)
36
+ end
37
+ end
38
+
39
+ it 'Simple test' do
40
+ eyes.open(app_name: 'Ruby SDK', test_name: 'Capybara test', driver: page,
41
+ viewport_size: { width: 800, height: 600 })
42
+ visit 'http://github.com'
43
+ eyes.check_window('homepage')
44
+ fill_in('user[login]', with: 'user')
45
+ eyes.check_window('homepage with username')
46
+ eyes.close
47
+ end
48
+
49
+ ##
50
+ # This will use :eyes driver with standard browser, without Applitools wrapper
51
+ # In our case - Selenium::Webdriver for :crome
52
+ #
53
+ it 'common capybara test' do
54
+ visit 'http://github.com'
55
+ fill_in('user[login]', with: 'user')
56
+ # and so on
57
+ end
58
+
59
+ it 'other chrome test' do
60
+ ##
61
+ # this uses :selenium_chrome driver (see Capybara.register_driver block) instead of :eyes driver
62
+ Capybara.using_driver :selenium_chrome do
63
+ visit 'http://github.com'
64
+ fill_in('user[login]', with: 'user')
65
+ # and so on
66
+ end
67
+ end
68
+
69
+ after :each do
70
+ eyes.abort_if_not_closed
71
+ end
72
+ end
73
+
74
+ describe 'Other Capybara tests', :type => :feature, :js => true do
75
+ it 'some other chrome test' do
76
+ Capybara.using_driver :selenium_chrome do
77
+ visit 'http://github.com'
78
+ fill_in('user[login]', with: 'user')
79
+ # and so on
80
+ end
81
+ end
82
+ end
File without changes
File without changes
@@ -1,7 +1,6 @@
1
- require_relative '../lib/eyes_selenium'
2
-
3
- require 'logger'
4
1
  require 'watir-webdriver'
2
+ require 'eyes_selenium'
3
+ require 'logger'
5
4
 
6
5
  require 'openssl'
7
6
  OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
@@ -1,7 +1,7 @@
1
1
  if defined? Appium::Driver
2
2
  Appium::Driver.class_eval do
3
3
  def driver_for_eyes(eyes)
4
- Applitools::Selenium::Driver.new(eyes, driver: driver, is_mobile_device: true)
4
+ Applitools::Selenium::Driver.new(eyes, driver: driver || start_driver, is_mobile_device: true)
5
5
  end
6
6
  end
7
7
  end
@@ -1,8 +1,8 @@
1
1
  require 'capybara'
2
2
 
3
- Applitools.require_dir 'capybara'
3
+ Applitools.require_dir 'selenium/capybara'
4
4
 
5
5
  module Applitools
6
- extend Applitools::Capybara::CapybaraSettings
6
+ extend Applitools::Selenium::Capybara::CapybaraSettings
7
7
  register_capybara_driver
8
8
  end
@@ -67,16 +67,21 @@ class Applitools::Eyes
67
67
  # override Eyes' automatic scaling inference. Values must be >=0 or +nil+. 1 = Don't scale, +nil+ = use Eyes'
68
68
  # automatic scaling inference.
69
69
  # +force_fullpage_screenshot+:: +boolean+ Whether or not to force fullpage screenshot taking, if the browser doesn't
70
- # support it explicitly.
70
+ # support it explicitly.
71
71
  # +hide_scrollbars+:: +boolean+ Whether or not hide scrollbars.
72
72
  # +use_css_transition+:: +boolean+ Whether or not to perform CSS transition.
73
73
  # +wait_before_screenshot+:: +Integer+ The number of milliseconds to wait before each screenshot. Use -1 to reset to
74
- # the default value.
75
- attr_reader :app_name, :test_name, :is_open, :viewport_size, :driver
74
+ # the default value.
75
+ # +debug_screenshot+:: +boolean+ If true saves every taken screenshot in current folder. File name has following
76
+ # format: +TAG_YYYY_MM_DD_HH_MI__N.png+, where +TAG+ - the tag specified for the test,
77
+ # +YYYY_MM_DD_HH_MI+ - date && time, +N+ - screenshot number (makes sence only when
78
+ # +force_fullpage_screenshot+ is true). Default value is false
79
+
80
+ attr_reader :app_name, :test_name, :is_open, :viewport_size, :driver, :passed_driver
76
81
  attr_accessor :match_timeout, :batch, :host_os, :host_app, :branch_name, :parent_branch_name, :user_inputs,
77
82
  :save_new_tests, :save_failed_tests, :is_disabled, :server_url, :agent_id, :failure_reports,
78
83
  :match_level, :baseline_name, :rotation, :force_fullpage_screenshot, :hide_scrollbars,
79
- :use_css_transition, :scale_ratio, :wait_before_screenshots
84
+ :use_css_transition, :scale_ratio, :wait_before_screenshots, :debug_screenshot
80
85
 
81
86
  def_delegators 'Applitools::EyesLogger', :log_handler, :log_handler=
82
87
  def_delegators 'Applitools::Base::ServerConnector', :api_key, :api_key=, :server_url, :server_url=, :set_proxy
@@ -103,7 +108,7 @@ class Applitools::Eyes
103
108
 
104
109
  def initialize(options = {})
105
110
  @is_disabled = false
106
-
111
+ @debug_screenshot = options[:debug_screenshot].nil? ? false : true
107
112
  return if disabled?
108
113
 
109
114
  @api_key = nil
@@ -124,7 +129,7 @@ class Applitools::Eyes
124
129
  end
125
130
 
126
131
  def open(options = {})
127
- @driver = get_driver(options)
132
+ @passed_driver = @driver = get_driver(options.merge(debug_screenshot: debug_screenshot))
128
133
  return driver if disabled?
129
134
 
130
135
  if api_key.nil?
@@ -232,6 +237,7 @@ class Applitools::Eyes
232
237
  def close(raise_ex = true)
233
238
  return if disabled?
234
239
  @is_open = false
240
+ passed_driver.use_native_browser if passed_driver.respond_to? :use_native_browser
235
241
 
236
242
  # If there's no running session, the test was never started (never reached check_window).
237
243
  unless @session
@@ -308,6 +314,7 @@ class Applitools::Eyes
308
314
  return if disabled?
309
315
 
310
316
  @is_open = false
317
+ passed_driver.use_native_browser if passed_driver.respond_to? :use_native_browser
311
318
 
312
319
  return unless @session
313
320
 
@@ -1,2 +1,2 @@
1
1
  require_relative 'capybara' if defined? Capybara
2
- Applitools.require_dir 'sauce'
2
+ Applitools.require_dir 'selenium/sauce'
@@ -1,8 +1,8 @@
1
- module Applitools::Capybara
1
+ module Applitools::Selenium::Capybara
2
2
  module CapybaraSettings
3
3
  def register_capybara_driver(options = {})
4
4
  Capybara.register_driver :eyes do |app|
5
- Applitools::Capybara::Driver.new app, options
5
+ Applitools::Selenium::Capybara::Driver.new app, options
6
6
  end
7
7
  Capybara.default_driver = :eyes
8
8
  Capybara.javascript_driver = :eyes
@@ -1,5 +1,5 @@
1
1
  if defined? Capybara::Selenium::Driver
2
- module Applitools::Capybara
2
+ module Applitools::Selenium::Capybara
3
3
  class Driver < Capybara::Selenium::Driver
4
4
  def driver_for_eyes(eyes)
5
5
  browser eyes: eyes
@@ -7,7 +7,7 @@ if defined? Capybara::Selenium::Driver
7
7
 
8
8
  def browser(options = {})
9
9
  eyes = options.delete(:eyes)
10
- super()
10
+ @native_browser ||= super()
11
11
  unless eyes.nil?
12
12
  is_mobile_device = @browser.capabilities['platformName'] ? true : false
13
13
  @browser = Applitools::Selenium::Driver.new eyes,
@@ -15,6 +15,10 @@ if defined? Capybara::Selenium::Driver
15
15
  end
16
16
  @browser
17
17
  end
18
+
19
+ def use_native_browser
20
+ @browser = @native_browser
21
+ end
18
22
  end
19
23
  end
20
24
  end
@@ -24,5 +28,9 @@ if defined? Capybara::Session
24
28
  def driver_for_eyes(eyes)
25
29
  driver.driver_for_eyes eyes
26
30
  end
31
+
32
+ def use_native_browser
33
+ driver.use_native_browser if driver.respond_to? :use_native_browser
34
+ end
27
35
  end
28
36
  end
@@ -86,10 +86,13 @@ module Applitools::Selenium
86
86
  # Return a normalized screenshot.
87
87
  #
88
88
  # +rotation+:: +Integer+|+nil+ The degrees by which to rotate the image: positive values = clockwise rotation,
89
- # negative values = counter-clockwise, 0 = force no rotation, +nil+ = rotate automatically when needed.
89
+ # negative values = counter-clockwise, 0 = force no rotation, +nil+ = rotate automatically when needed.
90
+ # +tag+:: +String|nil+ The tag specified for the test, used onle when +debug_screenshot+ is set to true
90
91
  #
91
92
  # Returns: +ChunkPng::Image+ A screenshot object, normalized by scale and rotation.
92
- def get_screenshot(rotation = nil)
93
+ def get_screenshot(rotation = nil, tag = nil)
94
+ @tag_for_screenshot_debug = tag
95
+ @visible_screenshot_call_count = 0
93
96
  image = mobile_device? || !@eyes.force_fullpage_screenshot ? visible_screenshot : @browser.fullpage_screenshot
94
97
  Applitools::Selenium::Driver.normalize_image(self, image, rotation)
95
98
  image
@@ -99,7 +102,9 @@ module Applitools::Selenium
99
102
  Applitools::EyesLogger.debug "Waiting before screenshot: #{wait_before_screenshots} seconds..."
100
103
  sleep(wait_before_screenshots)
101
104
  Applitools::EyesLogger.debug 'Finished waiting.'
102
- Applitools::Utils::ImageUtils::Screenshot.new driver.screenshot_as(:png)
105
+ screenshot = driver.screenshot_as(:png)
106
+ save_image(screenshot) if @eyes.debug_screenshot
107
+ Applitools::Utils::ImageUtils::Screenshot.new screenshot
103
108
  end
104
109
 
105
110
  def mouse
@@ -137,6 +142,12 @@ module Applitools::Selenium
137
142
 
138
143
  private
139
144
 
145
+ def save_image(image)
146
+ tag = (@tag_for_screenshot_debug || 'screenshot').gsub(/\s+/, '_')
147
+ screenshot = ChunkyPNG::Image.from_string(image)
148
+ screenshot.save("#{tag}_#{Time.now.strftime('%Y_%m_%d_%H_%M')}__#{@visible_screenshot_call_count += 1}.png")
149
+ end
150
+
140
151
  def bridge
141
152
  __getobj__.send(:bridge)
142
153
  end
@@ -103,7 +103,7 @@ module Applitools::Selenium
103
103
  title = eyes.title
104
104
  Applitools::EyesLogger.debug 'Getting screenshot...'
105
105
  Applitools::EyesLogger.debug 'Done! Creating image object from PNG...'
106
- @current_screenshot = driver.get_screenshot(rotation)
106
+ @current_screenshot = driver.get_screenshot(rotation, tag)
107
107
  Applitools::EyesLogger.debug 'Done!'
108
108
  # If a region was defined, we refer to the sub-image defined by the region.
109
109
  unless region.empty?
@@ -4,6 +4,10 @@ if defined? Sauce::Selenium2
4
4
  def driver_for_eyes(eyes)
5
5
  browser.raw_driver eyes: eyes
6
6
  end
7
+
8
+ def use_native_browser
9
+ browser.use_native_browser
10
+ end
7
11
  end
8
12
  end
9
13
 
@@ -14,6 +18,7 @@ if defined? Sauce::Selenium2
14
18
 
15
19
  def raw_driver(options = {})
16
20
  eyes = options.delete(:eyes)
21
+ @native_driver ||= @raw_driver
17
22
  unless eyes.nil?
18
23
  is_mobile_device = @raw_driver.capabilities['platformName'] ? true : false
19
24
  @raw_driver = Applitools::Selenium::Driver.new eyes,
@@ -21,5 +26,9 @@ if defined? Sauce::Selenium2
21
26
  end
22
27
  @raw_driver
23
28
  end
29
+
30
+ def use_native_browser
31
+ @raw_driver = @native_driver
32
+ end
24
33
  end
25
34
  end
@@ -23,8 +23,8 @@ module Applitools::Utils
23
23
  #
24
24
  # Returns:
25
25
  # +ChunkyPNG::Canvas+ An image object.
26
- def png_image_from_base64(png_bytes64)
27
- png_image_from_bytes(Base64.decode64(png_bytes64))
26
+ def png_image_from_base64(png_bytes)
27
+ png_image_from_bytes(Base64.decode64(png_bytes))
28
28
  end
29
29
 
30
30
  # Get the raw PNG bytes of an image.
@@ -1,3 +1,3 @@
1
1
  module Applitools
2
- VERSION = '2.37.0'.freeze
2
+ VERSION = '2.38.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eyes_selenium
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.37.0
4
+ version: 2.38.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Applitools Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-01 00:00:00.000000000 Z
11
+ date: 2016-09-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: selenium-webdriver
@@ -178,6 +178,20 @@ dependencies:
178
178
  - - ">="
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: rack
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: 1.6.0
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: 1.6.0
181
195
  - !ruby/object:Gem::Dependency
182
196
  name: rubocop
183
197
  requirement: !ruby/object:Gem::Requirement
@@ -278,6 +292,12 @@ files:
278
292
  - README.md
279
293
  - Rakefile
280
294
  - certs/cacert.pem
295
+ - examples/appium_example_script.rb
296
+ - examples/capybara_example.rb
297
+ - examples/sauce_capybara_example.rb
298
+ - examples/sauce_example.rb
299
+ - examples/simple_test_script.rb
300
+ - examples/watir_test_script.rb
281
301
  - eyes_selenium.gemspec
282
302
  - lib/applitools/appium_driver.rb
283
303
  - lib/applitools/base/batch_info.rb
@@ -293,21 +313,21 @@ files:
293
313
  - lib/applitools/base/test_results.rb
294
314
  - lib/applitools/base/text_trigger.rb
295
315
  - lib/applitools/capybara.rb
296
- - lib/applitools/capybara/capybara_settings.rb
297
- - lib/applitools/capybara/driver.rb
298
316
  - lib/applitools/extensions.rb
299
317
  - lib/applitools/eyes.rb
300
318
  - lib/applitools/eyes_logger.rb
301
319
  - lib/applitools/method_tracer.rb
302
320
  - lib/applitools/sauce.rb
303
- - lib/applitools/sauce/driver.rb
304
321
  - lib/applitools/selenium/browser.rb
322
+ - lib/applitools/selenium/capybara/capybara_settings.rb
323
+ - lib/applitools/selenium/capybara/driver.rb
305
324
  - lib/applitools/selenium/driver.rb
306
325
  - lib/applitools/selenium/element.rb
307
326
  - lib/applitools/selenium/keyboard.rb
308
327
  - lib/applitools/selenium/match_window_data.rb
309
328
  - lib/applitools/selenium/match_window_task.rb
310
329
  - lib/applitools/selenium/mouse.rb
330
+ - lib/applitools/selenium/sauce/driver.rb
311
331
  - lib/applitools/selenium/viewport_size.rb
312
332
  - lib/applitools/selenium_webdriver.rb
313
333
  - lib/applitools/utils/image_delta_compressor.rb
@@ -319,12 +339,6 @@ files:
319
339
  - spec/driver_passthrough_spec.rb
320
340
  - spec/fixtures/static_test_file.html
321
341
  - spec/spec_helper.rb
322
- - test/appium_example_script.rb
323
- - test/capybara_example.rb
324
- - test/sauce_capybara_example.rb
325
- - test/sauce_example.rb
326
- - test/test_script.rb
327
- - test/watir_test_script.rb
328
342
  homepage: https://www.applitools.com
329
343
  licenses:
330
344
  - Apache License, Version 2.0
@@ -345,7 +359,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
345
359
  version: '0'
346
360
  requirements: []
347
361
  rubyforge_project:
348
- rubygems_version: 2.5.1
362
+ rubygems_version: 2.4.6
349
363
  signing_key:
350
364
  specification_version: 4
351
365
  summary: Applitools Ruby SDK
@@ -353,9 +367,3 @@ test_files:
353
367
  - spec/driver_passthrough_spec.rb
354
368
  - spec/fixtures/static_test_file.html
355
369
  - spec/spec_helper.rb
356
- - test/appium_example_script.rb
357
- - test/capybara_example.rb
358
- - test/sauce_capybara_example.rb
359
- - test/sauce_example.rb
360
- - test/test_script.rb
361
- - test/watir_test_script.rb
@@ -1,28 +0,0 @@
1
- require 'rspec'
2
- require 'capybara/rspec'
3
- require 'eyes_selenium'
4
-
5
- Applitools.register_capybara_driver :browser => :chrome
6
-
7
- describe 'Capybara Example', :type => :feature, :js => true do
8
- let(:eyes) do
9
- Applitools::Eyes.new.tap do |eyes|
10
- eyes.api_key = ENV['APPLITOOLS_API_KEY']
11
- eyes.log_handler = Logger.new(STDOUT)
12
- end
13
- end
14
-
15
- it 'Simple test' do
16
- eyes.open(app_name: 'Ruby SDK', test_name: 'Capybara test', driver: page,
17
- viewport_size: { width: 800, height: 600 })
18
- visit 'http://github.com'
19
- eyes.check_window('homepage')
20
- fill_in('user[login]', with: 'user')
21
- eyes.check_window('homepage with username')
22
- eyes.close
23
- end
24
-
25
- after :each do
26
- eyes.abort_if_not_closed
27
- end
28
- end