4

我在 WinXP32 上使用 Selenium 2.28 和 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();

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

4

3 回答 3

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 来做这件事,但这种解决方法就足够了,直到有可能。

于 2013-01-23T17:00:25.773 回答
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 发送多个键?
于 2015-04-28T16:06:27.297 回答
0

改写daw对 Java 的回答,这是我发现将诸如 Control 之类的键发送到 IE 的唯一方法:

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

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

于 2016-02-03T14:23:04.853 回答