WebDriver - Key Commands in Internet Explorer

I am using Selenium 2.28 and IE8 on WinXP32. I need to send the following command to my webpage:ALT + k

In Chrome and Firefox17 works fine:

- Chrome:
Actions builder = new Actions(driver);
builder.sendKeys(Keys.ALT, "k").build().perform();

- Firefox 17 (requires extra command key for same effect):
Actions builder = new Actions(driver);
builder.sendKeys(Keys.SHIFT, Keys.ALT, "k").build().perform();

      


I've tried everything from IE IE without success:

- builder.sendKeys(Keys.ALT, "k").build().perform();
- builder.sendKeys(Keys.ALT, Keys.SHIFT, "k").build().perform();
- builder.sendKeys(Keys.chord(Keys.ALT, "k")).build().perform();
- builder.sendKeys(Keys.chord(Keys.SHIFT, Keys.ALT, "k")).build().perform();
- builder.keyDown(Keys.ALT).sendKeys("k").build().perform();
- builder.keyDown(Keys.ALT).sendKeys("k").keyUp(Keys.ALT).build().perform();
- builder.keyDown(Keys.SHIFT).keyDown(Keys.ALT).sendKeys("k").build().perform();
- builder.keyDown(Keys.SHIFT).keyDown(Keys.ALT).sendKeys("k").keyUp(Keys.ALT).keyUp(Keys.SHIFT).build().perform();

      

Any suggestion on how to achieve what I want?

+3


source to share


3 answers


I had to resort to using Robot to do this in Internet Explorer:

import java.awt.Robot
...
Robot robot;
try { 
  robot = new Robot();          
  robot.keyPress(KeyEvent.VK_ALT);
  robot.keyPress(KeyEvent.VK_K);
  robot.keyRelease(KeyEvent.VK_K);
  robot.keyRelease(KeyEvent.VK_ALT);
}catch (AWTException e) {
  e.printStackTrace();
}

      



I would prefer to do this just using the Selenium API, but this workaround will be sufficient until it is possible.

+2


source


The current driver (2.45) uses PostMessage with default parameters, which is not reliable to mimic modifier keys [1] [2]. If you set IE's "RequireWindowFocus" to true, then the driver will use SendInput and this will work.

If you are using C # you must create a driver like this:



var options = new InternetExplorerOptions();
options.RequireWindowFocus = true;

var driver = new InternetExplorerDriver(options);

      

+1


source


To rephrase daw's answer for Java, this is the only way to find keys like Control to IE:

DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
capabilities.setCapability(InternetExplorerDriver.REQUIRE_WINDOW_FOCUS, true);
WebDriver driver = new InternetExplorerDriver(capabilities);

      

This is because the IEDriver uses your mouse.

0


source







All Articles