Selenium WebDriver的Keys.chord()函数在Internet Explorer中不起作用(9)

时间:2012-11-14 17:40:08

标签: java internet-explorer selenium internet-explorer-9

我一直在Selenium中使用键盘快捷键来执行UI功能,而且我一直在使用Keys.chord()来模拟同时按键。它们在Firefox和Chrome中运行得很好,但在Internet Explorer中却没有。在IE中,似乎每个按键都是单独执行而不是一起执行。

以下行适用于Firefox和Chrome,但不适用于IE:    driver.findElement(By.id(id)).sendKeys(Keys.chord(Keys.SHIFT, Keys.ARROW_LEFT));

我也尝试过IE中的Actions类,但无济于事:

Actions builder = new Actions(driver);
builder.keyDown(driver.findElement(By.id(id)), Keys.SHIFT).sendKeys(Keys.ARROW_LEFT).perform();

如果有人可以帮我解决这个问题的解决方法(或者它应该正常工作并且我做错了),我们将不胜感激!感谢。

2 个答案:

答案 0 :(得分:0)

我发布了similar issue earlier today。 无法提出硒解决方案,因此使用此解决方法:

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

希望可以提供帮助

答案 1 :(得分:0)

具有默认选项的当前驱动程序(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?