@@ -83,7 +83,10 @@ def reset_actions(self):
83
83
"""
84
84
Clears actions that are already stored on the remote end.
85
85
"""
86
- self ._driver .execute (Command .W3C_CLEAR_ACTIONS )
86
+ if self ._driver .w3c :
87
+ self ._driver .execute (Command .W3C_CLEAR_ACTIONS )
88
+ else :
89
+ self ._actions = []
87
90
88
91
def click (self , on_element = None ):
89
92
"""
@@ -93,10 +96,15 @@ def click(self, on_element=None):
93
96
- on_element: The element to click.
94
97
If None, clicks on current mouse position.
95
98
"""
96
- if on_element :
97
- self .move_to_element (on_element )
98
- self ._actions .append (lambda : self ._driver .execute (
99
- Command .CLICK , {'button' : 0 }))
99
+ if self ._driver .w3c :
100
+ self .w3c_actions .pointer_action .click (on_element )
101
+ self .w3c_actions .key_action .pause ()
102
+ self .w3c_actions .key_action .pause ()
103
+ else :
104
+ if on_element :
105
+ self .move_to_element (on_element )
106
+ self ._actions .append (lambda : self ._driver .execute (
107
+ Command .CLICK , {'button' : 0 }))
100
108
return self
101
109
102
110
def click_and_hold (self , on_element = None ):
@@ -107,10 +115,16 @@ def click_and_hold(self, on_element=None):
107
115
- on_element: The element to mouse down.
108
116
If None, clicks on current mouse position.
109
117
"""
110
- if on_element :
111
- self .move_to_element (on_element )
112
- self ._actions .append (lambda : self ._driver .execute (
113
- Command .MOUSE_DOWN , {}))
118
+ if self ._driver .w3c :
119
+ self .w3c_actions .pointer_action .click_and_hold (on_element )
120
+ self .w3c_actions .key_action .pause ()
121
+ if on_element :
122
+ self .w3c_actions .key_action .pause ()
123
+ else :
124
+ if on_element :
125
+ self .move_to_element (on_element )
126
+ self ._actions .append (lambda : self ._driver .execute (
127
+ Command .MOUSE_DOWN , {}))
114
128
return self
115
129
116
130
def context_click (self , on_element = None ):
@@ -121,10 +135,14 @@ def context_click(self, on_element=None):
121
135
- on_element: The element to context-click.
122
136
If None, clicks on current mouse position.
123
137
"""
124
- if on_element :
125
- self .move_to_element (on_element )
126
- self ._actions .append (lambda : self ._driver .execute (
127
- Command .CLICK , {'button' : 2 }))
138
+ if self ._driver .w3c :
139
+ self .w3c_actions .pointer_action .context_click (on_element )
140
+ self .w3c_actions .key_action .pause ()
141
+ else :
142
+ if on_element :
143
+ self .move_to_element (on_element )
144
+ self ._actions .append (lambda : self ._driver .execute (
145
+ Command .CLICK , {'button' : 2 }))
128
146
return self
129
147
130
148
def double_click (self , on_element = None ):
@@ -135,10 +153,15 @@ def double_click(self, on_element=None):
135
153
- on_element: The element to double-click.
136
154
If None, clicks on current mouse position.
137
155
"""
138
- if on_element :
139
- self .move_to_element (on_element )
140
- self ._actions .append (lambda : self ._driver .execute (
141
- Command .DOUBLE_CLICK , {}))
156
+ if self ._driver .w3c :
157
+ self .w3c_actions .pointer_action .double_click (on_element )
158
+ for _ in range (4 ):
159
+ self .w3c_actions .key_action .pause ()
160
+ else :
161
+ if on_element :
162
+ self .move_to_element (on_element )
163
+ self ._actions .append (lambda : self ._driver .execute (
164
+ Command .DOUBLE_CLICK , {}))
142
165
return self
143
166
144
167
def drag_and_drop (self , source , target ):
@@ -150,8 +173,15 @@ def drag_and_drop(self, source, target):
150
173
- source: The element to mouse down.
151
174
- target: The element to mouse up.
152
175
"""
153
- self .click_and_hold (source )
154
- self .release (target )
176
+ if self ._driver .w3c :
177
+ self .w3c_actions .pointer_action .click_and_hold (source ) \
178
+ .move_to (target ) \
179
+ .release ()
180
+ for _ in range (3 ):
181
+ self .w3c_actions .key_action .pause ()
182
+ else :
183
+ self .click_and_hold (source )
184
+ self .release (target )
155
185
return self
156
186
157
187
def drag_and_drop_by_offset (self , source , xoffset , yoffset ):
@@ -164,9 +194,16 @@ def drag_and_drop_by_offset(self, source, xoffset, yoffset):
164
194
- xoffset: X offset to move to.
165
195
- yoffset: Y offset to move to.
166
196
"""
167
- self .click_and_hold (source )
168
- self .move_by_offset (xoffset , yoffset )
169
- self .release ()
197
+ if self ._driver .w3c :
198
+ self .w3c_actions .pointer_action .click_and_hold (source ) \
199
+ .move_to_location (xoffset , yoffset ) \
200
+ .release ()
201
+ for _ in range (3 ):
202
+ self .w3c_actions .key_action .pause ()
203
+ else :
204
+ self .click_and_hold (source )
205
+ self .move_by_offset (xoffset , yoffset )
206
+ self .release ()
170
207
return self
171
208
172
209
def key_down (self , value , element = None ):
@@ -188,6 +225,7 @@ def key_down(self, value, element=None):
188
225
self .click (element )
189
226
if self ._driver .w3c :
190
227
self .w3c_actions .key_action .key_down (value )
228
+ self .w3c_actions .pointer_action .pause ()
191
229
else :
192
230
self ._actions .append (lambda : self ._driver .execute (
193
231
Command .SEND_KEYS_TO_ACTIVE_ELEMENT ,
@@ -212,6 +250,7 @@ def key_up(self, value, element=None):
212
250
self .click (element )
213
251
if self ._driver .w3c :
214
252
self .w3c_actions .key_action .key_up (value )
253
+ self .w3c_actions .pointer_action .pause ()
215
254
else :
216
255
self ._actions .append (lambda : self ._driver .execute (
217
256
Command .SEND_KEYS_TO_ACTIVE_ELEMENT ,
@@ -239,8 +278,12 @@ def move_to_element(self, to_element):
239
278
:Args:
240
279
- to_element: The WebElement to move to.
241
280
"""
242
- self ._actions .append (lambda : self ._driver .execute (
243
- Command .MOVE_TO , {'element' : to_element .id }))
281
+ if self ._driver .w3c :
282
+ self .w3c_actions .pointer_action .move_to (to_element )
283
+ self .w3c_actions .key_action .pause ()
284
+ else :
285
+ self ._actions .append (lambda : self ._driver .execute (
286
+ Command .MOVE_TO , {'element' : to_element .id }))
244
287
return self
245
288
246
289
def move_to_element_with_offset (self , to_element , xoffset , yoffset ):
@@ -253,11 +296,15 @@ def move_to_element_with_offset(self, to_element, xoffset, yoffset):
253
296
- xoffset: X offset to move to.
254
297
- yoffset: Y offset to move to.
255
298
"""
256
- self ._actions .append (
257
- lambda : self ._driver .execute (Command .MOVE_TO , {
258
- 'element' : to_element .id ,
259
- 'xoffset' : int (xoffset ),
260
- 'yoffset' : int (yoffset )}))
299
+ if self ._driver .w3c :
300
+ self .w3c_actions .pointer_action .move_to (to_element , xoffset , yoffset )
301
+ self .w3c_actions .key_action .pause ()
302
+ else :
303
+ self ._actions .append (
304
+ lambda : self ._driver .execute (Command .MOVE_TO , {
305
+ 'element' : to_element .id ,
306
+ 'xoffset' : int (xoffset ),
307
+ 'yoffset' : int (yoffset )}))
261
308
return self
262
309
263
310
def release (self , on_element = None ):
@@ -268,9 +315,13 @@ def release(self, on_element=None):
268
315
- on_element: The element to mouse up.
269
316
If None, releases on current mouse position.
270
317
"""
271
- if on_element :
272
- self .move_to_element (on_element )
273
- self ._actions .append (lambda : self ._driver .execute (Command .MOUSE_UP , {}))
318
+ if self ._driver .w3c :
319
+ self .w3c_actions .pointer_action .release ()
320
+ self .w3c_actions .key_action .pause ()
321
+ else :
322
+ if on_element :
323
+ self .move_to_element (on_element )
324
+ self ._actions .append (lambda : self ._driver .execute (Command .MOUSE_UP , {}))
274
325
return self
275
326
276
327
def send_keys (self , * keys_to_send ):
0 commit comments