eyes_selenium 3.15.7.beta → 3.15.8.beta

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
  SHA256:
3
- metadata.gz: f310314bd69c6cdf7997b6b2a4198cd5bde9c8949d200e70386f4814c876078e
4
- data.tar.gz: 5530cd7dbd51d0cfea656393653e295c47d4f8410ea8bede644e74e863a09fa9
3
+ metadata.gz: 1c555292b295f24e141289f7534c4b035d7f1f0ad6b1a531e0c6110c0b07e1ae
4
+ data.tar.gz: ab114178948031d1933e216fcf74060c6d4ad16e3d1ec059ead5cb4c8e25746d
5
5
  SHA512:
6
- metadata.gz: 15bddcc282aa913b87811ef6f991bb3f9102e89db9e0395d46731df102058f6c5db89ef630ebf0ffabc5452f31f1e17a1f3a1a14c1c91ab6aad1a328ef0658ae
7
- data.tar.gz: dc35a47ff1db17acf792f766658f833340c0d4052b8ddb3cda56f3d4a63c1dc484321b22d4b951e771d29bafa072eb18731c99d66e636c5f981062d6d5990ddf
6
+ metadata.gz: f5206c76f8b5441aa4da66df2c39a0a742ff553056c47fec14333b94881e213e95aa56770e4eed3dc35a740d7301b5b5b9e56cf2c3cddf17419a3140272c803e
7
+ data.tar.gz: eaa114999ee42c6121621f0af46711f2f0cca9678de5c1d95ef909df1d1f394fee6f22ffd582e5a4683fdeb2243dd99ee451fcec7cb25f1583c7af56bbaab9f7
@@ -2,7 +2,7 @@ module BrowserTypes
2
2
  extend self
3
3
  CHROME = :chrome
4
4
  FIREFOX = :firefox
5
- IE11 = :ie
5
+ IE11 = :IE_11
6
6
  EDGE = :edge
7
7
  IE10 = :ie10
8
8
 
@@ -0,0 +1,25 @@
1
+ module Applitools
2
+ module Selenium
3
+ module Scripts
4
+ GET_ELEMENT_XPATH_JS = <<'END'
5
+ var el = arguments[0];
6
+ var xpath = '';
7
+ do {
8
+ var parent = el.parentElement;
9
+ var index = 1;
10
+ if (parent !== null) {
11
+ var children = parent.children;
12
+ for (var childIdx in children) {
13
+ var child = children[childIdx];
14
+ if (child === el) break;
15
+ if (child.tagName === el.tagName) index++;
16
+ }
17
+ }
18
+ xpath = '/' + el.tagName + '[' + index + ']' + xpath;
19
+ el = parent;
20
+ } while (el !== null);
21
+ return '/' + xpath;
22
+ END
23
+ end
24
+ end
25
+ end
@@ -7,7 +7,7 @@ module Applitools
7
7
  {
8
8
  platform: 'linux',
9
9
  browser_type: BrowserTypes::CHROME,
10
- size_mode: 'full-page',
10
+ # size_mode: 'full-page',
11
11
  viewport_size: Applitools::RectangleSize.from_any_argument(width: 0, height: 0)
12
12
  }
13
13
  end
@@ -2,7 +2,7 @@ module Applitools
2
2
  module Selenium
3
3
  class RenderInfo
4
4
  include Applitools::Jsonable
5
- json_fields :width, :height, :sizeMode, :emulationInfo
5
+ json_fields :width, :height, :sizeMode, :emulationInfo, :region, :selector
6
6
  # , :region, :emulationInfo
7
7
 
8
8
  def json_data
@@ -12,6 +12,8 @@ module Applitools
12
12
  sizeMode: size_mode
13
13
  }
14
14
  result['emulationInfo'] = json_value(emulation_info) if emulation_info
15
+ result['region'] = json_value(region) if size_mode == 'region'
16
+ result['selector'] = json_value(region) if size_mode == 'selector'
15
17
  result
16
18
  end
17
19
  end
@@ -4,7 +4,7 @@ module Applitools
4
4
  class RenderRequest
5
5
  include Applitools::Jsonable
6
6
  json_fields :renderId, :webhook, :url, :dom, :resources, :scriptHooks,
7
- :selectorsToFindRegionsFor, :send_dom
7
+ :selectorsToFindRegionsFor, :sendDom
8
8
 
9
9
  json_fields :renderInfo, :browser
10
10
 
@@ -9,8 +9,9 @@ module Applitools
9
9
  MAX_ITERATIONS = 100
10
10
 
11
11
  attr_accessor :script, :running_test, :all_blobs, :resource_urls, :resource_cache, :put_cache, :server_connector,
12
- :rendering_info, :request_resources, :dom_url_mod, :result
13
- def initialize(name, script, running_test, resource_cache, put_cache, rendering_info, server_connector, mod = nil)
12
+ :rendering_info, :request_resources, :dom_url_mod, :result, :region_selectors, :size_mode, :region_to_check
13
+
14
+ def initialize(name, script, running_test, resource_cache, put_cache, rendering_info, server_connector, region_selectors, size_mode, region, mod = nil)
14
15
  self.result = nil
15
16
  self.script = script
16
17
  self.running_test = running_test
@@ -18,6 +19,10 @@ module Applitools
18
19
  self.put_cache = put_cache
19
20
  self.server_connector = server_connector
20
21
  self.rendering_info = rendering_info
22
+ self.region_selectors = region_selectors
23
+ self.size_mode = size_mode
24
+ self.region_to_check = region
25
+
21
26
  self.dom_url_mod = mod
22
27
  super(name) do
23
28
  perform
@@ -38,6 +43,7 @@ module Applitools
38
43
  # rescue StandardError => _e
39
44
  # response = server_connector.render(rendering_info['serviceUrl'], rendering_info['accessToken'], requests)
40
45
  rescue StandardError => e
46
+ Applitools::EyesLogger.error(e.message)
41
47
  fetch_fails += 1
42
48
  sleep 2
43
49
  end
@@ -146,7 +152,8 @@ module Applitools
146
152
  r_info = Applitools::Selenium::RenderInfo.new.tap do |r|
147
153
  r.width = running_test.browser_info.viewport_size.width
148
154
  r.height = running_test.browser_info.viewport_size.height
149
- r.size_mode = running_test.browser_info.size_mode
155
+ r.size_mode = size_mode
156
+ r.region = region_to_check
150
157
  r.emulation_info = running_test.browser_info.emulation_info if running_test.browser_info.emulation_info
151
158
  end
152
159
 
@@ -162,9 +169,8 @@ module Applitools
162
169
  render_info: r_info,
163
170
  browser: {name: running_test.browser_info.browser_type, platform: running_test.browser_info.platform},
164
171
  script_hooks: nil,
165
- selectors_to_find_region_for: nil,
166
- send_dom: running_test.eyes.config.send_dom,
167
- task: nil
172
+ selectors_to_find_regions_for: region_selectors,
173
+ send_dom: running_test.eyes.config.send_dom.nil? ? false.to_s : running_test.eyes.config.send_dom.to_s
168
174
  )
169
175
  end
170
176
 
@@ -153,7 +153,7 @@ module Applitools
153
153
  watch_open[open_task] = false
154
154
  end
155
155
 
156
- def check(tag, target, script_result, visual_grid_manager, mod = nil)
156
+ def check(tag, target, script_result, visual_grid_manager, region_selectors, size_mod, region_to_check, mod = nil)
157
157
  render_task = RenderTask.new(
158
158
  "Render #{eyes.config.short_description} - #{tag}",
159
159
  script_result,
@@ -162,6 +162,9 @@ module Applitools
162
162
  visual_grid_manager.put_cache,
163
163
  visual_grid_manager.rendering_info(eyes.server_connector),
164
164
  eyes.server_connector,
165
+ region_selectors,
166
+ size_mod,
167
+ region_to_check,
165
168
  mod
166
169
  )
167
170
 
@@ -11,6 +11,9 @@ module Applitools
11
11
 
12
12
  attr_accessor :api_key, :server_url, :proxy, :opened
13
13
 
14
+ attr_accessor :size_mod, :region_to_check
15
+ private :size_mod, :size_mod=, :region_to_check, :region_to_check=
16
+
14
17
  def_delegators 'config', *Applitools::Selenium::Configuration.methods_to_delegate
15
18
  def_delegators 'config', *Applitools::EyesBaseConfiguration.methods_to_delegate
16
19
 
@@ -74,8 +77,14 @@ module Applitools
74
77
  sleep wait_before_screenshots
75
78
  script_result = driver.execute_async_script(script).freeze
76
79
  mod = Digest::SHA2.hexdigest(script_result)
80
+
81
+ region_x_paths = get_regions_x_paths(target)
82
+
83
+ # require 'pry'
84
+ # binding.pry
85
+
77
86
  test_list.each do |t|
78
- t.check(tag, target, script_result.dup, visual_grid_manager, mod)
87
+ t.check(tag, target, script_result.dup, visual_grid_manager, region_x_paths, size_mod, region_to_check, mod)
79
88
  end
80
89
  test_list.each { |t| t.becomes_not_rendered}
81
90
  rescue StandardError => e
@@ -84,6 +93,58 @@ module Applitools
84
93
  end
85
94
  end
86
95
 
96
+ def get_regions_x_paths(target)
97
+ regions_hash = collect_selenium_regions(target).each do |k,v|
98
+ v.map! do |el|
99
+ if [::Selenium::WebDriver::Element, Applitools::Selenium::Element].include?(el.class)
100
+ xpath = driver.execute_script(Applitools::Selenium::Scripts::GET_ELEMENT_XPATH_JS, el)
101
+ web_element_region = Applitools::Selenium::WebElementRegion.new(xpath, k)
102
+ self.region_to_check = web_element_region if k ==:target && size_mod == 'selector'
103
+ web_element_region
104
+ end
105
+ end.compact!
106
+ end
107
+ regions_hash.values.flatten.compact
108
+ end
109
+
110
+ def collect_selenium_regions(target)
111
+ selenium_regions = {:target => []}
112
+ # ignore_regions = target.ignored_regions
113
+ # floating_regions = target.floating_regions
114
+ target_element = target.region_to_check
115
+ setup_size_mode(target_element)
116
+ # selenium_regions.map do |r|
117
+ # element_or_region(r)
118
+ # end
119
+ selenium_regions[:target] << region_to_check if size_mod == 'selector'
120
+ selenium_regions
121
+ end
122
+
123
+ def setup_size_mode(target_element)
124
+ self.size_mod = 'full-page'
125
+
126
+ element_or_region = element_or_region(target_element)
127
+
128
+ case element_or_region
129
+ when ::Selenium::WebDriver::Element, Applitools::Selenium::Element
130
+ self.size_mod = 'selector'
131
+ when Applitools::Region
132
+ self.size_mod = 'region' unless element_or_region == Applitools::Region::EMPTY
133
+ else
134
+ self.size_mod = 'full-page'
135
+ end
136
+
137
+ self.region_to_check = element_or_region
138
+ end
139
+
140
+ def element_or_region(target_element)
141
+ if target_element.respond_to?(:call)
142
+ target_element.call(driver)
143
+ else
144
+ target_element
145
+ end
146
+ end
147
+
87
148
  def close(throw_exception = true)
88
149
  return false if test_list.empty?
89
150
  test_list.each do |t|
@@ -0,0 +1,14 @@
1
+ module Applitools
2
+ module Selenium
3
+ class WebElementRegion
4
+ include Applitools::Jsonable
5
+ json_fields :selector, :category, :type
6
+
7
+ def initialize(selector, category)
8
+ self.selector = selector
9
+ self.category = category
10
+ self.type = 'xpath'
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: false
2
2
 
3
3
  module Applitools
4
- VERSION = '3.15.7.beta'.freeze
4
+ VERSION = '3.15.8.beta'.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.7.beta
4
+ version: 3.15.8.beta
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-04-05 00:00:00.000000000 Z
11
+ date: 2019-04-12 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.7.beta
19
+ version: 3.15.8.beta
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.7.beta
26
+ version: 3.15.8.beta
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: selenium-webdriver
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +108,7 @@ files:
108
108
  - lib/applitools/selenium/render_resources.rb
109
109
  - lib/applitools/selenium/rgrid_dom.rb
110
110
  - lib/applitools/selenium/sauce/driver.rb
111
+ - lib/applitools/selenium/scripts/get_element_xpath.rb
111
112
  - lib/applitools/selenium/scripts/process_page_and_serialize.rb
112
113
  - lib/applitools/selenium/scroll_position_provider.rb
113
114
  - lib/applitools/selenium/selenium_eyes.rb
@@ -132,6 +133,7 @@ files:
132
133
  - lib/applitools/selenium/visual_grid/vg_task.rb
133
134
  - lib/applitools/selenium/visual_grid/visual_grid_eyes.rb
134
135
  - lib/applitools/selenium/visual_grid/visual_grid_runner.rb
136
+ - lib/applitools/selenium/visual_grid/web_element_region.rb
135
137
  - lib/applitools/version.rb
136
138
  - lib/eyes_selenium.rb
137
139
  homepage: https://www.applitools.com