gridium 1.1.34 → 1.1.35
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/element.rb +32 -10
- data/lib/element_extensions.rb +21 -0
- data/lib/js/dnd.js +58 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc44fb52f1320ccaf47d6d2ba4632e29b2f642e0
|
4
|
+
data.tar.gz: ce69715beb35d69201f86c9266309afcf536ab42
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6bf31c51af9cf634972368b93d4aceb9423f238b6102015651d2ec96252f69eb932680e99327070ee65ecc165c226cca53c1dfa24d63538b1e471503ffc5c91e
|
7
|
+
data.tar.gz: 10c88c36c9c2a03a49604d0f4fc1d79a81e458bd21d798481b8c9d94167d6959e476e422411c7bf5d01f0efcc4209b912bbda6b9841b951a408adbb4645f187d
|
data/lib/element.rb
CHANGED
@@ -5,6 +5,7 @@ require 'spec_data'
|
|
5
5
|
class Element
|
6
6
|
attr_reader :name, :by, :locator
|
7
7
|
|
8
|
+
class Gridium::InvalidTypeError < StandardError; end
|
8
9
|
|
9
10
|
def initialize(name, by, locator, opts = {})
|
10
11
|
@name = name
|
@@ -64,9 +65,9 @@ class Element
|
|
64
65
|
rescue StandardError => error
|
65
66
|
Log.debug("[GRIDIUM::Element] element.displayed_element rescued: #{error}")
|
66
67
|
if found_element
|
67
|
-
Log.warn("[GRIDIUM::Element] An element was found, but it was not displayed on the page. Gridium.config.visible_elements_only set to: #{Gridium.config.visible_elements_only} Element: #{self
|
68
|
+
Log.warn("[GRIDIUM::Element] An element was found, but it was not displayed on the page. Gridium.config.visible_elements_only set to: #{Gridium.config.visible_elements_only} Element: #{self}")
|
68
69
|
else
|
69
|
-
Log.warn("[GRIDIUM::Element] Could not find Element: #{self
|
70
|
+
Log.warn("[GRIDIUM::Element] Could not find Element: #{self}")
|
70
71
|
end
|
71
72
|
end
|
72
73
|
|
@@ -93,6 +94,17 @@ class Element
|
|
93
94
|
element.attribute(name)
|
94
95
|
end
|
95
96
|
|
97
|
+
# Requires element to have an ID value, to successfully use `document.getElementById`
|
98
|
+
def set_attribute(name, value)
|
99
|
+
id = self.attribute('id')
|
100
|
+
if id.nil? || id.empty?
|
101
|
+
Log.warn("[GRIDIUM::Element] #{self} does not have an 'id'. Consider adding one.")
|
102
|
+
else
|
103
|
+
Log.debug("[GRIDIUM::Element] setting element attribute '#{name}' to '#{value}'")
|
104
|
+
ElementExtensions.set_attribute(id, name, value)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
96
108
|
def css_value(name)
|
97
109
|
element.css_value(name)
|
98
110
|
end
|
@@ -204,7 +216,7 @@ class Element
|
|
204
216
|
end
|
205
217
|
|
206
218
|
def hover_over
|
207
|
-
Log.debug("[GRIDIUM::Element] Hovering over element (#{self
|
219
|
+
Log.debug("[GRIDIUM::Element] Hovering over element (#{self})...")
|
208
220
|
# @driver.mouse.move_to(element) # Note: Doesn't work with Selenium 2.42 bindings for Firefox v31
|
209
221
|
# @driver.action.move_to(element).perform
|
210
222
|
# @driver.mouse_over(@locator)
|
@@ -217,7 +229,7 @@ class Element
|
|
217
229
|
end
|
218
230
|
|
219
231
|
def hover_away
|
220
|
-
Log.debug("[GRIDIUM::Element] Hovering away from element (#{self
|
232
|
+
Log.debug("[GRIDIUM::Element] Hovering away from element (#{self})...")
|
221
233
|
if element.enabled?
|
222
234
|
$verification_passes += 1
|
223
235
|
ElementExtensions.hover_away(self) # Javascript workaround to above issue
|
@@ -228,7 +240,7 @@ class Element
|
|
228
240
|
|
229
241
|
# Raw webdriver mouse over
|
230
242
|
def mouse_over(x: 1, y: 1)
|
231
|
-
Log.debug("[GRIDIUM::Element] Triggering mouse over for (#{self
|
243
|
+
Log.debug("[GRIDIUM::Element] Triggering mouse over for (#{self})...")
|
232
244
|
if element.enabled?
|
233
245
|
$verification_passes += 1
|
234
246
|
ElementExtensions.mouse_over(self, x: x, y: y)
|
@@ -237,6 +249,16 @@ class Element
|
|
237
249
|
end
|
238
250
|
end
|
239
251
|
|
252
|
+
# HTML5 Drag n drop
|
253
|
+
# @param [Element] target element to drag to
|
254
|
+
def drag_to(target)
|
255
|
+
raise Gridium::InvalidTypeError, "source element selector must be ':css'" unless self.by == :css
|
256
|
+
raise Gridium::InvalidTypeError, "target element selector must be ':css'" unless target.by == :css
|
257
|
+
|
258
|
+
Log.debug("[GRIDIUM::Element] Dragging (#{self}) to (#{target})")
|
259
|
+
ElementExtensions.drag_to(self, target)
|
260
|
+
end
|
261
|
+
|
240
262
|
def scroll_into_view
|
241
263
|
if element.enabled?
|
242
264
|
$verification_passes += 1
|
@@ -247,7 +269,7 @@ class Element
|
|
247
269
|
end
|
248
270
|
|
249
271
|
def trigger_onblur
|
250
|
-
Log.debug("[GRIDIUM::Element] Triggering onblur for (#{self
|
272
|
+
Log.debug("[GRIDIUM::Element] Triggering onblur for (#{self})...")
|
251
273
|
if element.enabled?
|
252
274
|
$verification_passes += 1
|
253
275
|
ElementExtensions.trigger_onblur(self)
|
@@ -257,7 +279,7 @@ class Element
|
|
257
279
|
end
|
258
280
|
|
259
281
|
def jquery_click
|
260
|
-
Log.debug("[GRIDIUM::Element] JQuery clickin (#{self
|
282
|
+
Log.debug("[GRIDIUM::Element] JQuery clickin (#{self})...")
|
261
283
|
if element.enabled?
|
262
284
|
$verification_passes += 1
|
263
285
|
ElementExtensions.jquery_click(self)
|
@@ -328,7 +350,7 @@ class Element
|
|
328
350
|
element_height = self.size.height
|
329
351
|
|
330
352
|
# ChunkyPNG commands tap into oily_png (performance-enhanced version of chunky_png)
|
331
|
-
image = ChunkyPNG::Image.from_file(screenshot_path
|
353
|
+
image = ChunkyPNG::Image.from_file(screenshot_path)
|
332
354
|
image1 = image.crop(location_x, location_y, element_width, element_height)
|
333
355
|
image2 = image1.to_image
|
334
356
|
element_screenshot_path = File.join($current_run_dir, "#{name}__#{timestamp}.png")
|
@@ -372,7 +394,7 @@ class Element
|
|
372
394
|
return true
|
373
395
|
end
|
374
396
|
rescue StandardError => e
|
375
|
-
Log.error("There was a problem comparing element images. #{e.
|
397
|
+
Log.error("There was a problem comparing element images. #{e.message}")
|
376
398
|
end
|
377
399
|
end
|
378
400
|
|
@@ -392,7 +414,7 @@ class Element
|
|
392
414
|
@element.displayed?
|
393
415
|
rescue StandardError => error
|
394
416
|
Log.debug("[GRIDIUM::Element] element.stale? is true because this error was rescued: #{error}")
|
395
|
-
Log.warn("[GRIDIUM::Element] Stale element detected.... #{self
|
417
|
+
Log.warn("[GRIDIUM::Element] Stale element detected.... #{self}")
|
396
418
|
return true
|
397
419
|
end
|
398
420
|
|
data/lib/element_extensions.rb
CHANGED
@@ -45,5 +45,26 @@ class Gridium::ElementExtensions
|
|
45
45
|
def jquery_click(element)
|
46
46
|
Driver.execute_script("arguments[0].click().change();", element.element)
|
47
47
|
end
|
48
|
+
|
49
|
+
#
|
50
|
+
# Javascript HTML5 Drag n drop
|
51
|
+
# @param [Element] source element (css locator required)
|
52
|
+
# @param [Element] target element (css locator required)
|
53
|
+
#
|
54
|
+
def drag_to(source, target)
|
55
|
+
dnd_js = File.read(File.join(File.dirname(__FILE__), "./js/dnd.js"))
|
56
|
+
Log.debug("[GRIDIUM::ElementExtensions] dragging '#{source}' to '#{target}'")
|
57
|
+
Driver.execute_script_driver(dnd_js + "$('#{source.locator}').simulateDragDrop({ dropTarget: '#{target.locator}'});")
|
58
|
+
end
|
59
|
+
|
60
|
+
#
|
61
|
+
# Use Javascript to set element attribute value from :id
|
62
|
+
# @param [String] id
|
63
|
+
# @param [String] Attribute
|
64
|
+
# @param [String] value
|
65
|
+
#
|
66
|
+
def set_attribute(id, attr, val)
|
67
|
+
Driver.execute_script_driver("document.getElementById('#{id}').setAttribute('#{attr}', '#{val}')");
|
68
|
+
end
|
48
69
|
end
|
49
70
|
end
|
data/lib/js/dnd.js
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
//
|
2
|
+
// dnd.js
|
3
|
+
// HTML5 Javascript Drag_n_drop helper
|
4
|
+
// Selenium will not support this natively
|
5
|
+
//
|
6
|
+
(function( $ ) {
|
7
|
+
$.fn.simulateDragDrop = function(options) {
|
8
|
+
return this.each(function() {
|
9
|
+
new $.simulateDragDrop(this, options);
|
10
|
+
});
|
11
|
+
};
|
12
|
+
$.simulateDragDrop = function(elem, options) {
|
13
|
+
this.options = options;
|
14
|
+
this.simulateEvent(elem, options);
|
15
|
+
};
|
16
|
+
$.extend($.simulateDragDrop.prototype, {
|
17
|
+
simulateEvent: function(elem, options) {
|
18
|
+
/*Simulating drag start*/
|
19
|
+
var type = 'dragstart';
|
20
|
+
var event = this.createEvent(type);
|
21
|
+
this.dispatchEvent(elem, type, event);
|
22
|
+
|
23
|
+
/*Simulating drop*/
|
24
|
+
type = 'drop';
|
25
|
+
var dropEvent = this.createEvent(type, {});
|
26
|
+
dropEvent.dataTransfer = event.dataTransfer;
|
27
|
+
this.dispatchEvent($(options.dropTarget)[0], type, dropEvent);
|
28
|
+
|
29
|
+
/*Simulating drag end*/
|
30
|
+
type = 'dragend';
|
31
|
+
var dragEndEvent = this.createEvent(type, {});
|
32
|
+
dragEndEvent.dataTransfer = event.dataTransfer;
|
33
|
+
this.dispatchEvent(elem, type, dragEndEvent);
|
34
|
+
},
|
35
|
+
createEvent: function(type) {
|
36
|
+
var event = document.createEvent("CustomEvent");
|
37
|
+
event.initCustomEvent(type, true, true, null);
|
38
|
+
event.dataTransfer = {
|
39
|
+
data: {
|
40
|
+
},
|
41
|
+
setData: function(type, val){
|
42
|
+
this.data[type] = val;
|
43
|
+
},
|
44
|
+
getData: function(type){
|
45
|
+
return this.data[type];
|
46
|
+
}
|
47
|
+
};
|
48
|
+
return event;
|
49
|
+
},
|
50
|
+
dispatchEvent: function(elem, type, event) {
|
51
|
+
if(elem.dispatchEvent) {
|
52
|
+
elem.dispatchEvent(event);
|
53
|
+
}else if( elem.fireEvent ) {
|
54
|
+
elem.fireEvent("on"+type, event);
|
55
|
+
}
|
56
|
+
}
|
57
|
+
});
|
58
|
+
})(jQuery);
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gridium
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.35
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Seth Urban
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-09-
|
11
|
+
date: 2017-09-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -155,6 +155,7 @@ files:
|
|
155
155
|
- lib/element_verification.rb
|
156
156
|
- lib/gridium.rb
|
157
157
|
- lib/gridium/version.rb
|
158
|
+
- lib/js/dnd.js
|
158
159
|
- lib/log.rb
|
159
160
|
- lib/page.rb
|
160
161
|
- lib/s3.rb
|