1

我一直在 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();

如果有人可以帮助我找到解决方法(或者如果它应该工作并且我只是做错了),将不胜感激!谢谢。

4

2 回答 2

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 发送多个键?
于 2015-04-28T15:35:42.587 回答
0

今天早些时候发布了一个类似的问题。无法提出硒解决方案,因此改用此解决方法:

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

希望这可能会有所帮助

于 2013-01-23T17:04:14.370 回答