WebDriver - Internet Explorer中的关键命令

时间:2013-01-23 12:34:01

标签: selenium webdriver

我正在使用Selenium 2.28& WinXP32上的IE8。我需要能够将以下键盘命令发送到我的网页:ALT + k

以下适用于Chrome& Firefox17:

- 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();


我在IE中尝试了以下所有内容但没有成功:

- 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();

关于如何实现我想要的任何建议?

3 个答案:

答案 0 :(得分:2)

我不得不求助于使用机器人为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();
}

我更愿意只使用Selenium API,但这种解决方法就足够了,直到可能。

答案 1 :(得分:1)

具有默认选项的当前驱动程序(2.45)使用PostMessage,这对于模拟修饰键[1] [2]是不可靠的。如果将IE选项“RequireWindowFocus”设置为true,则驱动程序将使用SendInput代替它,这将起作用。

如果使用C#,您可以像这样创建驱动程序:

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

var driver = new InternetExplorerDriver(options);
  1. http://blogs.msdn.com/b/oldnewthing/archive/2005/05/30/423202.aspx
  2. PostMessage WM_KEYDOWN send multiply keys?

答案 2 :(得分:0)

要为daw's answer重新定义Java,这是我发现将控件等密钥发送到IE的唯一方法:

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

这有IEDriver接管鼠标的副作用。