eyes_selenium 3.15.14 → 3.15.15

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: c0ddb498303bad15a5374f2878353e432c70c9e5984f186d0f352aa171be9fbf
4
- data.tar.gz: 5668c077523d008445515f258d757dfa4b0b82da0da4867fb15a5db31a40611f
3
+ metadata.gz: b56e73c95e87c0156bb7972b15dd18abda92fe0b839b12bc0439f1c251810339
4
+ data.tar.gz: b491c7ef0ee74076b3880888f8fa52994395ef620c74f81a256caaa6fe489270
5
5
  SHA512:
6
- metadata.gz: '0983c4bf577cafdcead8374e671af370cf4c9d800d0a049d3d5e589d7b01e8956b0471259573f8c056bfa1070698d5bd735274da21769a72fd07177fe6f38921'
7
- data.tar.gz: df02fa514fdb06a7b0dbaece7b77e490d53350bb8f565c7d8368fa9f6647e5428f60c948b88ea7a05b8dad2e8f51e8447a7c0d15f41cf58ac481e54100445134
6
+ metadata.gz: e74a81d70aee821c5f5016b988fc70130aa7d53cf73ad30a49c020752d62ce4570dae56ec07558e7f5f91ec0e13aec2fc85fda0317f1e49e26477eef58ae8caa
7
+ data.tar.gz: 00660a727243097379a333ab2e15df66097808658dced225f63734cdf5e89860754e480c060a444f8d2b39f5aef32c451b466c3017e8ed37053a34ef9b01080c
@@ -19,7 +19,7 @@ module Applitools
19
19
  end
20
20
 
21
21
  attr_accessor :element, :frames, :region_to_check, :coordinate_type, :options, :ignored_regions,
22
- :floating_regions, :frame_or_element
22
+ :floating_regions, :frame_or_element, :regions
23
23
 
24
24
  private :frame_or_element, :frame_or_element=
25
25
 
@@ -32,6 +32,7 @@ module Applitools
32
32
  send_dom: nil,
33
33
  script_hooks: { beforeCaptureScreenshot: '' }
34
34
  }
35
+ self.regions = {}
35
36
  reset_for_fullscreen
36
37
  end
37
38
 
@@ -55,18 +56,26 @@ module Applitools
55
56
  when Applitools::Region
56
57
  proc { args.first.padding(requested_padding) }
57
58
  when Applitools::Selenium::Element, ::Selenium::WebDriver::Element
58
- proc do
59
+ proc do |_driver, return_element = false|
59
60
  region = args.first
60
- Applitools::Region.from_location_size(
61
- region.location, region.size
62
- ).padding(requested_padding)
61
+ padding_proc = proc do |region|
62
+ Applitools::Region.from_location_size(
63
+ region.location, region.size
64
+ ).padding(requested_padding)
65
+ end
66
+ next region, padding_proc if return_element
67
+ padding_proc.call(region)
63
68
  end
64
69
  else
65
- proc do |driver|
70
+ proc do |driver, return_element = false|
66
71
  region = driver.find_element(*args)
67
- Applitools::Region.from_location_size(
68
- region.location, region.size
69
- ).padding(requested_padding)
72
+ padding_proc = proc do |region|
73
+ Applitools::Region.from_location_size(
74
+ region.location, region.size
75
+ ).padding(requested_padding)
76
+ end
77
+ next region, padding_proc if return_element
78
+ padding_proc.call(region)
70
79
  end
71
80
  end
72
81
 
@@ -105,14 +114,30 @@ module Applitools
105
114
  end
106
115
  value = case args.first
107
116
  when Applitools::FloatingRegion
108
- proc { args.first.padding(requested_padding) }
109
- when ::Selenium::WebDriver::Element, Applitools::Selenium::Element, ::Applitools::Region
110
- proc { Applitools::FloatingRegion.any(args.shift, *args).padding(requested_padding) }
117
+ args.first.padding(requested_padding)
118
+ when ::Applitools::Region
119
+ Applitools::FloatingRegion.any(args.shift, *args).padding(requested_padding)
120
+ when ::Selenium::WebDriver::Element, Applitools::Selenium::Element
121
+ proc do |_driver, return_element = false|
122
+ args_dup = args.dup
123
+ region = args_dup.shift
124
+ padding_proc = proc do |region|
125
+ Applitools::FloatingRegion.any(region, *args_dup).padding(requested_padding)
126
+ end
127
+ next region, padding_proc if return_element
128
+ padding_proc.call(region)
129
+ end
111
130
  else
112
- proc do |driver|
113
- Applitools::FloatingRegion.any(
114
- driver.find_element(args.shift, args.shift), *args
115
- ).padding(requested_padding)
131
+ proc do |driver, return_element = false|
132
+ args_dup = args.dup
133
+ region = driver.find_element(args_dup.shift, args_dup.shift)
134
+ padding_proc = proc do |region|
135
+ Applitools::FloatingRegion.any(
136
+ region, *args_dup
137
+ ).padding(requested_padding)
138
+ end
139
+ next region, padding_proc if return_element
140
+ padding_proc.call(region)
116
141
  end
117
142
  end
118
143
  floating_regions << value
@@ -39,10 +39,10 @@ module Applitools
39
39
  target_to_check = target.finalize
40
40
  timeout = target_to_check.options[:timeout] || USE_DEFAULT_MATCH_TIMEOUT
41
41
 
42
- match_data = Applitools::MatchWindowData.new
42
+ match_data = Applitools::Selenium::VgMatchWindowData.new
43
43
  match_data.tag = name
44
44
  update_default_settings(match_data)
45
- match_data.read_target(target_to_check, driver)
45
+ match_data.read_target(target_to_check, driver, selector_regions)
46
46
  check_result = check_window_base(
47
47
  dummy_region_provider, timeout, match_data
48
48
  )
@@ -81,6 +81,10 @@ module Applitools
81
81
  render_status['domLocation']
82
82
  end
83
83
 
84
+ def selector_regions
85
+ render_status['selectorRegions']
86
+ end
87
+
84
88
  def match_level_keys
85
89
  %w(match_level exact scale remainder).map(&:to_sym)
86
90
  end
@@ -160,13 +164,13 @@ module Applitools
160
164
  a_title = title
161
165
  # logger.info 'Done!'
162
166
  Applitools::AppOutputWithScreenshot.new(
163
- Applitools::AppOutput.new(a_title, '').tap do |o|
164
- o.location = region.location unless region.empty?
165
- o.dom_url = dom_url
166
- o.screenshot_url = screenshot_url if respond_to?(:screenshot_url) && !screenshot_url.nil?
167
- end,
168
- nil,
169
- true
167
+ Applitools::AppOutput.new(a_title, '').tap do |o|
168
+ o.location = region.location unless region.empty?
169
+ o.dom_url = dom_url
170
+ o.screenshot_url = screenshot_url if respond_to?(:screenshot_url) && !screenshot_url.nil?
171
+ end,
172
+ nil,
173
+ true
170
174
  )
171
175
  end
172
176
  end
@@ -128,7 +128,7 @@ module Applitools
128
128
  self.all_blobs = data["blobs"]
129
129
  self.resource_urls = data["resourceUrls"]
130
130
  self.request_resources = Applitools::Selenium::RenderResources.new
131
- # self.request_resources = {}
131
+
132
132
  all_blobs.map {|blob| Applitools::Selenium::VGResource.parse_blob_from_script(blob)}.each do |blob|
133
133
  request_resources[blob.url] = blob
134
134
  end
@@ -0,0 +1,65 @@
1
+ module Applitools
2
+ module Selenium
3
+ class VgMatchWindowData < Applitools::MatchWindowData
4
+ attr_accessor :target, :selector_regions
5
+ def read_target(target, driver, selector_regions)
6
+ self.target = target
7
+ self.selector_regions = selector_regions
8
+ # options
9
+ target_options_to_read.each do |field|
10
+ a_value = target.options[field.to_sym]
11
+ send("#{field}=", a_value) unless a_value.nil?
12
+ end
13
+ # ignored regions
14
+ if target.respond_to? :ignored_regions
15
+ target.ignored_regions.each do |r|
16
+ @need_convert_ignored_regions_coordinates = true unless @need_convert_ignored_regions_coordinates
17
+ case r
18
+ when Proc
19
+ region, padding_proc = r.call(driver, true)
20
+ # require 'pry'
21
+ # binding.pry
22
+ region = selector_regions[target.regions[region]]
23
+ retrieved_region = Applitools::Region.new(region['x'], region['y'], region['width'], region['height'])
24
+ @ignored_regions << padding_proc.call(retrieved_region) if padding_proc.is_a? Proc
25
+ when Applitools::Region
26
+ @ignored_regions << r
27
+ end
28
+ end
29
+ end
30
+
31
+ # # floating regions
32
+ return unless target.respond_to? :floating_regions
33
+ target.floating_regions.each do |r|
34
+ case r
35
+ when Proc
36
+ region, padding_proc = r.call(driver, true)
37
+ region = selector_regions[target.regions[region]]
38
+ retrieved_region = Applitools::Region.new(region['x'], region['y'], region['width'], region['height'])
39
+ floating_region = padding_proc.call(retrieved_region) if padding_proc.is_a? Proc
40
+ raise Applitools::EyesError.new "Wrong floating region: #{region.class}" unless
41
+ floating_region.is_a? Applitools::FloatingRegion
42
+ @floating_regions << floating_region
43
+ @need_convert_floating_regions_coordinates = true
44
+ when Applitools::FloatingRegion
45
+ @floating_regions << r
46
+ @need_convert_floating_regions_coordinates = true
47
+ end
48
+ end
49
+ end
50
+
51
+ def convert_ignored_regions_coordinates
52
+ return unless @need_convert_ignored_regions_coordinates
53
+ self.ignored_regions = @ignored_regions.map(&:with_padding).map(&:to_hash)
54
+ @need_convert_ignored_regions_coordinates = false
55
+ end
56
+
57
+ def convert_floating_regions_coordinates
58
+ return unless @need_convert_floating_regions_coordinates
59
+ self.floating_regions = @floating_regions
60
+ @need_convert_floating_regions_coordinates = false
61
+ end
62
+
63
+ end
64
+ end
65
+ end
@@ -12,6 +12,7 @@ module Applitools
12
12
  class << self
13
13
  def parse_blob_from_script(blob)
14
14
  content = Base64.decode64(blob["value"])
15
+ # puts "#{blob['url']} ===> #{blob['type']}"
15
16
  self.new blob["url"], blob["type"], content
16
17
  end
17
18
 
@@ -100,29 +100,48 @@ module Applitools
100
100
  end
101
101
 
102
102
  def get_regions_x_paths(target)
103
- regions_hash = collect_selenium_regions(target).each do |k,v|
104
- v.map! do |el|
105
- if [::Selenium::WebDriver::Element, Applitools::Selenium::Element].include?(el.class)
106
- xpath = driver.execute_script(Applitools::Selenium::Scripts::GET_ELEMENT_XPATH_JS, el)
107
- web_element_region = Applitools::Selenium::WebElementRegion.new(xpath, k)
108
- self.region_to_check = web_element_region if k ==:target && size_mod == 'selector'
109
- web_element_region
110
- end
111
- end.compact!
103
+ # regions_hash = collect_selenium_regions(target).each do |k,v|
104
+ # v.map! do |el|
105
+ # if [::Selenium::WebDriver::Element, Applitools::Selenium::Element].include?(el.class)
106
+ # xpath = driver.execute_script(Applitools::Selenium::Scripts::GET_ELEMENT_XPATH_JS, el)
107
+ # web_element_region = Applitools::Selenium::WebElementRegion.new(xpath, k)
108
+ # self.region_to_check = web_element_region if k ==:target && size_mod == 'selector'
109
+ # web_element_region
110
+ # end
111
+ # end.compact!
112
+ # end
113
+ result = []
114
+ regions_hash = collect_selenium_regions(target).each do |el, v|
115
+ if [::Selenium::WebDriver::Element, Applitools::Selenium::Element].include?(el.class)
116
+ xpath = driver.execute_script(Applitools::Selenium::Scripts::GET_ELEMENT_XPATH_JS, el)
117
+ web_element_region = Applitools::Selenium::WebElementRegion.new(xpath, v)
118
+ self.region_to_check = web_element_region if v == :target && size_mod == 'selector'
119
+ result << web_element_region
120
+ target.regions[el] = result.size - 1
121
+ end
112
122
  end
113
- regions_hash.values.flatten.compact
123
+ result
114
124
  end
115
125
 
116
126
  def collect_selenium_regions(target)
117
- selenium_regions = {:target => []}
118
- ignore_regions = target.ignored_regions
119
- floating_regions = target.floating_regions
127
+ selenium_regions = {}
128
+ # ignore_regions = target.ignored_regions
129
+ # floating_regions = target.floating_regions
120
130
  target_element = target.region_to_check
121
131
  setup_size_mode(target_element)
122
132
  # selenium_regions.map do |r|
123
133
  # element_or_region(r)
124
134
  # end
125
- selenium_regions[:target] << region_to_check if size_mod == 'selector'
135
+ target.ignored_regions.each do |r|
136
+ selenium_regions[element_or_region(r)] = :ignore
137
+ end
138
+ target.floating_regions.each do |r|
139
+ selenium_regions[element_or_region(r)] = :floating
140
+ end
141
+ selenium_regions[region_to_check] = :target if size_mod == 'selector'
142
+
143
+ # selenium_regions[:ignore] += [target.ignored_regions.map { |r| element_or_region(r) }].flatten.compact
144
+ # selenium_regions[:target] << region_to_check if size_mod == 'selector'
126
145
  selenium_regions
127
146
  end
128
147
 
@@ -145,7 +164,8 @@ module Applitools
145
164
 
146
165
  def element_or_region(target_element)
147
166
  if target_element.respond_to?(:call)
148
- target_element.call(driver)
167
+ region, _padding_proc = target_element.call(driver, true)
168
+ region
149
169
  else
150
170
  target_element
151
171
  end
@@ -153,9 +173,7 @@ module Applitools
153
173
 
154
174
  def close(throw_exception = true)
155
175
  return false if test_list.empty?
156
- test_list.each do |t|
157
- t.close
158
- end
176
+ test_list.each(&:close)
159
177
 
160
178
  while (!((states = test_list.map(&:state_name).uniq).count == 1 && states.first == :completed)) do
161
179
  sleep 0.5
@@ -180,9 +198,7 @@ module Applitools
180
198
  end
181
199
 
182
200
  def abort_if_not_closed
183
- test_list.each do |t|
184
- t.abort_if_not_closed
185
- end
201
+ test_list.each(&:abort_if_not_closed)
186
202
  end
187
203
 
188
204
  def open?
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: false
2
2
 
3
3
  module Applitools
4
- VERSION = '3.15.14'.freeze
4
+ VERSION = '3.15.15'.freeze
5
5
  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.15.14
4
+ version: 3.15.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Applitools Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-15 00:00:00.000000000 Z
11
+ date: 2019-05-17 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.15.14
19
+ version: 3.15.15
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.15.14
26
+ version: 3.15.15
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: selenium-webdriver
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -129,6 +129,7 @@ files:
129
129
  - lib/applitools/selenium/visual_grid/resource_cache.rb
130
130
  - lib/applitools/selenium/visual_grid/running_test.rb
131
131
  - lib/applitools/selenium/visual_grid/thread_pool.rb
132
+ - lib/applitools/selenium/visual_grid/vg_match_window_data.rb
132
133
  - lib/applitools/selenium/visual_grid/vg_resource.rb
133
134
  - lib/applitools/selenium/visual_grid/vg_task.rb
134
135
  - lib/applitools/selenium/visual_grid/visual_grid_eyes.rb