eyes_selenium 3.15.7.beta → 3.15.8.beta

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: 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