forked from applitools/Eyes.Selenium.JavaScript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathElementFinderWrapper.js
More file actions
94 lines (80 loc) · 3.48 KB
/
Copy pathElementFinderWrapper.js
File metadata and controls
94 lines (80 loc) · 3.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/*
---
name: ElementFinderWrapper
description: Wraps Protractor's ElementFinder to make sure we return our own Web Element.
---
*/
(function () {
"use strict";
var EyesUtils = require('eyes.utils'),
EyesRemoteWebElement = require('./EyesRemoteWebElement'),
ElementArrayFinderWrapper = require('./ElementArrayFinderWrapper');
var GeneralUtils = EyesUtils.GeneralUtils;
// functions in ElementFinder that return a new ElementFinder and therefore we must wrap and return our own
var ELEMENT_FINDER_TO_ELEMENT_FINDER_FUNCTIONS = ['element', '$', 'evaluate', 'allowAnimations'];
// functions in ElementFinder that return a new ElementArrayFinder and therefore we must wrap and return our own
var ELEMENT_FINDER_TO_ELEMENT_ARRAY_FINDER_FUNCTIONS = ['all', '$$'];
/**
* Wrapper for ElementFinder object from Protractor
*
* @param {ElementFinder} finder
* @param {EyesWebDriver} eyesDriver
* @param {Logger} logger
* @constructor
**/
function ElementFinderWrapper(finder, eyesDriver, logger) {
GeneralUtils.mixin(this, finder);
this._logger = logger;
this._eyesDriver = eyesDriver;
this._finder = finder;
var that = this;
ELEMENT_FINDER_TO_ELEMENT_FINDER_FUNCTIONS.forEach(function (fnName) {
that[fnName] = function () {
return new ElementFinderWrapper(that._finder[fnName].apply(that._finder, arguments), that._eyesDriver, that._logger);
};
});
ELEMENT_FINDER_TO_ELEMENT_ARRAY_FINDER_FUNCTIONS.forEach(function (fnName) {
that[fnName] = function () {
return new ElementArrayFinderWrapper(that._finder[fnName].apply(that._finder, arguments), that._eyesDriver, that._logger);
};
});
}
/**
* Wrap the getWebElement function
*
* @returns {EyesRemoteWebElement}
*/
ElementFinderWrapper.prototype.getWebElement = function () {
this._logger.verbose("ElementFinderWrapper:getWebElement - called");
return new EyesRemoteWebElement(this._finder.getWebElement.apply(this._finder), this._eyesDriver, this._logger);
};
/**
* Wrap the click function
*
* @returns {Promise.<EyesRemoteWebElement>}
*/
ElementFinderWrapper.prototype.click = function () {
var that = this;
that._logger.verbose("ElementFinderWrapper:click - called");
return that._finder.getWebElement().then(function (element) {
return EyesRemoteWebElement.registerClick(element, that._eyesDriver, that._logger);
}).then(function () {
return new EyesRemoteWebElement(that._finder.click.apply(that._finder), that._eyesDriver, that._logger);
});
};
/**
* Wrap the functions that return objects that require pre-wrapping
*
* @returns {Promise.<EyesRemoteWebElement>}
*/
ElementFinderWrapper.prototype.sendKeys = function () {
var that = this, args = Array.prototype.slice.call(arguments, 0);
that._logger.verbose("ElementFinderWrapper:sendKeys - called");
return that._finder.getWebElement().then(function (element) {
return EyesRemoteWebElement.registerSendKeys(element, that._eyesDriver, that._logger, args);
}).then(function () {
return new EyesRemoteWebElement(that._finder.sendKeys.apply(that._finder, args), that._eyesDriver, that._logger);
});
};
exports.ElementFinderWrapper = ElementFinderWrapper;
}());