8
8
import aquality .selenium .elements .interfaces .IElement ;
9
9
import aquality .selenium .elements .interfaces .IShadowRootExpander ;
10
10
import org .openqa .selenium .Point ;
11
+ import org .openqa .selenium .ScriptKey ;
11
12
import org .openqa .selenium .SearchContext ;
12
13
13
14
import java .util .ArrayList ;
15
+ import java .util .Arrays ;
14
16
import java .util .List ;
15
17
16
18
public class JsActions implements IShadowRootExpander {
@@ -28,7 +30,17 @@ public JsActions(IElement element, String type) {
28
30
@ Override
29
31
public SearchContext expandShadowRoot () {
30
32
logElementAction ("loc.shadowroot.expand.js" );
31
- return (SearchContext ) executeScript (JavaScript .EXPAND_SHADOW_ROOT , element );
33
+ return (SearchContext ) executeScript (JavaScript .EXPAND_SHADOW_ROOT );
34
+ }
35
+
36
+ /**
37
+ * Setting attribute value.
38
+ * @param name Attribute name
39
+ * @param value Value to set
40
+ */
41
+ public void setAttribute (String name , String value ) {
42
+ logElementAction ("loc.el.attr.set" , name , value );
43
+ executeScript (JavaScript .SET_ATTRIBUTE , name , value );
32
44
}
33
45
34
46
/**
@@ -37,7 +49,7 @@ public SearchContext expandShadowRoot() {
37
49
public void click () {
38
50
logElementAction ("loc.clicking.js" );
39
51
highlightElement ();
40
- executeScript (JavaScript .CLICK_ELEMENT , element );
52
+ executeScript (JavaScript .CLICK_ELEMENT );
41
53
}
42
54
43
55
/**
@@ -60,7 +72,7 @@ public void highlightElement() {
60
72
*/
61
73
public void highlightElement (HighlightState highlightState ) {
62
74
if (AqualityServices .getBrowserProfile ().isElementHighlightEnabled () || highlightState .equals (HighlightState .HIGHLIGHT )) {
63
- executeScript (JavaScript .BORDER_ELEMENT , element );
75
+ executeScript (JavaScript .BORDER_ELEMENT );
64
76
}
65
77
}
66
78
@@ -69,7 +81,7 @@ public void highlightElement(HighlightState highlightState) {
69
81
*/
70
82
public void scrollIntoView () {
71
83
logElementAction ("loc.scrolling.js" );
72
- executeScript (JavaScript .SCROLL_TO_ELEMENT , element , true );
84
+ executeScript (JavaScript .SCROLL_TO_ELEMENT , true );
73
85
}
74
86
75
87
/**
@@ -80,15 +92,15 @@ public void scrollIntoView() {
80
92
*/
81
93
public void scrollBy (int x , int y ) {
82
94
logElementAction ("loc.scrolling.js" );
83
- executeScript (JavaScript .SCROLL_BY , element , x , y );
95
+ executeScript (JavaScript .SCROLL_BY , x , y );
84
96
}
85
97
86
98
/**
87
99
* Scrolling to element's center
88
100
*/
89
101
public void scrollToTheCenter () {
90
102
logElementAction ("loc.scrolling.center.js" );
91
- executeScript (JavaScript .SCROLL_TO_ELEMENT_CENTER , element );
103
+ executeScript (JavaScript .SCROLL_TO_ELEMENT_CENTER );
92
104
}
93
105
94
106
/**
@@ -98,15 +110,15 @@ public void scrollToTheCenter() {
98
110
*/
99
111
public void setValue (final String value ) {
100
112
logElementAction ("loc.setting.value" , value );
101
- executeScript (JavaScript .SET_VALUE , element , value );
113
+ executeScript (JavaScript .SET_VALUE , value );
102
114
}
103
115
104
116
/**
105
117
* Focusing element
106
118
*/
107
119
public void setFocus () {
108
120
logElementAction ("loc.focusing" );
109
- executeScript (JavaScript .SET_FOCUS , element );
121
+ executeScript (JavaScript .SET_FOCUS );
110
122
}
111
123
112
124
/**
@@ -116,7 +128,7 @@ public void setFocus() {
116
128
*/
117
129
public boolean isElementOnScreen () {
118
130
logElementAction ("loc.is.present.js" );
119
- boolean value = (boolean ) executeScript (JavaScript .ELEMENT_IS_ON_SCREEN , element );
131
+ boolean value = (boolean ) executeScript (JavaScript .ELEMENT_IS_ON_SCREEN );
120
132
logElementAction ("loc.is.present.value" , value );
121
133
return value ;
122
134
}
@@ -128,15 +140,15 @@ public boolean isElementOnScreen() {
128
140
*/
129
141
public String getElementText () {
130
142
logElementAction ("loc.get.text.js" );
131
- return (String ) executeScript (JavaScript .GET_ELEMENT_TEXT , element );
143
+ return (String ) executeScript (JavaScript .GET_ELEMENT_TEXT );
132
144
}
133
145
134
146
/**
135
147
* Hover mouse over element
136
148
*/
137
149
public void hoverMouse () {
138
150
logElementAction ("loc.hover.js" );
139
- executeScript (JavaScript .MOUSE_HOVER , element );
151
+ executeScript (JavaScript .MOUSE_HOVER );
140
152
}
141
153
142
154
/**
@@ -146,7 +158,7 @@ public void hoverMouse() {
146
158
*/
147
159
@ SuppressWarnings ("unchecked" )
148
160
public Point getViewPortCoordinates () {
149
- List <Number > coordinates = (ArrayList <Number >) executeScript (JavaScript .GET_VIEWPORT_COORDINATES , element );
161
+ List <Number > coordinates = (ArrayList <Number >) executeScript (JavaScript .GET_VIEWPORT_COORDINATES );
150
162
return new Point (Math .round (coordinates .get (0 ).floatValue ()), Math .round (coordinates .get (1 ).floatValue ()));
151
163
}
152
164
@@ -157,17 +169,38 @@ public Point getViewPortCoordinates() {
157
169
*/
158
170
public String getXPath () {
159
171
logElementAction ("loc.get.xpath.js" );
160
- String value = (String ) executeScript (JavaScript .GET_ELEMENT_XPATH , element );
172
+ String value = (String ) executeScript (JavaScript .GET_ELEMENT_XPATH );
161
173
logElementAction ("loc.xpath.value" , value );
162
174
return value ;
163
175
}
164
176
165
- protected Object executeScript (JavaScript javaScript , IElement element ) {
177
+ private Object [] resolveArguments (Object ... args ) {
178
+ List <Object > arguments = new ArrayList <>();
179
+ arguments .add (element .getElement ());
180
+ arguments .addAll (Arrays .asList (args ));
181
+ return arguments .toArray ();
182
+ }
183
+
184
+ /**
185
+ * Executes pinned JavaScript against the element and gets result value.
186
+ * @param pinnedScript Instance of script pinned with {@link Browser#javaScriptEngine()}
187
+ * @return Script execution result.
188
+ */
189
+ public Object executeScript (ScriptKey pinnedScript , Object ... args ) {
190
+ logElementAction ("loc.el.execute.pinnedjs" );
191
+ Object result = getActionRetrier ().doWithRetry (() -> getBrowser ().executeScript (pinnedScript , resolveArguments (args )));
192
+ if (result != null ) {
193
+ logElementAction ("loc.el.execute.pinnedjs.result" , result );
194
+ }
195
+ return result ;
196
+ }
197
+
198
+ protected Object executeScript (JavaScript javaScript ) {
166
199
return getActionRetrier ().doWithRetry (() -> getBrowser ().executeScript (javaScript , element .getElement ()));
167
200
}
168
201
169
- protected Object executeScript (JavaScript javaScript , IElement element , Object ... args ) {
170
- return getActionRetrier ().doWithRetry (() -> getBrowser ().executeScript (javaScript , element . getElement (), args ));
202
+ protected Object executeScript (JavaScript javaScript , Object ... args ) {
203
+ return getActionRetrier ().doWithRetry (() -> getBrowser ().executeScript (javaScript , resolveArguments ( args ) ));
171
204
}
172
205
173
206
/**
0 commit comments