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?
source to share
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.
source to share
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);
source to share
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.
source to share