WebDriver - Internet Explorer中的键盘命令

4

我正在使用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个回答

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来完成这个任务,但在这种情况下,这个解决办法已经足够了。


我曾经遇到过完全相同的问题,你的机器人也为我解决了这个问题。 - zhujik

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(文章涉及Windows编程的相关知识)
  2. PostMessage WM_KEYDOWN send multiply keys?(询问如何使用PostMessage函数发送多个键盘按键消息)

0
重新表述daw's answer的Java版本,这是我发现的将诸如Control之类的键发送到IE的唯一方法:
DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
capabilities.setCapability(InternetExplorerDriver.REQUIRE_WINDOW_FOCUS, true);
WebDriver driver = new InternetExplorerDriver(capabilities);

这会导致IEDriver接管您的鼠标,产生副作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接