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 +4 -4
- data/lib/applitools/selenium/browser_types.rb +1 -1
- data/lib/applitools/selenium/scripts/get_element_xpath.rb +25 -0
- data/lib/applitools/selenium/visual_grid/render_browser_info.rb +1 -1
- data/lib/applitools/selenium/visual_grid/render_info.rb +3 -1
- data/lib/applitools/selenium/visual_grid/render_request.rb +1 -1
- data/lib/applitools/selenium/visual_grid/render_task.rb +12 -6
- data/lib/applitools/selenium/visual_grid/running_test.rb +4 -1
- data/lib/applitools/selenium/visual_grid/visual_grid_eyes.rb +62 -1
- data/lib/applitools/selenium/visual_grid/web_element_region.rb +14 -0
- data/lib/applitools/version.rb +1 -1
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1c555292b295f24e141289f7534c4b035d7f1f0ad6b1a531e0c6110c0b07e1ae
|
4
|
+
data.tar.gz: ab114178948031d1933e216fcf74060c6d4ad16e3d1ec059ead5cb4c8e25746d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f5206c76f8b5441aa4da66df2c39a0a742ff553056c47fec14333b94881e213e95aa56770e4eed3dc35a740d7301b5b5b9e56cf2c3cddf17419a3140272c803e
|
7
|
+
data.tar.gz: eaa114999ee42c6121621f0af46711f2f0cca9678de5c1d95ef909df1d1f394fee6f22ffd582e5a4683fdeb2243dd99ee451fcec7cb25f1583c7af56bbaab9f7
|
@@ -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
|
@@ -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
|
@@ -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
|
-
|
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 =
|
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
|
-
|
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
|
data/lib/applitools/version.rb
CHANGED
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.
|
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-
|
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.
|
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.
|
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
|