eyes_core 3.14.3 → 3.14.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +5 -5
  2. data/ext/eyes_core/extconf.rb +2 -0
  3. data/ext/eyes_core/eyes_core.c +7 -7
  4. data/ext/eyes_core/eyes_core.h +1 -6
  5. data/lib/applitools/appium/eyes.rb +12 -0
  6. data/lib/applitools/appium/initialize_1.9.rb +22 -0
  7. data/lib/applitools/appium/initialize_2.0.rb +17 -0
  8. data/lib/applitools/appium/utils.rb +44 -0
  9. data/lib/applitools/calabash/calabash_element.rb +2 -0
  10. data/lib/applitools/calabash/calabash_screenshot_provider.rb +2 -0
  11. data/lib/applitools/calabash/environment_detector.rb +2 -0
  12. data/lib/applitools/calabash/eyes.rb +5 -3
  13. data/lib/applitools/calabash/eyes_calabash_android_screenshot.rb +13 -2
  14. data/lib/applitools/calabash/eyes_calabash_ios_screenshot.rb +2 -0
  15. data/lib/applitools/calabash/eyes_calabash_screenshot.rb +2 -0
  16. data/lib/applitools/calabash/eyes_hooks.rb +2 -0
  17. data/lib/applitools/calabash/eyes_settings.rb +2 -0
  18. data/lib/applitools/calabash/full_page_capture_algorithm.rb +2 -0
  19. data/lib/applitools/calabash/full_page_capture_algorithm/android_scroll_view.rb +12 -2
  20. data/lib/applitools/calabash/full_page_capture_algorithm/base.rb +2 -0
  21. data/lib/applitools/calabash/full_page_capture_algorithm/ios_ui_table_view.rb +2 -0
  22. data/lib/applitools/calabash/os_versions.rb +2 -0
  23. data/lib/applitools/calabash/rspec_matchers.rb +2 -0
  24. data/lib/applitools/calabash/steps/android_eyes_session.rb +2 -0
  25. data/lib/applitools/calabash/steps/android_matchers.rb +2 -0
  26. data/lib/applitools/calabash/steps/eyes_session.rb +2 -0
  27. data/lib/applitools/calabash/steps/eyes_settings.rb +2 -0
  28. data/lib/applitools/calabash/steps/ios_eyes_session.rb +2 -0
  29. data/lib/applitools/calabash/steps/ios_matchers.rb +2 -0
  30. data/lib/applitools/calabash/steps/matchers.rb +2 -0
  31. data/lib/applitools/calabash/target.rb +2 -0
  32. data/lib/applitools/calabash/utils.rb +2 -0
  33. data/lib/applitools/calabash_steps.rb +2 -0
  34. data/lib/applitools/capybara/capybara_settings.rb +25 -0
  35. data/lib/applitools/capybara/driver.rb +39 -0
  36. data/lib/applitools/chunky_png/resampling.rb +2 -0
  37. data/lib/applitools/chunky_png_patch.rb +2 -0
  38. data/lib/applitools/connectivity/proxy.rb +2 -0
  39. data/lib/applitools/connectivity/server_connector.rb +23 -1
  40. data/lib/applitools/core/abstract_region.rb +2 -0
  41. data/lib/applitools/core/app_environment.rb +2 -0
  42. data/lib/applitools/core/app_output.rb +16 -4
  43. data/lib/applitools/core/app_output_with_screenshot.rb +2 -0
  44. data/lib/applitools/core/argument_guard.rb +3 -1
  45. data/lib/applitools/core/batch_info.rb +13 -5
  46. data/lib/applitools/core/class_name.rb +2 -0
  47. data/lib/applitools/core/debug_screenshot_provider.rb +4 -2
  48. data/lib/applitools/core/eyes_base.rb +45 -9
  49. data/lib/applitools/core/eyes_screenshot.rb +10 -1
  50. data/lib/applitools/core/fixed_cut_provider.rb +2 -0
  51. data/lib/applitools/core/fixed_scale_provider.rb +2 -0
  52. data/lib/applitools/core/floating_region.rb +10 -0
  53. data/lib/applitools/core/fluent_interface.rb +8 -1
  54. data/lib/applitools/core/hash_extension.rb +2 -0
  55. data/lib/applitools/core/helpers.rb +24 -0
  56. data/lib/applitools/core/location.rb +19 -1
  57. data/lib/applitools/core/match_level_setter.rb +2 -0
  58. data/lib/applitools/core/match_result.rb +2 -0
  59. data/lib/applitools/core/match_results.rb +2 -0
  60. data/lib/applitools/core/match_single_check_data.rb +2 -0
  61. data/lib/applitools/core/match_single_task.rb +2 -0
  62. data/lib/applitools/core/match_window_data.rb +26 -4
  63. data/lib/applitools/core/match_window_task.rb +2 -0
  64. data/lib/applitools/core/mouse_trigger.rb +2 -0
  65. data/lib/applitools/core/padding_bounds.rb +2 -0
  66. data/lib/applitools/core/rectangle_size.rb +16 -0
  67. data/lib/applitools/core/region.rb +32 -9
  68. data/lib/applitools/core/region_provider.rb +2 -0
  69. data/lib/applitools/core/screenshot.rb +6 -0
  70. data/lib/applitools/core/session.rb +2 -0
  71. data/lib/applitools/core/session_start_info.rb +2 -0
  72. data/lib/applitools/core/test_results.rb +2 -0
  73. data/lib/applitools/core/text_trigger.rb +2 -0
  74. data/lib/applitools/core/trigger.rb +2 -0
  75. data/lib/applitools/extensions.rb +2 -0
  76. data/lib/applitools/eyes_logger.rb +4 -2
  77. data/lib/applitools/method_tracer.rb +2 -0
  78. data/lib/applitools/rspec/target_matcher.rb +2 -0
  79. data/lib/applitools/sauce.rb +2 -1
  80. data/lib/applitools/utils/eyes_selenium_utils.rb +91 -15
  81. data/lib/applitools/utils/image_delta_compressor.rb +2 -0
  82. data/lib/applitools/utils/image_utils.rb +2 -0
  83. data/lib/applitools/utils/utils.rb +14 -0
  84. data/lib/applitools/version.rb +3 -1
  85. data/lib/eyes_core.rb +2 -0
  86. data/lib/eyes_rspec.rb +4 -0
  87. data/lib/require_utils.rb +2 -0
  88. metadata +10 -4
  89. data/lib/applitools/capybara.rb +0 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 5d9bf7c4a1a591be9f9e5a4fa1f97b5f6d89fdf1
4
- data.tar.gz: b46c22f0b9a08fe8e7f1e768306bb787a6bf026c
2
+ SHA256:
3
+ metadata.gz: fe32cd2c89eaeca5364e583f6c0027484463d2bd37ad1d9f510f09df4dbafbf7
4
+ data.tar.gz: 86db35f1492c056b6d191c9bee530306e14fea703e3ca2be411e6ea64790c7e1
5
5
  SHA512:
6
- metadata.gz: 117dc8fdfc6a5dad6576c2d120ffc6d8fcde6c290eab3c5452e606d437fbd74900426148a16940b4897d0be9c90346ab42718708a976a33da24fb7fd89a07b77
7
- data.tar.gz: 05340e98ffa98f3fcc433329c4bef32acafadd12c6cb39c0bf429a2cb37f2a1caf9c169047d71bbf32ee568712dd5a244c061e7c35792613fe5fe03fd9292592
6
+ metadata.gz: 0b62c4b68937b383566c02f975296acb3dcebd5548f6db821b2e3856ead3a71f26be77c35b64c3f30848a958bb5f920588eeb99fa9f897c6b9e1172496da0780
7
+ data.tar.gz: c5475b5a9be55894f4caf6ee63e01b44626209f553e17161797c7a27dc17f91c6b67c9b30b0342a4f5f3715f76bdb5f08761ee76a79f3975192b2043b49bde5c
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'mkmf'
2
4
  $CFLAGS << ' -Wall'
3
5
  create_makefile('eyes_core/eyes_core')
@@ -11,8 +11,8 @@ VALUE c_resampling_first_step(VALUE self, VALUE dst_dimension_x, VALUE dst_dimen
11
11
  unsigned long int source_width, source_height, c_dst_dimension_x, c_dst_dimension_y, w_m, h_m;
12
12
  VALUE result_array;
13
13
 
14
- source_width = NUM2UINT(rb_funcall(self, rb_intern("width"), 0, NULL));
15
- source_height = NUM2UINT(rb_funcall(self, rb_intern("height"), 0, NULL));
14
+ source_width = NUM2UINT(rb_funcall(self, rb_intern("width"), 0));
15
+ source_height = NUM2UINT(rb_funcall(self, rb_intern("height"), 0));
16
16
 
17
17
  c_dst_dimension_x = NUM2UINT(dst_dimension_x);
18
18
  c_dst_dimension_y = NUM2UINT(dst_dimension_y);
@@ -57,9 +57,9 @@ PIXEL* get_c_array(VALUE self) {
57
57
  PIXEL* ary;
58
58
  VALUE pixels;
59
59
 
60
- pixels = rb_funcall(self, rb_intern("pixels"), 0, NULL);
61
- w = NUM2UINT(rb_funcall(self, rb_intern("width"), 0, NULL));
62
- h = NUM2UINT(rb_funcall(self, rb_intern("height"), 0, NULL));
60
+ pixels = rb_funcall(self, rb_intern("pixels"), 0);
61
+ w = NUM2UINT(rb_funcall(self, rb_intern("width"), 0));
62
+ h = NUM2UINT(rb_funcall(self, rb_intern("height"), 0));
63
63
  ary = (PIXEL*)malloc( w*h*sizeof(PIXEL));
64
64
 
65
65
  for(i=0; i<w*h; i++) {
@@ -95,8 +95,8 @@ BYTE interpolate_char(double t, BYTE c0, BYTE c1, BYTE c2, BYTE c3) {
95
95
  return (BYTE)(res);
96
96
  };
97
97
 
98
- PIXEL raw_merge_pixels(PIXEL* merge_pixels, unsigned int size) {
99
- unsigned int i, real_colors, acum_r, acum_g, acum_b, acum_a;
98
+ PIXEL raw_merge_pixels(PIXEL* merge_pixels, unsigned long int size) {
99
+ unsigned long int i, real_colors, acum_r, acum_g, acum_b, acum_a;
100
100
  BYTE new_r, new_g, new_b, new_a;
101
101
  PIXEL pix;
102
102
 
@@ -13,11 +13,6 @@ typedef unsigned char BYTE; // Bytes use 8 bits unsigned integers
13
13
  #define BUILD_PIXEL(r, g, b, a) (((PIXEL) (r) << 24) + ((PIXEL) (g) << 16) + ((PIXEL) (b) << 8) + (PIXEL) (a))
14
14
  #define INT8_MULTIPLY(a, b) (((((a) * (b) + 0x80) >> 8) + ((a) * (b) + 0x80)) >> 8)
15
15
 
16
-
17
-
18
- void Init_resampling();
19
-
20
-
21
16
  BYTE interpolate_char(double, BYTE, BYTE, BYTE, BYTE);
22
17
 
23
18
  PIXEL* get_bicubic_points(PIXEL*, unsigned long int, unsigned long int, unsigned long int, unsigned long int);
@@ -27,7 +22,7 @@ VALUE c_resampling_first_step(VALUE, VALUE, VALUE);
27
22
  VALUE get_ruby_array(VALUE, PIXEL*, unsigned long int);
28
23
  PIXEL get_line_pixel(PIXEL*, unsigned long int, long int, unsigned long int);
29
24
  PIXEL get_column_pixel(PIXEL*, unsigned long int, long int, unsigned long int, unsigned long int);
30
- PIXEL raw_merge_pixels(PIXEL*, unsigned int);
25
+ PIXEL raw_merge_pixels(PIXEL*, unsigned long int);
31
26
  PIXEL* c_scale_points(PIXEL*, unsigned long int, unsigned long int, unsigned long int, unsigned long int);
32
27
 
33
28
  #endif
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: false
2
+
3
+ module Applitools::Appium
4
+ module Eyes
5
+ def perform_driver_settings_for_appium_driver
6
+ self.region_visibility_strategy = Applitools::Selenium::NopRegionVisibilityStrategy.new
7
+ self.force_driver_resolution_as_viewport_size = true
8
+ end
9
+
10
+ private :perform_driver_settings_for_appium_driver
11
+ end
12
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: false
2
+
3
+ module Applitools::Appium
4
+ module Init19
5
+ extend self
6
+
7
+ def init
8
+ Applitools::Utils::EyesSeleniumUtils.module_eval do
9
+ alias_method :super_mobile_device?, :mobile_device?
10
+ alias_method :super_android?, :android?
11
+ alias_method :super_ios?, :ios?
12
+ alias_method :super_platform_version, :platform_version
13
+ alias_method :super_current_scroll_position, :current_scroll_position
14
+ include Applitools::Appium::Utils
15
+ end
16
+
17
+ Applitools::Selenium::Eyes.class_eval do
18
+ include Applitools::Appium::Eyes
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: false
2
+
3
+ module Applitools::Appium
4
+ module Init20
5
+ extend self
6
+ def init
7
+ Applitools::Utils::EyesSeleniumUtils.module_eval do
8
+ prepend Applitools::Appium::Utils
9
+ extend self
10
+ end
11
+
12
+ Applitools::Selenium::Eyes.class_eval do
13
+ prepend Applitools::Appium::Eyes
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: false
2
+
3
+ module Applitools::Appium
4
+ module Utils
5
+ # true if test is running on mobile device
6
+ def mobile_device?
7
+ return nil unless defined?(Appium::Driver)
8
+ return $driver if $driver && $driver.is_a?(Appium::Driver)
9
+ end
10
+
11
+ # true if test is running on Android device
12
+ def android?(driver)
13
+ driver.respond_to?(:appium_device) && driver.appium_device == :android
14
+ end
15
+
16
+ # true if test is running on iOS device
17
+ def ios?(driver)
18
+ driver.respond_to?(:appium_device) && driver.appium_device == :ios
19
+ end
20
+
21
+ # @param [Applitools::Selenium::Driver] driver
22
+ def platform_version(driver)
23
+ driver.respond_to?(:caps) && driver.caps[:platformVersion]
24
+ end
25
+
26
+ # def current_position
27
+ # result = nil
28
+ # begin
29
+ # logger.info 'current_position()'
30
+ # result = Applitools::Utils::EyesSeleniumUtils.current_scroll_position(executor)
31
+ # logger.info "Current position: #{result}"
32
+ # rescue Applitools::EyesDriverOperationException
33
+ # result = Applitools::Location::TOP_LEFT
34
+ # end
35
+ # result
36
+ # end
37
+
38
+ def current_scroll_position(driver)
39
+ super
40
+ rescue
41
+ Applitools::Location::TOP_LEFT
42
+ end
43
+ end
44
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Applitools
2
4
  module Calabash
3
5
  class CalabashElement
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Applitools
2
4
  module Calabash
3
5
  class CalabashScreenshotProvider
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Applitools
2
4
  module Calabash
3
5
  module EnvironmentDetector
@@ -1,17 +1,19 @@
1
+ # frozen_string_literal: false
2
+
1
3
  module Applitools
2
4
  module Calabash
3
5
  class Eyes < Applitools::EyesBase
4
6
  attr_accessor :device_pixel_ratio, :full_page_capture_algorithm, :base_agent_id, :title,
5
- :debug_screenshot, :debug_screenshot_provider, :tag_for_debug
7
+ :debug_screenshots, :debug_screenshot_provider, :tag_for_debug
6
8
  attr_reader :context
7
9
 
8
10
  def initialize(server_url = Applitools::Connectivity::ServerConnector::DEFAULT_SERVER_URL)
9
11
  super
10
12
  self.base_agent_id = "eyes.calabash.ruby/#{Applitools::VERSION}".freeze
11
- self.debug_screenshot = false
13
+ self.debug_screenshots = false
12
14
  self.debug_screenshot_provider = Applitools::DebugScreenshotProvider.new
13
15
  .tag_access { tag_for_debug }
14
- .debug_flag_access { debug_screenshot }
16
+ .debug_flag_access { debug_screenshots }
15
17
  end
16
18
 
17
19
  def open(options = {})
@@ -1,7 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'eyes_calabash_screenshot'
2
4
  module Applitools
3
5
  module Calabash
4
6
  class EyesCalabashAndroidScreenshot < ::Applitools::Calabash::EyesCalabashScreenshot
7
+ extend Forwardable
8
+ def_delegators 'Applitools::EyesLogger', :logger
9
+
5
10
  ANDROID_DENSITY = {
6
11
  120 => 0.75,
7
12
  160 => 1,
@@ -9,9 +14,14 @@ module Applitools
9
14
  240 => 1.5,
10
15
  320 => 2,
11
16
  480 => 3,
17
+ 560 => 3.5,
12
18
  640 => 4
13
19
  }.freeze
14
20
 
21
+ DENSITY_DEFAULT = 160
22
+
23
+ class UnknownDeviceDensity < ::Applitools::EyesError; end
24
+
15
25
  def initialize(*args)
16
26
  options = if args.last.is_a? Hash
17
27
  args.pop
@@ -49,8 +59,9 @@ module Applitools
49
59
  end
50
60
 
51
61
  def density=(value)
52
- raise Applitools::EyesIllegalArgument, "Unknown density = #{value}" unless ANDROID_DENSITY[value.to_i]
53
- @scale_factor = ANDROID_DENSITY[value.to_i]
62
+ logger.warn("Trying to set unknown device density - #{value}") unless
63
+ ANDROID_DENSITY.keys.include?(value.to_i)
64
+ @scale_factor = value.to_f / DENSITY_DEFAULT
54
65
  end
55
66
  end
56
67
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'eyes_calabash_screenshot'
2
4
  module Applitools
3
5
  module Calabash
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: false
2
+
1
3
  module Applitools
2
4
  module Calabash
3
5
  class EyesCalabashScreenshot < Applitools::EyesScreenshot
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  if respond_to?(:Before)
2
4
  Before('@eyes') do |scenario|
3
5
  get_scenario_tags(scenario)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'singleton'
2
4
  require 'securerandom'
3
5
  module Applitools
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Applitools::Calabash.require_dir 'calabash/full_page_capture_algorithm'
2
4
 
3
5
  module Applitools
@@ -1,8 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base'
2
4
  module Applitools
3
5
  module Calabash
4
6
  module FullPageCaptureAlgorithm
7
+ module CalabashAndroidScreenshot
8
+ def calabash_android_screenshot(screenshot, density)
9
+ Applitools::Calabash::EyesCalabashAndroidScreenshot.new(
10
+ screenshot, density: density
11
+ )
12
+ end
13
+ end
5
14
  class AndroidScrollView < Base
15
+ include CalabashAndroidScreenshot
6
16
  def initialize(*args)
7
17
  super
8
18
  @entire_content = nil
@@ -29,9 +39,9 @@ module Applitools
29
39
 
30
40
  restore_original_position
31
41
 
32
- Applitools::Calabash::EyesCalabashAndroidScreenshot.new(
42
+ calabash_android_screenshot(
33
43
  Applitools::Screenshot.from_image(stitched_image),
34
- density: screenshot_provider.density
44
+ screenshot_provider.density
35
45
  )
36
46
  end
37
47
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Applitools
2
4
  module Calabash
3
5
  module FullPageCaptureAlgorithm
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base'
2
4
 
3
5
  module Applitools
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Applitools
2
4
  module Calabash
3
5
  module OsVersions
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rspec/expectations'
2
4
 
3
5
  RSpec::Matchers.define :match_baseline do |expected|
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Then(/^set OS$/) do
2
4
  sdk_version = begin
3
5
  perform_action('android_sdk_version')
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Then(/^ignore status bar$/) do
2
4
  raise Applitools::EyesError, '@target is not set' unless @target
3
5
  step %(query element "view id:'statusBarBackground'")
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Then(/^create eyes$/) do
2
4
  eyes_settings = Applitools::Calabash::EyesSettings.instance
3
5
  eyes_settings.eyes ||= Applitools::Calabash::Eyes.new.tap do |eyes|
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Given(/^eyes application name is "([^"]*)"$/) do |name|
2
4
  Applitools::Calabash::EyesSettings.instance.app_name = name
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Then(/^set OS$/) do
2
4
  Applitools::Calabash::EyesSettings.instance.eyes.host_os = "iOS #{default_device.ios_major_version}"
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Then(/^the whole screen should match a baseline/) do
2
4
  step %(create target)
3
5
  step %(target should match a baseline)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Then(/^create target$/) do
2
4
  @target = nil
3
5
  @target = Applitools::Calabash::Target.new
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Applitools
2
4
  module Calabash
3
5
  class Target
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Applitools
2
4
  module Calabash
3
5
  module Utils
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Applitools::Calabash.require_environment(
2
4
  'applitools/calabash/steps/matchers',
3
5
  Applitools::Calabash::EnvironmentDetector.current_environment
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Applitools
4
+ module Selenium
5
+ module Capybara
6
+ module CapybaraSettings
7
+ # Registers Capybara driver which will be used by eyes and sets it as default Capybara driver.
8
+ # The name of the driver is :eyes, and the driver is a descendant of class Capybara::Selenium::Driver.
9
+ # Options are eventually passed to drivers constructor
10
+ # @param [Hash] options
11
+ # @example
12
+ # Applitools.register_capybara_driver :browser => :chrome
13
+ # @example
14
+ # Applitools.register_capybara_driver :browser => :remote, :url => 'remote_url', :desired_capabilities => {}
15
+ def register_capybara_driver(options = {})
16
+ ::Capybara.register_driver :eyes do |app|
17
+ Applitools::Selenium::Capybara::Driver.new app, options
18
+ end
19
+ ::Capybara.default_driver = :eyes
20
+ ::Capybara.javascript_driver = :eyes
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end