eyes_selenium 3.14.3 → 3.14.4
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 +5 -5
- data/lib/applitools/selenium/border_aware_element_content_location_provider.rb +2 -0
- data/lib/applitools/selenium/browser.rb +66 -56
- data/lib/applitools/selenium/context_based_scale_provider.rb +2 -0
- data/lib/applitools/selenium/css_transform/css_transform.rb +21 -0
- data/lib/applitools/selenium/css_translate_element_position_provider.rb +48 -0
- data/lib/applitools/selenium/css_translate_position_provider.rb +29 -10
- data/lib/applitools/selenium/dom_capture/dom_capture.rb +113 -0
- data/lib/applitools/selenium/dom_capture/dom_capture_script.rb +103 -0
- data/lib/applitools/selenium/driver.rb +9 -2
- data/lib/applitools/selenium/element.rb +2 -0
- data/lib/applitools/selenium/element_position_provider.rb +3 -1
- data/lib/applitools/selenium/entire_element_screenshot.rb +20 -0
- data/lib/applitools/selenium/eyes.rb +203 -396
- data/lib/applitools/selenium/eyes_screenshot.rb +60 -0
- data/lib/applitools/selenium/eyes_target_locator.rb +12 -24
- data/lib/applitools/selenium/fixed_cut_provider.rb +48 -0
- data/lib/applitools/selenium/frame.rb +11 -1
- data/lib/applitools/selenium/frame_chain.rb +9 -1
- data/lib/applitools/selenium/full_page_capture_algorithm.rb +85 -50
- data/lib/applitools/selenium/fullpage_screenshot.rb +37 -0
- data/lib/applitools/selenium/keyboard.rb +2 -0
- data/lib/applitools/selenium/mouse.rb +2 -0
- data/lib/applitools/selenium/move_to_region_visibility_strategy.rb +2 -0
- data/lib/applitools/selenium/nop_region_visibility_strategy.rb +2 -0
- data/lib/applitools/selenium/region_provider.rb +91 -0
- data/lib/applitools/selenium/sauce/driver.rb +2 -0
- data/lib/applitools/selenium/scroll_position_provider.rb +13 -2
- data/lib/applitools/selenium/takes_screenshot_image_provider.rb +5 -3
- data/lib/applitools/selenium/target.rb +32 -6
- data/lib/applitools/selenium/viewport_screenshot.rb +46 -0
- data/lib/applitools/selenium/viewport_size.rb +2 -0
- data/lib/applitools/version.rb +3 -1
- data/lib/eyes_selenium.rb +4 -9
- metadata +16 -27
- data/lib/applitools/capybara.rb +0 -8
- data/lib/applitools/poltergeist/applitools_compatible.rb +0 -32
- data/lib/applitools/poltergeist/driver.rb +0 -11
- data/lib/applitools/selenium/capybara/capybara_settings.rb +0 -23
- data/lib/applitools/selenium/capybara/driver.rb +0 -37
- data/lib/applitools/selenium/eyes_full_page_screenshot.rb +0 -47
- data/lib/applitools/selenium/eyes_web_driver_screenshot.rb +0 -341
@@ -0,0 +1,91 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Applitools
|
4
|
+
module Selenium
|
5
|
+
class RegionProvider
|
6
|
+
FF_OLD_VERSION = '45.0'
|
7
|
+
|
8
|
+
attr_accessor :driver, :eye_region, :scroll_position_provider
|
9
|
+
|
10
|
+
def initialize(driver, eye_region)
|
11
|
+
self.driver = driver
|
12
|
+
self.eye_region = eye_region
|
13
|
+
self.scroll_position_provider = Applitools::Selenium::ScrollPositionProvider.new driver
|
14
|
+
end
|
15
|
+
|
16
|
+
def region(include_borders = true)
|
17
|
+
region = if include_borders
|
18
|
+
location = eye_region.location.offset_negative(
|
19
|
+
Applitools::Location.new(eye_region.padding_left, eye_region.padding_top)
|
20
|
+
)
|
21
|
+
size = eye_region.size.tap do |s|
|
22
|
+
s.width += eye_region.padding_left + eye_region.padding_right
|
23
|
+
s.height += eye_region.padding_top + eye_region.padding_bottom
|
24
|
+
end
|
25
|
+
Applitools::Region.from_location_size(location, size)
|
26
|
+
else
|
27
|
+
Applitools::Region.from_location_size(eye_region.location, eye_region.size)
|
28
|
+
end
|
29
|
+
if inside_a_frame?
|
30
|
+
frame_window = calculate_frame_window
|
31
|
+
return frame_window if eye_region.is_a?(Applitools::Region) && eye_region.empty?
|
32
|
+
region.location = region.location.offset(frame_window.location)
|
33
|
+
region.intersect(frame_window) unless frame_window.empty?
|
34
|
+
# exception if empty
|
35
|
+
else
|
36
|
+
region.location = region.location.offset_negative scroll_position_provider.current_position
|
37
|
+
end
|
38
|
+
return eye_region if eye_region.is_a?(Applitools::Region) && eye_region.empty?
|
39
|
+
region
|
40
|
+
end
|
41
|
+
|
42
|
+
def coordinate_type
|
43
|
+
nil
|
44
|
+
end
|
45
|
+
|
46
|
+
def calculate_frame_window
|
47
|
+
return Applitools::Region::EMPTY unless inside_a_frame?
|
48
|
+
frame_window_calculator.frame_window(driver.frame_chain)
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def inside_a_frame?
|
54
|
+
!driver.frame_chain.empty?
|
55
|
+
end
|
56
|
+
|
57
|
+
def frame_window_calculator
|
58
|
+
return FirefoxFrameWindowCalculator if
|
59
|
+
driver.browser.running_browser_name == :firefox &&
|
60
|
+
(Gem::Version.new(driver.capabilities.version) <=> Gem::Version.new(FF_OLD_VERSION)) > 0
|
61
|
+
FrameWindowCalculator
|
62
|
+
end
|
63
|
+
|
64
|
+
module FrameWindowCalculator
|
65
|
+
extend self
|
66
|
+
def frame_window(frame_chain)
|
67
|
+
chain = Applitools::Selenium::FrameChain.new other: frame_chain
|
68
|
+
window = nil
|
69
|
+
frames_offset = Applitools::Location.new(0, 0)
|
70
|
+
chain.map(&:dup).each do |frame|
|
71
|
+
frames_offset = frame.location.offset(frames_offset).offset_negative(frame.parent_scroll_position)
|
72
|
+
if window.nil?
|
73
|
+
window = Applitools::Region.from_location_size(frame.location, frame.size)
|
74
|
+
else
|
75
|
+
window.intersect(Applitools::Region.from_location_size(frame.location, frame.size))
|
76
|
+
end
|
77
|
+
# exception if empty window
|
78
|
+
end
|
79
|
+
window
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
module FirefoxFrameWindowCalculator
|
84
|
+
extend self
|
85
|
+
def frame_window(_frame_chain)
|
86
|
+
Applitools::Region::EMPTY
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Applitools::Selenium
|
2
4
|
# @!visibility private
|
3
5
|
class ScrollPositionProvider
|
@@ -49,7 +51,7 @@ module Applitools::Selenium
|
|
49
51
|
# Returns the entire size of the viewport.
|
50
52
|
#
|
51
53
|
# @return [Applitools::RectangleSize] The viewport size.
|
52
|
-
def entire_size
|
54
|
+
def entire_size(image_width, image_height)
|
53
55
|
viewport_size = Applitools::Utils::EyesSeleniumUtils.extract_viewport_size(executor)
|
54
56
|
result = Applitools::Utils::EyesSeleniumUtils.entire_page_size(executor)
|
55
57
|
logger.info "Entire size: #{result}"
|
@@ -60,7 +62,16 @@ module Applitools::Selenium
|
|
60
62
|
result.width = [viewport_size.width, result.width].min if disable_horizontal
|
61
63
|
result.height = [viewport_size.height, result.height].min if disable_vertical
|
62
64
|
logger.info "Actual size to scroll: #{result}"
|
63
|
-
result
|
65
|
+
return result unless executor.frame_chain.empty?
|
66
|
+
original_scroll_position = current_position
|
67
|
+
scroll_to_bottom_right
|
68
|
+
bottom_right_position = current_position
|
69
|
+
restore_state(original_scroll_position)
|
70
|
+
Applitools::RectangleSize.new(bottom_right_position.x + image_width, bottom_right_position.y + image_height)
|
71
|
+
end
|
72
|
+
|
73
|
+
def scroll_to_bottom_right
|
74
|
+
Applitools::Utils::EyesSeleniumUtils.scroll_to_bottom_right(executor)
|
64
75
|
end
|
65
76
|
|
66
77
|
def force_offset
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Applitools::Selenium
|
2
4
|
# @!visibility private
|
3
5
|
class TakesScreenshotImageProvider
|
@@ -10,11 +12,11 @@ module Applitools::Selenium
|
|
10
12
|
#
|
11
13
|
# @param [Applitools::Selenium::Driver] driver
|
12
14
|
# @param [Hash] options The options for taking a screenshot.
|
13
|
-
# @option options [Boolean] :
|
15
|
+
# @option options [Boolean] :debug_screenshots
|
14
16
|
# @option options [Enumerator] :name_enumerator The name enumerator.
|
15
17
|
def initialize(driver, options = {})
|
16
18
|
self.driver = driver
|
17
|
-
options = {
|
19
|
+
options = { debug_screenshots: false }.merge! options
|
18
20
|
self.debug_screenshot_provider = options[:debug_screenshot_provider]
|
19
21
|
end
|
20
22
|
|
@@ -32,7 +34,7 @@ module Applitools::Selenium
|
|
32
34
|
|
33
35
|
private
|
34
36
|
|
35
|
-
attr_accessor :
|
37
|
+
attr_accessor :debug_screenshots
|
36
38
|
|
37
39
|
def save_debug_screenshot(screenshot, suffix)
|
38
40
|
debug_screenshot_provider.save(screenshot, suffix || '')
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Applitools
|
2
4
|
module Selenium
|
3
5
|
class Target
|
@@ -11,19 +13,23 @@ module Applitools
|
|
11
13
|
new
|
12
14
|
end
|
13
15
|
|
14
|
-
def region(
|
15
|
-
new.region(
|
16
|
+
def region(*args)
|
17
|
+
new.region(*args)
|
16
18
|
end
|
17
19
|
end
|
18
20
|
|
19
|
-
attr_accessor :element, :frames, :region_to_check, :coordinate_type, :options, :ignored_regions,
|
21
|
+
attr_accessor :element, :frames, :region_to_check, :coordinate_type, :options, :ignored_regions,
|
22
|
+
:floating_regions, :frame_or_element
|
23
|
+
|
24
|
+
private :frame_or_element, :frame_or_element=
|
20
25
|
|
21
26
|
# Initialize a Applitools::Selenium::Target instance.
|
22
27
|
def initialize
|
23
28
|
self.frames = []
|
24
29
|
self.options = {
|
25
|
-
ignore_caret:
|
26
|
-
ignore_mismatch: false
|
30
|
+
ignore_caret: true,
|
31
|
+
ignore_mismatch: false,
|
32
|
+
send_dom: nil
|
27
33
|
}
|
28
34
|
reset_for_fullscreen
|
29
35
|
end
|
@@ -114,11 +120,13 @@ module Applitools
|
|
114
120
|
|
115
121
|
def fully
|
116
122
|
options[:stitch_content] = true
|
123
|
+
handle_frames
|
117
124
|
self
|
118
125
|
end
|
119
126
|
|
120
127
|
def frame(element)
|
121
|
-
frames <<
|
128
|
+
frames << frame_or_element if frame_or_element
|
129
|
+
self.frame_or_element = element
|
122
130
|
reset_for_fullscreen
|
123
131
|
self
|
124
132
|
end
|
@@ -135,9 +143,14 @@ module Applitools
|
|
135
143
|
# @!parse def region(element, how, what); end;
|
136
144
|
|
137
145
|
def region(*args)
|
146
|
+
handle_frames
|
138
147
|
self.region_to_check = case args.first
|
139
148
|
when Applitools::Selenium::Element, Applitools::Region, ::Selenium::WebDriver::Element
|
140
149
|
proc { args.first }
|
150
|
+
when String
|
151
|
+
proc do |driver|
|
152
|
+
driver.find_element(name_or_id: args.first)
|
153
|
+
end
|
141
154
|
else
|
142
155
|
proc do |driver|
|
143
156
|
driver.find_element(*args)
|
@@ -150,6 +163,13 @@ module Applitools
|
|
150
163
|
self
|
151
164
|
end
|
152
165
|
|
166
|
+
def finalize
|
167
|
+
return self unless frame_or_element
|
168
|
+
region = frame_or_element
|
169
|
+
self.frame_or_element = nil
|
170
|
+
dup.region(region)
|
171
|
+
end
|
172
|
+
|
153
173
|
private
|
154
174
|
|
155
175
|
def reset_for_fullscreen
|
@@ -169,6 +189,12 @@ module Applitools
|
|
169
189
|
def reset_floating
|
170
190
|
self.floating_regions = []
|
171
191
|
end
|
192
|
+
|
193
|
+
def handle_frames
|
194
|
+
return unless frame_or_element
|
195
|
+
frames << frame_or_element
|
196
|
+
self.frame_or_element = nil
|
197
|
+
end
|
172
198
|
end
|
173
199
|
end
|
174
200
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require_relative 'eyes_screenshot'
|
3
|
+
module Applitools::Selenium
|
4
|
+
# @!visibility private
|
5
|
+
class ViewportScreenshot < Applitools::Selenium::EyesScreenshot
|
6
|
+
attr_accessor :top_left_location
|
7
|
+
|
8
|
+
def sub_screenshot(region, _coordinate_type, throw_if_clipped = false, force_nil_if_clipped = false)
|
9
|
+
logger.info "get_subscreenshot(#{region}, #{throw_if_clipped})"
|
10
|
+
Applitools::ArgumentGuard.not_nil region, 'region'
|
11
|
+
|
12
|
+
as_is_subscreenshot_region = region.intersect(image_region)
|
13
|
+
|
14
|
+
if as_is_subscreenshot_region.empty? || (throw_if_clipped && as_is_subscreenshot_region.size != region.size)
|
15
|
+
return nil if force_nil_if_clipped
|
16
|
+
raise Applitools::OutOfBoundsException.new "Region #{region} is out" \
|
17
|
+
' of screenshot bounds.'
|
18
|
+
end
|
19
|
+
|
20
|
+
cropped_image = Applitools::Screenshot.from_image(
|
21
|
+
image.crop(
|
22
|
+
as_is_subscreenshot_region.x,
|
23
|
+
as_is_subscreenshot_region.y,
|
24
|
+
as_is_subscreenshot_region.width,
|
25
|
+
as_is_subscreenshot_region.height
|
26
|
+
)
|
27
|
+
)
|
28
|
+
|
29
|
+
self.class.new(cropped_image, region_provider: region_provider).tap do |s|
|
30
|
+
s.top_left_location = top_left_location.dup.offset(region.location)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def screenshot_offset
|
35
|
+
offset = Applitools::Location::TOP_LEFT.dup
|
36
|
+
offset.offset region_provider.scroll_position_provider.current_position
|
37
|
+
frame_window = region_provider.calculate_frame_window
|
38
|
+
offset.offset_negative(frame_window.location)
|
39
|
+
offset
|
40
|
+
end
|
41
|
+
|
42
|
+
def top_left_location
|
43
|
+
@top_left_location ||= screenshot_offset
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/applitools/version.rb
CHANGED
data/lib/eyes_selenium.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'eyes_core'
|
2
4
|
|
3
5
|
module Applitools
|
@@ -9,6 +11,7 @@ module Applitools
|
|
9
11
|
|
10
12
|
module Selenium
|
11
13
|
extend Applitools::RequireUtils
|
14
|
+
class UnsupportedCoordinateType < EyesError; end
|
12
15
|
def self.load_dir
|
13
16
|
File.dirname(File.expand_path(__FILE__))
|
14
17
|
end
|
@@ -16,7 +19,7 @@ module Applitools
|
|
16
19
|
end
|
17
20
|
|
18
21
|
Applitools::Selenium.require_dir 'selenium'
|
19
|
-
Applitools::Selenium.require_dir '
|
22
|
+
Applitools::Selenium.require_dir 'selenium/dom_capture'
|
20
23
|
|
21
24
|
if defined? Selenium::WebDriver::Driver
|
22
25
|
Selenium::WebDriver::Driver.class_eval do
|
@@ -26,11 +29,3 @@ if defined? Selenium::WebDriver::Driver
|
|
26
29
|
end
|
27
30
|
end
|
28
31
|
end
|
29
|
-
|
30
|
-
if defined? Appium::Driver
|
31
|
-
Appium::Driver.class_eval do
|
32
|
-
def driver_for_eyes(eyes)
|
33
|
-
Applitools::Selenium::Driver.new(eyes, driver: driver || start_driver, is_mobile_device: true)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
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: 3.14.
|
4
|
+
version: 3.14.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Applitools Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: eyes_core
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 3.14.
|
19
|
+
version: 3.14.4
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 3.14.
|
26
|
+
version: 3.14.4
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: selenium-webdriver
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,21 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: watir
|
42
|
+
name: css_parser
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
58
44
|
requirements:
|
59
45
|
- - ">="
|
@@ -73,33 +59,36 @@ executables: []
|
|
73
59
|
extensions: []
|
74
60
|
extra_rdoc_files: []
|
75
61
|
files:
|
76
|
-
- lib/applitools/capybara.rb
|
77
|
-
- lib/applitools/poltergeist/applitools_compatible.rb
|
78
|
-
- lib/applitools/poltergeist/driver.rb
|
79
62
|
- lib/applitools/selenium/border_aware_element_content_location_provider.rb
|
80
63
|
- lib/applitools/selenium/browser.rb
|
81
|
-
- lib/applitools/selenium/capybara/capybara_settings.rb
|
82
|
-
- lib/applitools/selenium/capybara/driver.rb
|
83
64
|
- lib/applitools/selenium/context_based_scale_provider.rb
|
65
|
+
- lib/applitools/selenium/css_transform/css_transform.rb
|
66
|
+
- lib/applitools/selenium/css_translate_element_position_provider.rb
|
84
67
|
- lib/applitools/selenium/css_translate_position_provider.rb
|
68
|
+
- lib/applitools/selenium/dom_capture/dom_capture.rb
|
69
|
+
- lib/applitools/selenium/dom_capture/dom_capture_script.rb
|
85
70
|
- lib/applitools/selenium/driver.rb
|
86
71
|
- lib/applitools/selenium/element.rb
|
87
72
|
- lib/applitools/selenium/element_position_provider.rb
|
73
|
+
- lib/applitools/selenium/entire_element_screenshot.rb
|
88
74
|
- lib/applitools/selenium/eyes.rb
|
89
|
-
- lib/applitools/selenium/
|
75
|
+
- lib/applitools/selenium/eyes_screenshot.rb
|
90
76
|
- lib/applitools/selenium/eyes_target_locator.rb
|
91
|
-
- lib/applitools/selenium/
|
77
|
+
- lib/applitools/selenium/fixed_cut_provider.rb
|
92
78
|
- lib/applitools/selenium/frame.rb
|
93
79
|
- lib/applitools/selenium/frame_chain.rb
|
94
80
|
- lib/applitools/selenium/full_page_capture_algorithm.rb
|
81
|
+
- lib/applitools/selenium/fullpage_screenshot.rb
|
95
82
|
- lib/applitools/selenium/keyboard.rb
|
96
83
|
- lib/applitools/selenium/mouse.rb
|
97
84
|
- lib/applitools/selenium/move_to_region_visibility_strategy.rb
|
98
85
|
- lib/applitools/selenium/nop_region_visibility_strategy.rb
|
86
|
+
- lib/applitools/selenium/region_provider.rb
|
99
87
|
- lib/applitools/selenium/sauce/driver.rb
|
100
88
|
- lib/applitools/selenium/scroll_position_provider.rb
|
101
89
|
- lib/applitools/selenium/takes_screenshot_image_provider.rb
|
102
90
|
- lib/applitools/selenium/target.rb
|
91
|
+
- lib/applitools/selenium/viewport_screenshot.rb
|
103
92
|
- lib/applitools/selenium/viewport_size.rb
|
104
93
|
- lib/applitools/version.rb
|
105
94
|
- lib/eyes_selenium.rb
|
@@ -123,7 +112,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
123
112
|
version: '0'
|
124
113
|
requirements: []
|
125
114
|
rubyforge_project:
|
126
|
-
rubygems_version: 2.
|
115
|
+
rubygems_version: 2.7.7
|
127
116
|
signing_key:
|
128
117
|
specification_version: 4
|
129
118
|
summary: Applitools Ruby Images SDK
|