@@ -196,9 +196,8 @@ public void testControlClickingOnMultiSelectionList() {
196196 @ Ignore (IE )
197197 @ Ignore (value = FIREFOX , travis = true )
198198 public void testControlClickingOnCustomMultiSelectionList () {
199- assumeFalse ("FIXME: macs don't have CONTROL key" ,
200- getEffectivePlatform (driver ).is (Platform .MAC ));
201199 driver .get (pages .selectableItemsPage );
200+ Keys key = getEffectivePlatform (driver ).is (Platform .MAC ) ? Keys .COMMAND : Keys .CONTROL ;
202201
203202 WebElement reportingElement = driver .findElement (By .id ("infodiv" ));
204203
@@ -207,11 +206,11 @@ public void testControlClickingOnCustomMultiSelectionList() {
207206 List <WebElement > listItems = driver .findElements (By .tagName ("li" ));
208207
209208 Actions actions = new Actions (driver );
210- Action selectThreeItems = actions .keyDown (Keys . CONTROL )
209+ Action selectThreeItems = actions .keyDown (key )
211210 .click (listItems .get (1 ))
212211 .click (listItems .get (3 ))
213212 .click (listItems .get (5 ))
214- .keyUp (Keys . CONTROL )
213+ .keyUp (key )
215214 .build ();
216215
217216 selectThreeItems .perform ();
@@ -224,6 +223,66 @@ public void testControlClickingOnCustomMultiSelectionList() {
224223 assertThat (reportingElement .getText ()).isEqualTo ("#item7" );
225224 }
226225
226+ @ Test
227+ @ Ignore (IE )
228+ @ Ignore (value = FIREFOX , travis = true )
229+ public void testControlClickingWithMultiplePointers () {
230+ driver .get (pages .selectableItemsPage );
231+
232+ Keys key = getEffectivePlatform (driver ).is (Platform .MAC ) ? Keys .COMMAND : Keys .CONTROL ;
233+ WebElement reportingElement = driver .findElement (By .id ("infodiv" ));
234+
235+ assertThat (reportingElement .getText ()).isEqualTo ("no info" );
236+
237+ List <WebElement > listItems = driver .findElements (By .tagName ("li" ));
238+
239+ PointerInput defaultPen = new PointerInput (PointerInput .Kind .PEN , "default pen" );
240+ Sequence actionListPen = new Sequence (defaultPen , 0 )
241+ .addAction (new Pause (defaultPen , Duration .ZERO ))
242+ .addAction (defaultPen .createPointerMove (Duration .ZERO , PointerInput .Origin .fromElement (listItems .get (1 )), 0 , 0 ))
243+ .addAction (defaultPen .createPointerDown (0 ))
244+ .addAction (defaultPen .createPointerUp (0 ))
245+ .addAction (new Pause (defaultPen , Duration .ZERO ))
246+ .addAction (new Pause (defaultPen , Duration .ZERO ))
247+ .addAction (new Pause (defaultPen , Duration .ZERO ))
248+ .addAction (defaultPen .createPointerMove (Duration .ZERO , PointerInput .Origin .fromElement (listItems .get (3 )), 0 , 0 ))
249+ .addAction (defaultPen .createPointerDown (0 ))
250+ .addAction (defaultPen .createPointerUp (0 ))
251+ .addAction (new Pause (defaultPen , Duration .ZERO ));
252+
253+ PointerInput defaultMouse = new PointerInput (PointerInput .Kind .MOUSE , "default mouse" );
254+ Sequence actionListMouse = new Sequence (defaultMouse , 0 )
255+ .addAction (new Pause (defaultMouse , Duration .ZERO ))
256+ .addAction (new Pause (defaultMouse , Duration .ZERO ))
257+ .addAction (new Pause (defaultMouse , Duration .ZERO ))
258+ .addAction (new Pause (defaultMouse , Duration .ZERO ))
259+ .addAction (defaultMouse .createPointerMove (Duration .ZERO , PointerInput .Origin .fromElement (listItems .get (5 )), 0 , 0 ))
260+ .addAction (defaultMouse .createPointerDown (0 ))
261+ .addAction (defaultMouse .createPointerUp (0 ))
262+ .addAction (new Pause (defaultMouse , Duration .ZERO ))
263+ .addAction (new Pause (defaultMouse , Duration .ZERO ))
264+ .addAction (new Pause (defaultMouse , Duration .ZERO ))
265+ .addAction (new Pause (defaultMouse , Duration .ZERO ));
266+
267+ KeyInput defaultKeyboard = new KeyInput ("default keyboard" );
268+ Sequence actionListKeyboard = new Sequence (defaultKeyboard , 0 )
269+ .addAction (defaultKeyboard .createKeyDown (key .getCodePoint ()))
270+ .addAction (new Pause (defaultKeyboard , Duration .ZERO ))
271+ .addAction (new Pause (defaultKeyboard , Duration .ZERO ))
272+ .addAction (new Pause (defaultKeyboard , Duration .ZERO ))
273+ .addAction (new Pause (defaultKeyboard , Duration .ZERO ))
274+ .addAction (new Pause (defaultKeyboard , Duration .ZERO ))
275+ .addAction (new Pause (defaultKeyboard , Duration .ZERO ))
276+ .addAction (new Pause (defaultKeyboard , Duration .ZERO ))
277+ .addAction (new Pause (defaultKeyboard , Duration .ZERO ))
278+ .addAction (new Pause (defaultKeyboard , Duration .ZERO ))
279+ .addAction (defaultKeyboard .createKeyUp (key .getCodePoint ()));
280+
281+ ((RemoteWebDriver ) driver ).perform (Arrays .asList (actionListKeyboard , actionListPen , actionListMouse ));
282+
283+ assertThat (reportingElement .getText ()).isEqualTo ("#item2 #item4 #item6" );
284+ }
285+
227286 private void navigateToClicksPageAndClickLink () {
228287 driver .get (pages .clicksPage );
229288
0 commit comments