eyes_selenium 2.37.0 → 2.38.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
  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