How to press + click with selenium

I have a problem with my Selenium code not performing the correct keyPress + click operation.

The test should open the jqueryui.com link and select the first 2 li elements on the page.

I use Selenium 2.23 and Firefox 10. My code is as follows (I have three different ways to make it work, but no one has done it):

FirefoxProfile profile = new FirefoxProfile ();

profile.setEnableNativeEvents (true); WebDriver browser = new FirefoxDriver (profile); browser.get (" http://jqueryui.com/demos/selectable/ ");

List items = browser.findElements (By.cssSelector ("ol # selectable li"));

Actions a = new Actions(browser); a.keyDown(Keys.CONTROL) .moveToElement(elements.get(0)) .click() .moveToElement(elements.get(1)) .click() .keyUp(Keys.CONTROL) .build() .perform(); Keyboard keyboard = ((HasInputDevices) browser).getKeyboard(); keyboard.pressKey(Keys.CONTROL); List<WebElement> selectOptions = browser.findElements(By.cssSelector("ol#selectable li")); selectOptions.get(1).click(); selectOptions.get(3).click(); keyboard.releaseKey(Keys.CONTROL); 
  Actions builder = new Actions(browser); builder.keyDown(elements.get(0), Keys.CONTROL) .click(elements.get(0)) .click(elements.get(1)) .keyUp(Keys.CONTROL); Action selectMultiple = builder.build(); selectMultiple.perform(); Robot robot = new Robot(); robot.delay(1000); robot.keyPress(KeyEvent.CTRL_MASK); elements.get(0).click(); elements.get(1).click(); robot.keyRelease(KeyEvent.CTRL_MASK); browser.quit(); 

Can someone help me with some other suggestions?

+4
source share
3 answers

I really don't know why none of your attempts work (especially the first one). Basic constants are a mess.

Anyway, I was able to do this job (on Windows XP):

 Robot robot = new Robot(); robot.keyPress(KeyEvent.VK_CONTROL); elements.get(0).click(); elements.get(1).click(); robot.keyRelease(KeyEvent.VK_CONTROL); 
+2
source

This is a bug in Selenium that affects shift / control / alt in combination with clicks on Firefox for Windows. Start a mistake and maybe fix it.

+3
source

I think this is not a mistake.

Try using this (C #):

 Action builder = new Actions(driver); builder.KeyDown(Keys.Control); builder.Click(element1); builder.Click(element2); builder.KeyUp(Keys.Control); builder.Perform(); 

or for you (Java):

Actions a = new actions (browser); a.keyDown (Keys.CONTROL) .moveToElement (elements.get (0)). click (). moveToElement (elements.get (1)). click (). keyUp (Keys.CONTROL) .build (). perform ( );

Just instead

.Click () ;. build () ;. Run ();

use

 a.Click(YourWebElement); a.keyUp(Keys.CONTROL); a.build(); a.perform(); 

Must work,

+1
source

All Articles